国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 後端開發(fā) php教程 PHP PSR-2 程式碼風(fēng)格規(guī)範(fàn)

PHP PSR-2 程式碼風(fēng)格規(guī)範(fàn)

Jul 23, 2016 am 08:54 AM

程式碼風(fēng)格規(guī)範(fàn)

本篇規(guī)範(fàn)是 [PSR-1][] 基本程式碼規(guī)範(fàn)的繼承與擴(kuò)充。

本規(guī)範(fàn)希望透過制定一系列規(guī)範(fàn)化php程式碼的規(guī)則,以減少在瀏覽不同作者的程式碼時,因程式碼風(fēng)格的不同而造成不便。

當(dāng)多名程式設(shè)計師在多個專案中合作時,就需要一個共同的編碼規(guī)範(fàn),
而本文中的風(fēng)格規(guī)範(fàn)源自於多個不同專案程式碼風(fēng)格的共同特性,
因此,本規(guī)範(fàn)的價值在於我們都遵循這個編碼風(fēng)格,而不是在於它本身。

關(guān)鍵字「必須」("MUST")、「一定不可/一定不能」("MUST NOT")、「需要」("REQUIRED")、
「將會」("SHALL")、 「不會」("SHALL NOT")、「應(yīng)該」("SHOULD")、「不該」("SHOULD NOT")、
「推薦」("RECOMMENDED")、「可以」("MAY" )和」可選「("OPTIONAL")的詳細(xì)描述可參見[RFC 2119][] 。

概覽


代碼必須遵循 [PSR-1][] 中的編碼規(guī)範(fàn) 。

代碼必須使用4個空格符而不是 tab鍵 進(jìn)行縮排。

每行的字元數(shù)應(yīng)該軟性保持在80個之內(nèi), 理論上一定不可多於120個, 但一定不能有硬性限制。

每個 namespace 命名空間宣告語句和 use 宣告語句區(qū)塊後面,必須插入一個空白行。

類別的開始花括號({)必須寫在函數(shù)宣告後自成一行,結(jié)束花括號(})也必須寫在函數(shù)主體後自成一行。

方法的開始花括號({)必須寫在函數(shù)宣告後自成一行,結(jié)束花括號(})也必須寫在函數(shù)主體後自成一行。

類別的屬性和方法必須新增存取修飾符(private、protected 以及public),abstract 以及final 必須宣告在存取修飾符之前,而static 必須宣告在存取修飾符之後。

控制結(jié)構(gòu)的關(guān)鍵字後必須要有一個空格符,而呼叫方法或函數(shù)時則一定不能有。

控制結(jié)構(gòu)的開始花括號({)必須寫在宣告的同一行,而結(jié)束花括號(})必須寫在主體後自成一行。

控制結(jié)構(gòu)的開始左括號後和結(jié)束右括號前,都一定不能有空格符。

1.1. 例子

以下範(fàn)例程式簡單地展示了上述大部分規(guī)格:

  1. namespace VendorPackage;
  2. use FooInterface;
  3. use FooInterface;use BarClass as Bar;
  4. use OtherVendorOtherPackageBazClass;
  5. class Foo extends Bar implements FooInterface
  6. {
  7. public function sampleFunction($a, $b = null)
  8. public function sampleFunction($a, $b = null)
  9. if ($a === $b) {
  10. bar();
  11. } elseif ($a > $b) {
  12. $foo->bar($arg1);
  13. } else {
  14. BazClass::bar($arg2, $arg3);
  15. }
  16. }
  17. final public static function bar()
  18. {
  19. // method body
}
}
複製程式碼

通則


2.1 基本編碼準(zhǔn)則

代碼必須符合 [PSR-1][] 中的所有規(guī)範(fàn)。

2.2 文件

所有PHP檔案必須使用Unix LF (linefeed)作為行的結(jié)束符號。

所有PHP檔案必須以一個空白行作為結(jié)束。

純PHP程式碼檔案必須省略最後的 ?> 結(jié)束標(biāo)籤。

2.3. 行

行的長度一定不能有硬性的約束。

軟性的長度約束一定要限制在120個字以內(nèi),若超過此長度,帶代碼規(guī)範(fàn)檢查的編輯器一定要發(fā)出警告,不過一定不可發(fā)出錯誤提示。

