Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
所有的 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小時內與您取得聯系。