所有的 JavaScript 项目适用同一种规范。
JavaScript 代码规范
代码规范通常包括以下几个方面:
变量和函数的命名规则
空格,缩进,注释的使用规则。
其他常用规范……
规范的代码可以更易于阅读与维护。
代码规范一般在开发前规定,可以跟你的团队成员来协商设置。
变量名
变量名推荐使用驼峰法来命名(camelCase):
firstName="John";
lastName="Doe";
price=19.90;
tax=0.20;
fullPrice=price + (price * tax);
空格与运算符
通常运算符 (=+ - * / ) 前后需要添加空格:
实例:
var x=y + z;
var values=["Volvo", "Saab", "Fiat"];
代码缩进
通常使用 4 个空格符号来缩进代码块:
函数:
function toCelsius(fahrenheit) {
return (5 / 9) * (fahrenheit - 32);
}
不推荐使用 TAB 键来缩进,因为不同编辑器 TAB 键的解析不一样。 |
语句规则
简单语句的通用规则:
一条语句通常以符号作为结束符。
实例:
var values=["Volvo", "Saab", "Fiat"];
var person={
firstName: "John",
lastName: "Doe",
age: 50,
eyeColor: "blue"
};
复杂语句的通用规则:
将左花括号放在第一行的结尾。
左花括号前添加一空格。
将右花括号独立放在一行。
不要以分号结束一个复杂的声明。
函数:
function toCelsius(fahrenheit) {
return (5 / 9) * (fahrenheit - 32);
}
循环:
for (i=0; i < 5; i++) {
x +=i;
}
条件语句:
if (time < 20) {
greeting="Good day";
} else {
greeting="Good evening";
}
对象规则
对象定义的规则:
将左花括号与类名放在同一行。
冒号与属性值间有个空格。
字符串使用双引号,数字不需要。
最后一个属性-值对后面不要添加逗号。
将右花括号独立放在一行,并以符号作为结束符号。
实例:
var person={
firstName: "John",
lastName: "Doe",
age: 50,
eyeColor: "blue"
};
短的对象代码可以直接写成一行:
实例:
var person={firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
每行代码字符小于 80
为了便于阅读每行字符建议小于数 80 个。
如果一个 JavaScript 语句超过了 80 个字符,建议在 运算符或者逗号后换行。
实例:
document.getElementById("demo").innerHTML=
"Hello Runoob.";
命名规则
一般很多代码语言的命名规则都是类似的,例如:
变量和函数为驼峰法( camelCase)
全局变量为大写 (UPPERCASE )
常量 (如 PI) 为大写 (UPPERCASE )
变量命名你是否使用这几种规则: hyp-hens, camelCase, 或 under_scores ?
HTML 和 CSS 的横杆(-)字符:
HTML5 属性可以以 data- (如:data-quantity, data-price) 作为前缀。
CSS 使用 - 来连接属性名 (font-size)。
- 通常在 JavaScript 中被认为是减法,所以不允许使用。 |
下划线:
很多程序员比较喜欢使用下划线(如:date_of_birth), 特别是在 SQL 数据库中。
PHP 语言通常都使用下划线。
帕斯卡拼写法(PascalCase):
帕斯卡拼写法(PascalCase) 在 C 语言中语言较多。
驼峰法:
JavaScript 中通常推荐使用驼峰法,jQuery 及其他 JavaScript 库都使用驼峰法。
变量名不要以 $ 作为开始标记,会与很多 JavaScript 库冲突。 |
HTML 载入外部 JavaScript 文件
使用简洁的格式载入 JavaScript 文件 ( type 属性不是必须的):
<script src="myscript.js">
使用 JavaScript 访问 HTML 元素
一个糟糕的 HTML 格式可能会导致 JavaScript 执行错误。
以下两个 JavaScript 语句会输出不同结果:
实例
var obj=getElementById("Demo")
var obj=getElementById("demo")
HTML 与 JavaScript 尽量使用相同的命名规则。
访问 HTML(5) 代码规范。
文件扩展名
HTML 文件后缀可以是 .html (或r .htm)。
CSS 文件后缀是 .css 。
JavaScript 文件后缀是 .js 。
使用小写文件名
大多 Web 服务器 (Apache, Unix) 对大小写敏感: london.jpg 不能通过 London.jpg 访问。
其他 Web 服务器 (Microsoft, IIS) 对大小写不敏感: london.jpg 可以通过 London.jpg 或 london.jpg 访问。
你必须保持统一的风格,我们建议统一使用小写的文件名。
如您还有不明白的可以在下面与我留言或是与我探讨QQ群308855039,我们一起飞!
PSR是一套代码编写规范,用于约束代码风格。以前没有规范的时候大家都是按照自己的习惯来书写代码,但每个人风格不一样,你的代码在别人看来就是很不爽。而且会导致许多问题:
function 函数名是否驼峰命名,
花括号{}是否换行写,
是该写注释呢还是不写
变量名是大写还是小写,
一个php文件中是一个类好还是允许有多个
所以PSR-[0-4]规范就应运而生,大家都共同遵守,就没有风格差异了。
PSR是由PHP-FIG这个组织发明的,FIG 是 Framework Interoperability Group(框架可互用性小组)的缩写。PSR是Proposing a Standards Recommendation(提出标准建议)的缩写。截止到目前为止,总共有5套PSR规范,分别是:
PSR-0 (Autoloading Standard) 自动加载标准
PSR-1 (Basic Coding Standard) 基础编码标准
PSR-2 (Coding Style Guide) 编码风格向导
PSR-3 (Logger Interface) 日志接口
PSR-4 (Improved Autoloading) 自动加载的增强版,可以替换掉PSR-0了。
PSR-0是第一套规范,主要用于规范自动加载,不过现在已经过时了,被PSR-4规范替代了。
PSR-0强制性要求几点:
1. 一个完全合格的namespace和class必须符合这样的结构:“\< Vendor Name>(< Namespace>)*< Class Name>”
2. 每个namespace必须有一个顶层的namespace("Vendor Name"提供者名字)
3. 每个namespace可以有多个子namespace
4. 当从文件系统中加载时,每个namespace的分隔符(\)要转换成 DIRECTORY_SEPARATOR(操作系统路径分隔符)
5. 在类名中,每个下划线(_)符号要转换成DIRECTORY_SEPARATOR(操作系统路径分隔符)。在namespace中,下划线(_)符号是没有(特殊)意义的。
6. 当从文件系统中载入时,合格的namespace和class一定是以 .php 结尾的
7. verdor name,namespaces,class名可以由大小写字母组合而成(大小写敏感的)
假如我的文件路径为Lib/Driver/Config.php,那么我的namespace的申明和使用为:
申明:namespace \Lib\Driver;
使用:use \Lib\Driver\Config;
namespace \Lib\Driver\Config->/path/to/vender/Lib/Driver/Config.php
Lib就是顶层namespace,Driver就是子namespace/
new \Lib\Driver\Config->转换的目录为/Lib/Driver/Config.php,替换反斜杠为目录分隔符
\Lib\Driver\Class_Name->转换为目录为/Lib/Driver/Class/Name.php
\Lib\Package_Name\Class_Name->转换为目录为/Lib/Package_Name/Class/Name.php
目录中的_就是下划线,classname中的下划线实际上会转为成路径分隔符。
加载的文件必须是.php结尾,既然使用php当然是.php结尾了。不再像以前那样有什么php3,php5
由于Liunx是区分大小写的,而windows是不区分大小写的,所以如果不注意大小写在win下正常开发,但是到了服务器上可能就无法正常执行了。
要求:
1. PHP源文件必须只使用 <?php 和 <?=这两种标签。
2. 源文件中php代码的编码格式必须是不带字节顺序标记(BOM)的UTF-8。
3. 一个源文件建议只用来做声明(类(class),函数(function),常量(constant)等)或者只用来做一些引起副作用的操作(例如:输出信息,修改.ini配置等),但不建议同时做这两件事。
4. 命名空间(namespace)和类(class) 必须遵守PSR-0标准。
5. 类名(class name) 必须使用骆驼式(StudlyCaps)写法 (注:驼峰式(cameCase)的一种变种,后文将直接用StudlyCaps表示)。
6. 类(class)中的常量必须只由大写字母和下划线(_)组成。
7. 方法名(method name) 必须使用驼峰式(cameCase)写法。
因为php有4种标签形式,所以这里规定了使用哪一种,统一规范。
windows笔记本默认是会在文件头部加入BOM头的,会导致在服务器上输出得很奇怪。
国内的中文编码是GBK,UTF-8是国际通用编码,不统一的话也会导致乱码。
不要在一个文件中又是定义函数又是修改系统配置的,一个文件只做一件事。
// 副作用:修改了ini配置
ini_set('error_reporting', E_ALL);
// 副作用:载入了文件
include "file.php";
// 副作用:产生了输出
echo "<html>\n";
// 声明 function
function foo()
{
// 函数体
}
分开写
// 声明 function
function foo()
{
// 函数体
}
// 副作用:修改了ini配置
ini_set('error_reporting', E_ALL);
// 副作用:载入了文件
include "file.php";
这样就很整齐。
参见PSR-0标准
类名必须使用驼峰命名,大驼峰小驼峰都可以。
<?php
class BigHouse{
}
<?php
class Test{
const USER_INFO='xx';
const NAME='xx';
}
<?php
class Test{
public function getUserInfo(){}
}
总结:虽然规范里没有规定使用大驼峰还是小驼峰,不过我的开发习惯是class name大驼峰,method name小驼峰
PSR-2用于约束代码风格,代码必须遵循PSR-1 中列出的所有规则。
代码必须使用 4 个空格的缩进,并且不得使用制表符进行缩进。现代编辑器都可以设置。
注意:仅使用空格,而不是将空格与制表符混合使用,有助于避免差异、补丁、历史记录和注释方面的问题。空格的使用还可以轻松插入细粒度的子缩进以进行行间对齐。
<?php
namespace Vendor\Package;//下面必须空一行
use FooClass;//use放在namespace下面
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;//use下面也要空一行
// ... additional PHP code ...
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
//写在一行
class ClassName extends ParentClass implements \ArrayAccess, \Countable
{//花括号换行写
// constants, properties, methods
}
implements有多个时可以写成多行,但要保证第一个必须在下一行。每行只能写一个接口,每行都要缩进。
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class ClassName extends ParentClass implements
\ArrayAccess,//第一个接口就要写在下一行,注意缩进
\Countable,
\Serializable
{
// constants, properties, methods
}
<?php
namespace Vendor\Package;
class ClassName
{
public $foo=null;
}
<?php
namespace Vendor\Package;
class ClassName
{
public function fooBarBaz($arg1, &$arg2, $arg3=[])
{
// method body
}
}
参数列表可以分成多行,和接口多行一样需要缩进。参数多行时做花括号不用换行写,但是要在右括号后空一格。如下:
<?php
namespace Vendor\Package;
class ClassName
{
public function aVeryLongMethodName(
ClassTypeHint $arg1,
&$arg2,
array $arg3=[]
) {
// method body
}
}
<?php
namespace Vendor\Package;
abstract class ClassName
{
protected static $foo; //static修饰符放到可见性声明后面
abstract protected function zim();//abstract 放到前面
final public static function bar()//final放到前面
{
// method body
}
}
<?php
bar();
$foo->bar($arg1);
Foo::bar($arg2, $arg3);
$foo->bar(
$longArgument,
$longerArgument,
$muchLongerArgument
);
<?php
if ($expr1) {
// if body
} elseif ($expr2) {
// elseif body
} else {
// else body;
}
elseif应该连着写 不要写成else if,要看着像一个单词。
<?php
switch ($expr) {//括号前后都要有空格
case 0:
echo 'First case, with a break';
break;//break要和上一行对齐
case 1:
echo 'Second case, which falls through';
//没有break语句的要写注释no break
// no break
case 2:
case 3:
case 4:
echo 'Third case, return instead of break';
return;
default:
echo 'Default case';
break;
}
<?php
while ($expr) {
// structure body
}
do {
// structure body;
} while ($expr);
<?php
for ($i=0; $i < 10; $i++) {
// for body
}
foreach ($iterable as $key=> $value) {
// foreach body
}
<?php
try {
// try body
} catch (FirstExceptionType $e) {
// catch body
} catch (OtherExceptionType $e) {
// catch body
}
<?php
$closureWithArgs=function ($arg1, $arg2) {
// body
};
$closureWithArgsAndVars=function ($arg1, $arg2) use ($var1, $var2) {
// body
};
//参数列表格式化
$longArgs_noVars=function (
$longArgument,
$longerArgument,
$muchLongerArgument
) {
// body
};
$noArgs_longVars=function () use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
$longArgs_longVars=function (
$longArgument,
$longerArgument,
$muchLongerArgument
) use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
$longArgs_shortVars=function (
$longArgument,
$longerArgument,
$muchLongerArgument
) use ($var1) {
// body
};
$shortArgs_longVars=function ($arg) use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
//闭包作为参数传入
$foo->bar(
$arg1,
function ($arg2) use ($var1) {
// body
},
$arg3
);
PSR-3规范是日志库的通用接口,一般框架都帮我们做好了,了解即可。官网文档
PSR-4也是自动加载规范,用来取代PSR-0的。
psr-0,psr-4是自动加载规范,psr-1,psr-2是代码风格规范,psr-3是日志库接口。
平常工作中尽量使用psr-1,psr-2规范来规范我们的代码风格。
*请认真填写需求信息,我们会在24小时内与您取得联系。