每行不應(yīng)該多於80個字符,大於80字符的行應(yīng)該折成多行。

非空白行後一定不能有多餘的空格符。

空白行可以使得閱讀程式碼更方便以及有助於程式碼的分塊。

每行一定不能存在多於一條語句。

2.4. 縮排

代碼必須使用4個空格符的縮進(jìn),一定不能用 tab鍵 。

備註: 使用空格而不是tab鍵縮排的好處在於,
避免在比較程式碼差異、打補(bǔ)丁、重閱程式碼以及註解時產(chǎn)生混淆。
並且,使用空格縮進(jìn),讓對齊變得更方便。

2.5. 關(guān)鍵字 以及 True/False/Null

PHP所有 [關(guān)鍵字][]必須全部小寫。

常數(shù) true 、false 和 null 也必須全部小寫。

namespace 以及 use 聲明


namespace 宣告後 必須 插入一行空白。

所有 use 必須 在 namespace 後聲明。

每個 use 宣告語句 必須 只有一個 use 關(guān)鍵字。

use 宣告語句區(qū)塊後 必須 要有一個空白行。

例如:

  1. namespace VendorPackage;
  2. use FooClass;
  3. use BarClass as
  4. use FooClass;
  5. use BarClass as as
// ... additional PHP code ...
複製程式碼


複製程式碼

複製程式碼

類、屬性和方法 此處的「類別」泛指所有的class類別、介面以及traits可重複使用程式碼區(qū)塊。 4.1. 擴(kuò)展與繼承

關(guān)鍵字 extends 和 implements
必須
寫在類別名稱的同一行。
  1. 類別的開始花括號
  2. 必須
  3. 獨佔一行,結(jié)束花括號也
  4. 必須
  5. 在類主體後面獨佔一行。
  6. namespace VendorPackage;
use FooClass;use BarClass as Bar;use FooClass;
OClass as Barsa>

class ClassName extends ParentClass implements ArrayAccess, Countable{ // constants, properties, methods}

複製程式碼
}
  1. 複製程式碼可以
  2. 分成多行,這樣的話,每個繼承介面名稱都
  3. 必須
  4. 分開獨立成行,包括第一個。
  5. namespace VendorPackage;
  6. use FooClass;
use BarClass as Bar;
use FooClass;OClass as Barsa> class ClassName extends ParentClass implements
ArrayAccess,

Countable, Serializable{

// constants, properties, methods

{ // constants, properties, methods{

// constants, properties, methods

} // constants, properties, methods}

// constants, properties, methods

} // constants, pro>代碼

4.2. 屬性

每個屬性都

必須
新增存取修飾符。
  1. 一定不可
  2. 使用關(guān)鍵字 var 宣告一個屬性。
  3. 每個語句
  4. 一定不可
  5. 定義超過一個屬性。
不要使用底線作為前綴,來區(qū)分屬性是 protected 或 private。
以下是屬性宣告的範(fàn)例:

namespace VendorPackage;

class ClassName

{{ public $foo = null;}複製程式碼4.3. 方法

所有方法都

必須

新增存取修飾符。
    不要
  1. 使用底線作為前綴,來區(qū)分方法是 protected 或 private。
  2. 方法名稱後
  3. 一定不能
  4. 有空格符,其開始花括號
  5. 必須
  6. 獨佔一行,結(jié)束花括號也
  7. 必須
  8. 在方法主體後單獨成一行。參數(shù)左括號後面和右括號前
  9. 一定不能
有空格。
一個標(biāo)準(zhǔn)的方法宣告可參考以下範(fàn)例,留意其括號、逗號、空格以及花括號的位置。 namespace VendorPackage;class ClassName{ public function fooooBarBaz($arg1 $arg3 = []) { // method body }}複製程式碼
4.4. 方法的參數(shù)

參數(shù)列表中,每個逗號後面必須要有一個空格,而逗號前面一定不能有空格。

有預(yù)設(shè)值的參數(shù),必須放到參數(shù)清單的末端。

  1. namespace VendorPackage;
  2. class ClassName
  3. {
  4. public function foo($arg1, &128($22 $理解可以
  5. 分列成多行,這樣,包括第一個參數(shù)在內(nèi)的每個參數(shù)都
  6. 必須
  7. 單獨成行。
拆分成多行的參數(shù)清單後,結(jié)束括號以及方法開始花括號 必須 寫在同一行,中間用一個空格分隔。

namespace VendorPackage;class ClassName{

public function aVery??L類, ClassfVer

&$arg2,

array $arg3 = []
) {
// method body
    }
  1. }
  2. 複製程式碼
  3. }
  4. 複製程式碼
  5. }
  6. 複製程式碼
  7. }
複製程式碼}

複製程式碼}

複製程式碼
}
  1. 複製碼
  2. 4.5. abstract 、 final 、 以及static
  3. 需要加入 abstract 或 final 宣告時,
  4. 必須
  5. 寫在存取修飾符前,而 static 則
  6. 必須
  7. 寫在其後。
  8. namespace VendorPackage;
abstract class ClassName
{ protected static; > abstract protected function zim();
final public static function bar()

{ // method body }} }}

程式碼
    4.6. 方法及函數(shù)調(diào)用
  1. 方法及函數(shù)呼叫時,方法名稱或函數(shù)名稱與參數(shù)左括號之間
  2. 一定不能
  3. 有空格,參數(shù)右括號前也
  4. 一定不能
有空格。每個參數(shù)前
一定不能有空格,但其後必須
有一個空格。

bar();

$foo->bar($arg1);
Foo::bar($arg2, $ arg3);
  1. 複製程式碼
  2. 參數(shù)
  3. 可以
分列成多行,此時包括第一個參數(shù)在內(nèi)的每個參數(shù)都
必須單獨成行。


$foo->bar( $longArgument,

$longerArgument, $muchLongerArgument

複製程式碼

控制結(jié)構(gòu)

控制結(jié)構(gòu)的基本規(guī)格如下:

控制結(jié)構(gòu)關(guān)鍵字後必須有一個空格。

左括號 ( 後一定不能有空格。

右括號 ) 前也一定不能有空格。

右括號 ) 與開始花括號 { 間一定有一個空格。

結(jié)構(gòu)體主體

一定
要有一次縮排。

結(jié)束花括號 }
一定
    結(jié)構(gòu)體主體後單獨成行。
  1. 每個結(jié)構(gòu)體的主體都
  2. 必須
  3. 被包含在成對的花括號之中,
  4. 這能讓結(jié)構(gòu)體更加結(jié)構(gòu)話,以及減少加入新行時,出錯的可能性。
  5. 5.1. if 、 elseif 和 else
  6. 標(biāo)準(zhǔn)的 if 結(jié)構(gòu)如下程式碼所示,留意 括號、空格以及花括號的位置,
  7. 注意 else 和 elseif 都與前面的結(jié)束花括號在同一行。
if ($expr1) { // if body} elseif ($expr2) { // elseif body

} else {
// else body;}

複製程式碼
  1. 應(yīng)該使用關(guān)鍵字??>
  2. 應(yīng)該使用關(guān)鍵字??>取代所有else if ,以使得所有的控制關(guān)鍵字都像是單獨的一個字。
  3. 5.2. switch 和 case
  4. 標(biāo)準(zhǔn)的 switch 結(jié)構(gòu)如下程式碼所示,留意括號、空格以及花括號的位置。
  5. case 語句
  6. 必須
  7. 相對 switch 進(jìn)行一次縮進(jìn),而 break 語句以及 case 內(nèi)的其它語句都 必須 相對 case 進(jìn)行一次縮排。
  8. 如果有非空的 case 直穿語句,主體裡必須有類似 // no break 的註解。
  9. switch ($expr) {
  10. case 0:
echo 'First case, with a break';
break ; case 1: echo 'Second case, which falls through';
// no break case 2: case 3: case 4: echo??> echo Third case, return instead of break'; return; default: echo 'Default case'; break;}複製代碼}複製代碼複製代碼 >5.3. while 和 do while

一個規(guī)範(fàn)的 while 語句應(yīng)該如下所示,注意其 括號、空格、花括號的位置。

  1. while ($expr) {
  2. // structure body
  3. }
複製程式碼複製程式碼
??>

標(biāo)準(zhǔn)的do while 語句如下所示,同樣的,注意其括號、空格以及花括號的位置。
  1. do {
  2. // structure body;
} while ($expr);
} while ($expr);

複製程式碼
    5.4. for
  1. 標(biāo)準(zhǔn)的 for 語句如下所示,注意其 括號、空格以及花括號的位置。
for ($i = 0; $i // for body
}

複製程式碼
    5.5. foreach
  1. 標(biāo)準(zhǔn)的 foreach 語句如下所示,注意其 括號、空格、花括號的位置。
foreach ($iterable as $key => $value) { // foreach body
}

複製程式碼
  1. 5.6. try, catch
  2. 標(biāo)準(zhǔn)的 try catch 語句如下所示,注意其 括號、空格、花括號的位置。
  3. try {
// try body
} catch (FirstExceptionType $e) { // catch body // catch body} catch (OtherExceptionType $e) {

// catch body

}

複製程式碼

閉包 閉包聲明時,關(guān)鍵字 function 後以及關(guān)鍵字 use 的前後都必須

要有一個空格。

開始花括號必須

寫在聲明的同一行,結(jié)束花括號

必須緊跟主體結(jié)束的下一行。 參數(shù)列表和變數(shù)列表的左括號後面以及右括號前,必須不能

有空格。

參數(shù)和變數(shù)清單中,逗號前必須不能

有空格,而逗號後

必須

要有空格。
閉包中有預(yù)設(shè)值的參數(shù)
    必須
  1. 放到清單的後面。
  2. 標(biāo)準(zhǔn)的閉包聲明語句如下所示,注意其 括號、逗號、空格、花括號的位置。
  3. $closureWithArgs = function ($arg1, $arg2) {
// body};

$closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) { // body};複製代碼

參數(shù)列表以及變數(shù)列表

可以
分成多行,這樣,包括第一個在內(nèi)的每個參數(shù)或變數(shù)都
必須
    單獨成行,而列表的右括號與閉包的開始花括號
  1. 必須
  2. 放在同一行。
  3. 以下幾個例子,包含了參數(shù)和變數(shù)列表被分成多行的多情況。
  4. $longArgs_noVars = function (
  5. $longArgument,
  6. $longerArgument,
  7. $longArgument,
  8. $longerArgument,
  9. $longArgument,
  10. $longerArgument, // body
  11. };
  12. $noArgs_longVars = function () use (
  13. $longVar1,
  14. $longerVar2,
  15. $muchLongerVar3
  16. $longerVar2,
  17. $muchLongerVar3
  18. //
  19. body
  20. };
  21. $longArgs_longVars = function (
  22. $longArgument,
  23. $longerArgument,
  24. $muchLongerArgument
  25. ) long. longerVar2,
  26. $muchLongerVar3
  27. ) {
  28. // body
  29. };
  30. $longArgs_shortVars = function (
  31. $longArgument, $ muchLongerArgument
  32. ) use ($var1) {
  33. // body
  34. };
$shortArgs_longVars = function ($arg) use (
$longVar1, $muchLongerVar3) {
// body

};

複製程式碼
  1. 注意,閉包直接用作函數(shù)或方法呼叫的參數(shù)時,以上規(guī)則仍然適用。
  2. $foo->bar(
$arg1,
function ($arg2) use ($var1) { // body },
$arg3);複製程式碼

總結(jié)


以上規(guī)範(fàn)難免有疏忽,其中包括但不限於:

全域變數(shù)與常數(shù)的定義

函數(shù)的定義

操作符與賦值

行內(nèi)對齊

註解與文件描述區(qū)塊

類別名稱的前綴及後綴

最佳實踐

本規(guī)範(fàn)之後的修訂與擴(kuò)展將彌補(bǔ)以上不足。

附錄 A. 問卷調(diào)查

為了編寫本規(guī)範(fàn),小組制定了問卷,用來統(tǒng)計各成員項目的共同規(guī)範(fàn)。
以下是此問卷調(diào)查的數(shù)據(jù),在此供查閱。

A.1. 問卷資料
  1. url,http://www.horde.org/apps/horde/docs/CODING_STANDARDS,http://pear.php.net/manual/ en/standards.php,http://solarphp.com/manual/appendix-standards.style,http://framework.zend.com/manual/en/coding-standard.html,http://symfony.com/ doc/2.0/contributing/code/standards.html,http://www.ppi.io/docs/coding-standards.html,https://github.com/ezsystems/ezp-next/wiki/codingstandards,http: //book.cakephp.org/2.0/en/contributing/cakephp-coding-conventions.html,https://github.com/UnionOfRAD/lithium/wiki/Spec:-Coding,http://drupal.org/coding -standards,http://code.google.com/p/sabredav/,http://area51.phpbb.com/docs/31x/coding-guidelines.html,https://docs.google.com/a/ zikula.org/document/edit?authkey=CPCU0Us&hgd=1&id=1fcqb93Sn-hR9c0mkN6m_tyWnmEvo??swKBtSc0tKkZmJA,http://www.chisimba.com,n/a,https://github.com/Rex/j/mill/Respec??ky/5,https://github.com/Respec??ky/5. coding-standards-sample.php,n/a,Object Calisthenics for PHP,http://doc.nette.org/en/coding-standard,http://flow3.typo3.org,https://github.com /propelorm/Propel2/wiki/Coding-Standards,http://developer.joomla.org/coding-standards.html
  2. voting,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes ,yes,yes,yes,yes,yes,no,no,no,?,yes,no,yes
  3. indent_type,4,4,4,4,4,tab,4,tab,tab,2,4 ,tab,4,4,4,4,4,4,tab,tab,4,tab
  4. line_length_limit_soft,75,75,75,75,no,85,120,120,80,80,80,no,100,80 ,80,?,?,120,80,120,no,150
  5. line_length_limit_hard,85,85,85,85,no,no,no,no,100,?,no,no,no,100,100,?,120,1200,?,no,no,no,100,100,?,120,120,? ,no,no,no,no
  6. class_names,studly,studly,studly,studly,studly,studly,studly,studly,studly,studly,studly,lower_under,studly,lower,studly,studly,studly,studly,? ,studly,studly,studly
  7. class_brace_line,next,next,next,next,next,same,next,same,same,same,same,next,next,next,next,next,next,next,next,same,next,same ,next,next
  8. constant_names,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper ,upper
  9. true_false_null,lower,lower,lower,lower,lower,lower,lower,lower,lower,upper,lower,lower,lower,upper,lower,lower,lower,lower,lower,upper,lower,lower
  10. method_names,camel,camel,camel,camel,camel,camel,camel,camel,camel,camel,camel,lower_under,camel,camel,camel,camel,camel,camel,camel,camel,camel,camel
  11. method_brace_line,next,next,next,next,next,same,next,same,same,same,same,next,next,same,next,next,next,next,next,same,next,next
  12. control_brace_line ,same,same,same,same,same,same,next,same,same,same,same,next,same,same,next,same,same,same,same,same,same,next
  13. control_space_after,yes ,yes,yes,yes,yes,no,yes,yes,yes,yes,no,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes
  14. always_use_control_braces,yes,yes,yes
  15. always_use_control_braces,yes,yes ,yes,yes,yes,yes,no,yes,yes,yes,no,yes,yes,yes,yes,no,yes,yes,yes,yes,yes,yes
  16. else_elseif_line,same,same,same ,same,same,same,next,same,same,next,same,next,same,next,next,same,same,same,same,same,same,next
  17. case_break_indent_from_switch,0/1,0/1 ,0/1,1/2,1/2,1/2,1/2,1/1,1/1,1/2,1/2,1/1,1/2,1/2,1 /2,1/2,1/2,1/2,0/1,1/1,1/2,1/2
  18. function_space_after,no,no,no,no,no,no,no,no ,no,no,no,no,no,no,no,no,no,no,no,no,no,no
  19. closing_php_tag_required,no,no,no,no,no,no,no,no,yes ,no,no,no,no,yes,no,no,no,no,no,yes,no,no
  20. line_endings,LF,LF,LF,LF,LF,LF,LF,LF,?,LF ,?,LF,LF,LF,LF,?,,LF,?,LF,LF,LF
  21. static_or_visibility_first,static,?,static,either,either,either,visibility,visibility,visibility,either,static, either,?,visibility,?,?,either,either,visibility,visibility,static,?
  22. control_space_parens,no,no,no,no,no,no,yes,no,no,no,no,no, no,yes,?,no,no,no,no,no,no,no
  23. blank_line_after_php,no,no,no,no,yes,no,no,no,no,yes,yes,no,no, yes,?,yes,yes,no,yes,no,yes,no
  24. class_method_control_brace,next/next/same,next/next/same,next/next/same,next/next/same,next/next/ same,same/same/same,next/next/next,same/same/same,same/same/same,same/same/same,same/same/same,next/next/next,next/next/same, next/same/same,next/next/next,next/next/same,next/next/same,next/next/same,next/next/same,same/same/same,next/next/same,next/ next/next
複製程式碼
A.2. 問卷說明

indent_type:
縮排型. tab = "使用 tab 鍵一次", 2 or 4 = "空格的數(shù)量"

line_length_limit_soft:
每行字元數(shù)量的「軟」限制. ? = 不可辯護(hù)或無回應(yīng), no 表示無限制.

line_length_limit_hard:
每行字元數(shù)量的「硬」限制. ? = 不可辯護(hù)或無作答, no 表示無限制.

class_names:
類別名稱的命名. lower = 只允許小寫字母, lower_under = 下滑線分隔的小寫字母, studly = StudlyCase 的駝峰風(fēng)格.

class_brace_line:
類別的開始花括號是與 class 關(guān)鍵字在同一行或是在其的下一行?

constant_names:
類別的常數(shù)如何命名? upper = 底線分隔的大寫字母.

true_false_null:
關(guān)鍵字 true、false 以及 null 是全部小寫 lower 還是全部大寫 upper?

method_names:
方法名稱如何命名? camel = camelCase, lower_under = 下劃線分隔的小寫字母.

method_brace_line:
方法的開始花括號是與方法名稱在同一行還是在其的下一行?

control_brace_line:
控制結(jié)構(gòu)的開始花括號是與宣告在同一行還是在其的下一行?

control_space_after:
控制結(jié)構(gòu)關(guān)鍵字後是否有空格?

always_use_control_braces:
控制結(jié)構(gòu)體是否都要包含在花括號內(nèi)?

else_elseif_line:
else 或 elseif 與前面的結(jié)束花括號在同一行還是在其的下一行?

case_break_indent_from_switch:
switch 語句中的 case 與 break 需要相對 switch 縮排幾次?

function_space_after:
函數(shù)呼叫語句中,函數(shù)名稱與變數(shù)清單的左括號之間是否有空格?

closing_php_tag_required:
純 PHP 程式碼的文件,是否需要 ?> 結(jié)束標(biāo)籤?

line_endings:
選擇哪一種類型的行結(jié)束符號?

static_or_visibility_first:
宣告一個靜態(tài)方法時,static 是寫存取修飾符前還是後?

control_space_parens:
控制結(jié)構(gòu)裡,左括號後面、右括號前是否有空格? yes = if ( $expr ), no = if ($expr).

blank_line_after_php:
PHP 開始標(biāo)籤後,是否需要一個空白行?

class_method_control_brace:
開始花括號在類別、方法和控制結(jié)構(gòu)的位置統(tǒng)計。

A.3. 問卷統(tǒng)計結(jié)果
  1. indent_type:
  2. tab: 7
  3. 2: 1
  4. 4: 14
  5. line_length_limit_soft: ??
  6. no: 3
  7. 75: 4
  8. 80: 6
  9. 85: 1
  10. 100: 1
  11. 120: 4
  12. 150: 1
  13. 120: 4
  14. 150: 1 ?: 2
  15. no: 11
  16. 85: 4
  17. 100: 3
  18. 120: 2
  19. class_names:
  20. ?: 1
  21. lower: 1 studly: 19
  22. class_brace_line:
  23. 下一個: 19
  24. class_brace_line:
  25. next: 16
  26. same: 6
  27. constant_names:
  28. upper: 22
  29. truestant_names:
  30. upper: 22
  31. true_false_null: ?? 3
  32. method_names:
  33. camel: 21
  34. lower_under: 1
  35. method_brace_line:
  36. next: 15
  37. same: 7
  38. control_bm> same: 7
  39. control_bee> : 18
  40. control_space_after:
  41. no: 2
  42. yes: 20
  43. always_use_control_braces:
  44. no: 3
  45. yes: 19 ext.> s 3:19 3: 19 3: 19case_break_indent_from_switch:
  46. 0/1: 4
  47. 1/1: 4
  48. 1/2: 14
  49. function_space_after:function_space_after: no: 19
  50. yes: 3
  51. line_endings:
  52. ?: 5
  53. LF: 17
  54. static_or_visibility_first:
  55. ?: 5
  56. either: 7 visibility: 6
  57. control_space_parens:
  58. ?: 1
  59. no: 19
  60. yes: 2
  61. blank_line_after_php:
  62. ?????> ? : 8
  63. class_method_control_brace:
  64. next/next/next: 4
  65. next/next/same: 11
  66. next/same/same: 1
  67. same/same/ame: 60
  68. 複製程式碼
  69. 轉(zhuǎn)自Github(PizzaLiu)
PHP, PSR

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在PHP中實施身份驗證和授權(quán)? 如何在PHP中實施身份驗證和授權(quán)? Jun 20, 2025 am 01:03 AM

tosecurelyhandleauthenticationandationallizationInphp,lofterTheSesteps:1.AlwaysHashPasswordSwithPassword_hash()andverifyusingspasspassword_verify(),usepreparedStatatementStopreventsqlineptions,andStoreSeruserDatain usseruserDatain $ _sessiveferterlogin.2.implementrole-2.imaccessccsccccccccccccccccccccccccc.

如何在PHP中安全地處理文件上傳? 如何在PHP中安全地處理文件上傳? Jun 19, 2025 am 01:05 AM

要安全處理PHP中的文件上傳,核心在於驗證文件類型、重命名文件並限制權(quán)限。 1.使用finfo_file()檢查真實MIME類型,僅允許特定類型如image/jpeg;2.用uniqid()生成隨機(jī)文件名,存儲至非Web根目錄;3.通過php.ini和HTML表單限製文件大小,設(shè)置目錄權(quán)限為0755;4.使用ClamAV掃描惡意軟件,增強(qiáng)安全性。這些步驟有效防止安全漏洞,確保文件上傳過程安全可靠。

PHP中==(鬆散比較)和===(嚴(yán)格的比較)之間有什麼區(qū)別? PHP中==(鬆散比較)和===(嚴(yán)格的比較)之間有什麼區(qū)別? Jun 19, 2025 am 01:07 AM

在PHP中,==與===的主要區(qū)別在於類型檢查的嚴(yán)格程度。 ==在比較前會進(jìn)行類型轉(zhuǎn)換,例如5=="5"返回true,而===要求值和類型都相同才會返回true,例如5==="5"返回false。使用場景上,===更安全應(yīng)優(yōu)先使用,==僅在需要類型轉(zhuǎn)換時使用。

如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? 如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? Jun 19, 2025 pm 05:13 PM

PHP中使用基本數(shù)學(xué)運(yùn)算的方法如下:1.加法用 號,支持整數(shù)和浮點數(shù),也可用於變量,字符串?dāng)?shù)字會自動轉(zhuǎn)換但不推薦依賴;2.減法用-號,變量同理,類型轉(zhuǎn)換同樣適用;3.乘法用*號,適用於數(shù)字及類似字符串;4.除法用/號,需避免除以零,並註意結(jié)果可能是浮點數(shù);5.取模用%號,可用於判斷奇偶數(shù),處理負(fù)數(shù)時餘數(shù)符號與被除數(shù)一致。正確使用這些運(yùn)算符的關(guān)鍵在於確保數(shù)據(jù)類型清晰並處理好邊界情況。

如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進(jìn)行交互? 如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進(jìn)行交互? Jun 19, 2025 am 01:07 AM

是的,PHP可以通過特定擴(kuò)展或庫與MongoDB和Redis等NoSQL數(shù)據(jù)庫交互。首先,使用MongoDBPHP驅(qū)動(通過PECL或Composer安裝)創(chuàng)建客戶端實例並操作數(shù)據(jù)庫及集合,支持插入、查詢、聚合等操作;其次,使用Predis庫或phpredis擴(kuò)展連接Redis,執(zhí)行鍵值設(shè)置與獲取,推薦phpredis用於高性能場景,Predis則便於快速部署;兩者均適用於生產(chǎn)環(huán)境且文檔完善。

我如何了解最新的PHP開發(fā)和最佳實踐? 我如何了解最新的PHP開發(fā)和最佳實踐? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

什麼是PHP,為什麼它用於Web開發(fā)? 什麼是PHP,為什麼它用於Web開發(fā)? Jun 23, 2025 am 12:55 AM

PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

如何設(shè)置PHP時區(qū)? 如何設(shè)置PHP時區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

See all articles