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

首頁 后端開發(fā) php教程 PHP PSR-2 代碼風格規(guī)范

PHP PSR-2 代碼風格規(guī)范

Jul 23, 2016 am 08:54 AM

代碼風格規(guī)范

本篇規(guī)范是 [PSR-1][] 基本代碼規(guī)范的繼承與擴展。

本規(guī)范希望通過制定一系列規(guī)范化php代碼的規(guī)則,以減少在瀏覽不同作者的代碼時,因代碼風格的不同而造成不便。

當多名程序員在多個項目中合作時,就需要一個共同的編碼規(guī)范,
而本文中的風格規(guī)范源自于多個不同項目代碼風格的共同特性,
因此,本規(guī)范的價值在于我們都遵循這個編碼風格,而不是在于它本身。

關鍵詞 “必須”("MUST")、“一定不可/一定不能”("MUST NOT")、“需要”("REQUIRED")、
“將會”("SHALL")、“不會”("SHALL NOT")、“應該”("SHOULD")、“不該”("SHOULD NOT")、
“推薦”("RECOMMENDED")、“可以”("MAY")和”可選“("OPTIONAL")的詳細描述可參見 [RFC 2119][] 。

概覽


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

代碼必須使用4個空格符而不是 tab鍵 進行縮進。

每行的字符數(shù)應該軟性保持在80個之內, 理論上一定不可多于120個, 但一定不能有硬性限制。

每個 namespace 命名空間聲明語句和 use 聲明語句塊后面,必須插入一個空白行。

類的開始花括號({)必須寫在函數(shù)聲明后自成一行,結束花括號(})也必須寫在函數(shù)主體后自成一行。

方法的開始花括號({)必須寫在函數(shù)聲明后自成一行,結束花括號(})也必須寫在函數(shù)主體后自成一行。

類的屬性和方法必須添加訪問修飾符(private、protected 以及 public), abstract 以及 final 必須聲明在訪問修飾符之前,而 static 必須聲明在訪問修飾符之后。

控制結構的關鍵字后必須要有一個空格符,而調用方法或函數(shù)時則一定不能有。

控制結構的開始花括號({)必須寫在聲明的同一行,而結束花括號(})必須寫在主體后自成一行。

控制結構的開始左括號后和結束右括號前,都一定不能有空格符。

1.1. 例子

以下例子程序簡單地展示了以上大部分規(guī)范:

  1. namespace Vendor\Package;
  2. use FooInterface;
  3. use BarClass as Bar;
  4. use OtherVendor\OtherPackage\BazClass;
  5. class Foo extends Bar implements FooInterface
  6. {
  7. public function sampleFunction($a, $b = null)
  8. {
  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
  20. }
  21. }
復制代碼

通則


2.1 基本編碼準則

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

2.2 文件

所有PHP文件必須使用Unix LF (linefeed)作為行的結束符。

所有PHP文件必須以一個空白行作為結束。

純PHP代碼文件必須省略最后的 ?> 結束標簽。

2.3. 行

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

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

每行不應該多于80個字符,大于80字符的行應該折成多行。

非空行后一定不能有多余的空格符。

空行可以使得閱讀代碼更加方便以及有助于代碼的分塊。

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

2.4. 縮進

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

備注: 使用空格而不是tab鍵縮進的好處在于,
避免在比較代碼差異、打補丁、重閱代碼以及注釋時產(chǎn)生混淆。
并且,使用空格縮進,讓對齊變得更方便。

2.5. 關鍵字 以及 True/False/Null

PHP所有 [關鍵字][]必須全部小寫。

常量 true 、false 和 null 也必須全部小寫。

namespace 以及 use 聲明


namespace 聲明后 必須 插入一個空白行。

所有 use 必須 在 namespace 后聲明。

每條 use 聲明語句 必須 只有一個 use 關鍵詞。

use 聲明語句塊后 必須 要有一個空白行。

例如:

  1. namespace Vendor\Package;
  2. use FooClass;
  3. use BarClass as Bar;
  4. use OtherVendor\OtherPackage\BazClass;
  5. // ... additional PHP code ...
復制代碼

類、屬性和方法


此處的“類”泛指所有的class類、接口以及traits可復用代碼塊。

4.1. 擴展與繼承

關鍵詞 extends 和 implements必須寫在類名稱的同一行。

類的開始花括號必須獨占一行,結束花括號也必須在類主體后獨占一行。

  1. namespace Vendor\Package;
  2. use FooClass;
  3. use BarClass as Bar;
  4. use OtherVendor\OtherPackage\BazClass;
  5. class ClassName extends ParentClass implements \ArrayAccess, \Countable
  6. {
  7. // constants, properties, methods
  8. }
復制代碼

implements 的繼承列表也可以分成多行,這樣的話,每個繼承接口名稱都必須分開獨立成行,包括第一個。

  1. namespace Vendor\Package;
  2. use FooClass;
  3. use BarClass as Bar;
  4. use OtherVendor\OtherPackage\BazClass;
  5. class ClassName extends ParentClass implements
  6. \ArrayAccess,
  7. \Countable,
  8. \Serializable
  9. {
  10. // constants, properties, methods
  11. }
復制代碼
4.2. 屬性

每個屬性都必須添加訪問修飾符。

一定不可使用關鍵字 var 聲明一個屬性。

每條語句一定不可定義超過一個屬性。

不要使用下劃線作為前綴,來區(qū)分屬性是 protected 或 private。

以下是屬性聲明的一個范例:

  1. namespace Vendor\Package;
  2. class ClassName
  3. {
  4. public $foo = null;
  5. }
復制代碼
4.3. 方法

所有方法都必須添加訪問修飾符。

不要使用下劃線作為前綴,來區(qū)分方法是 protected 或 private。

方法名稱后一定不能有空格符,其開始花括號必須獨占一行,結束花括號也必須在方法主體后單獨成一行。參數(shù)左括號后和右括號前一定不能有空格。

一個標準的方法聲明可參照以下范例,留意其括號、逗號、空格以及花括號的位置。

  1. namespace Vendor\Package;
  2. class ClassName
  3. {
  4. public function fooBarBaz($arg1, &$arg2, $arg3 = [])
  5. {
  6. // method body
  7. }
  8. }
復制代碼
4.4. 方法的參數(shù)

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

有默認值的參數(shù),必須放到參數(shù)列表的末尾。

  1. namespace Vendor\Package;
  2. class ClassName
  3. {
  4. public function foo($arg1, &$arg2, $arg3 = [])
  5. {
  6. // method body
  7. }
  8. }
復制代碼

參數(shù)列表可以分列成多行,這樣,包括第一個參數(shù)在內的每個參數(shù)都必須單獨成行。

拆分成多行的參數(shù)列表后,結束括號以及方法開始花括號 必須 寫在同一行,中間用一個空格分隔。

  1. namespace Vendor\Package;
  2. class ClassName
  3. {
  4. public function aVeryLongMethodName(
  5. ClassTypeHint $arg1,
  6. &$arg2,
  7. array $arg3 = []
  8. ) {
  9. // method body
  10. }
  11. }
復制代碼
4.5. abstract 、 final 、 以及 static

需要添加 abstract 或 final 聲明時, 必須寫在訪問修飾符前,而 static 則必須寫在其后。

  1. namespace Vendor\Package;
  2. abstract class ClassName
  3. {
  4. protected static $foo;
  5. abstract protected function zim();
  6. final public static function bar()
  7. {
  8. // method body
  9. }
  10. }
復制代碼
4.6. 方法及函數(shù)調用

方法及函數(shù)調用時,方法名或函數(shù)名與參數(shù)左括號之間一定不能有空格,參數(shù)右括號前也 一定不能有空格。每個參數(shù)前一定不能有空格,但其后必須有一個空格。

  1. bar();
  2. $foo->bar($arg1);
  3. Foo::bar($arg2, $arg3);
復制代碼

參數(shù)可以分列成多行,此時包括第一個參數(shù)在內的每個參數(shù)都必須單獨成行。

  1. $foo->bar(
  2. $longArgument,
  3. $longerArgument,
  4. $muchLongerArgument
  5. );
復制代碼

控制結構


控制結構的基本規(guī)范如下:

控制結構關鍵詞后必須有一個空格。

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

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

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

結構體主體一定要有一次縮進。

結束花括號 } 一定在結構體主體后單獨成行。

每個結構體的主體都必須被包含在成對的花括號之中,
這能讓結構體更加結構話,以及減少加入新行時,出錯的可能性。

5.1. if 、 elseif 和 else

標準的 if 結構如下代碼所示,留意 括號、空格以及花括號的位置,
注意 else 和 elseif 都與前面的結束花括號在同一行。

  1. if ($expr1) {
  2. // if body
  3. } elseif ($expr2) {
  4. // elseif body
  5. } else {
  6. // else body;
  7. }
復制代碼

應該使用關鍵詞 elseif 代替所有 else if ,以使得所有的控制關鍵字都像是單獨的一個詞。

5.2. switch 和 case

標準的 switch 結構如下代碼所示,留意括號、空格以及花括號的位置。
case 語句必須相對 switch 進行一次縮進,而 break 語句以及 case 內的其它語句都 必須 相對 case 進行一次縮進。
如果存在非空的 case 直穿語句,主體里必須有類似 // no break 的注釋。

  1. switch ($expr) {
  2. case 0:
  3. echo 'First case, with a break';
  4. break;
  5. case 1:
  6. echo 'Second case, which falls through';
  7. // no break
  8. case 2:
  9. case 3:
  10. case 4:
  11. echo 'Third case, return instead of break';
  12. return;
  13. default:
  14. echo 'Default case';
  15. break;
  16. }
復制代碼
5.3. while 和 do while

一個規(guī)范的 while 語句應該如下所示,注意其 括號、空格以及花括號的位置。

  1. while ($expr) {
  2. // structure body
  3. }
復制代碼

標準的 do while 語句如下所示,同樣的,注意其 括號、空格以及花括號的位置。

  1. do {
  2. // structure body;
  3. } while ($expr);
復制代碼
5.4. for

標準的 for 語句如下所示,注意其 括號、空格以及花括號的位置。

  1. for ($i = 0; $i // for body
  2. }
復制代碼
5.5. foreach

標準的 foreach 語句如下所示,注意其 括號、空格以及花括號的位置。

  1. foreach ($iterable as $key => $value) {
  2. // foreach body
  3. }
復制代碼
5.6. try, catch

標準的 try catch 語句如下所示,注意其 括號、空格以及花括號的位置。

  1. try {
  2. // try body
  3. } catch (FirstExceptionType $e) {
  4. // catch body
  5. } catch (OtherExceptionType $e) {
  6. // catch body
  7. }
復制代碼

閉包


閉包聲明時,關鍵詞 function 后以及關鍵詞 use 的前后都必須要有一個空格。

開始花括號必須寫在聲明的同一行,結束花括號必須緊跟主體結束的下一行。

參數(shù)列表和變量列表的左括號后以及右括號前,必須不能有空格。

參數(shù)和變量列表中,逗號前必須不能有空格,而逗號后必須要有空格。

閉包中有默認值的參數(shù)必須放到列表的后面。

標準的閉包聲明語句如下所示,注意其 括號、逗號、空格以及花括號的位置。

  1. $closureWithArgs = function ($arg1, $arg2) {
  2. // body
  3. };
  4. $closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
  5. // body
  6. };
復制代碼

參數(shù)列表以及變量列表可以分成多行,這樣,包括第一個在內的每個參數(shù)或變量都必須單獨成行,而列表的右括號與閉包的開始花括號必須放在同一行。

以下幾個例子,包含了參數(shù)和變量列表被分成多行的多情況。

  1. $longArgs_noVars = function (
  2. $longArgument,
  3. $longerArgument,
  4. $muchLongerArgument
  5. ) {
  6. // body
  7. };
  8. $noArgs_longVars = function () use (
  9. $longVar1,
  10. $longerVar2,
  11. $muchLongerVar3
  12. ) {
  13. // body
  14. };
  15. $longArgs_longVars = function (
  16. $longArgument,
  17. $longerArgument,
  18. $muchLongerArgument
  19. ) use (
  20. $longVar1,
  21. $longerVar2,
  22. $muchLongerVar3
  23. ) {
  24. // body
  25. };
  26. $longArgs_shortVars = function (
  27. $longArgument,
  28. $longerArgument,
  29. $muchLongerArgument
  30. ) use ($var1) {
  31. // body
  32. };
  33. $shortArgs_longVars = function ($arg) use (
  34. $longVar1,
  35. $longerVar2,
  36. $muchLongerVar3
  37. ) {
  38. // body
  39. };
復制代碼

注意,閉包被直接用作函數(shù)或方法調用的參數(shù)時,以上規(guī)則仍然適用。

  1. $foo->bar(
  2. $arg1,
  3. function ($arg2) use ($var1) {
  4. // body
  5. },
  6. $arg3
  7. );
復制代碼

總結


以上規(guī)范難免有疏忽,其中包括但不僅限于:

全局變量和常量的定義

函數(shù)的定義

操作符和賦值

行內對齊

注釋和文檔描述塊

類名的前綴及后綴

最佳實踐

本規(guī)范之后的修訂與擴展將彌補以上不足。

附錄 A. 問卷調查

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

A.1. 問卷數(shù)據(jù)
  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%3A-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_tyWnmEvoswKBtSc0tKkZmJA,http://www.chisimba.com,n/a,https://github.com/Respect/project-info/blob/master/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,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,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,yes,yes,yes,no,yes,yes,yes,no,yes,yes,yes,yes,no,yes,yes,yes,yes,yes,yes
  15. 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
  16. 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
  17. 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
  18. 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
  19. line_endings,LF,LF,LF,LF,LF,LF,LF,LF,?,LF,?,LF,LF,LF,LF,?,,LF,?,LF,LF,LF
  20. static_or_visibility_first,static,?,static,either,either,either,visibility,visibility,visibility,either,static,either,?,visibility,?,?,either,either,visibility,visibility,static,?
  21. control_space_parens,no,no,no,no,no,no,yes,no,no,no,no,no,no,yes,?,no,no,no,no,no,no,no
  22. 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
  23. 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ù)量的“軟”限制. ? = 不可辯或無作答, no 表示無限制.

line_length_limit_hard:
每行字符數(shù)量的“硬”限制. ? = 不可辯或無作答, no 表示無限制.

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

class_brace_line:
類的開始花括號是與 class 關鍵字在同一行或是在其的下一行?

constant_names:
類的常量如何命名? upper = 下劃線分隔的大寫字母.

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

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

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

control_brace_line:
控制結構的開始花括號是與聲明在同一行還是在其的下一行?

control_space_after:
控制結構關鍵詞后是否有空格?

always_use_control_braces:
控制結構體是否都要被包含在花括號內?

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

case_break_indent_from_switch:
switch 語句中的 case 和 break 需要相對 switch 縮進多少次?

function_space_after:
函數(shù)調用語句中,函數(shù)名稱與變量列表的左括號間是否有空格?

closing_php_tag_required:
純 PHP 代碼的文件,是否需要 ?> 結束標簽?

line_endings:
選擇哪種類型的行結束符?

static_or_visibility_first:
聲明一個靜態(tài)方法時,static 是寫訪問修飾符前還是后?

control_space_parens:
控制結構里,左括號后以及右括號前是否有空格?yes = if ( $expr ), no = if ($expr).

blank_line_after_php:
PHP 開始標簽后,是否需要一個空行?

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

A.3. 問卷統(tǒng)計結果
  1. indent_type:
  2. tab: 7
  3. 2: 1
  4. 4: 14
  5. line_length_limit_soft:
  6. ?: 2
  7. no: 3
  8. 75: 4
  9. 80: 6
  10. 85: 1
  11. 100: 1
  12. 120: 4
  13. 150: 1
  14. line_length_limit_hard:
  15. ?: 2
  16. no: 11
  17. 85: 4
  18. 100: 3
  19. 120: 2
  20. class_names:
  21. ?: 1
  22. lower: 1
  23. lower_under: 1
  24. studly: 19
  25. class_brace_line:
  26. next: 16
  27. same: 6
  28. constant_names:
  29. upper: 22
  30. true_false_null:
  31. lower: 19
  32. upper: 3
  33. method_names:
  34. camel: 21
  35. lower_under: 1
  36. method_brace_line:
  37. next: 15
  38. same: 7
  39. control_brace_line:
  40. next: 4
  41. same: 18
  42. control_space_after:
  43. no: 2
  44. yes: 20
  45. always_use_control_braces:
  46. no: 3
  47. yes: 19
  48. else_elseif_line:
  49. next: 6
  50. same: 16
  51. case_break_indent_from_switch:
  52. 0/1: 4
  53. 1/1: 4
  54. 1/2: 14
  55. function_space_after:
  56. no: 22
  57. closing_php_tag_required:
  58. no: 19
  59. yes: 3
  60. line_endings:
  61. ?: 5
  62. LF: 17
  63. static_or_visibility_first:
  64. ?: 5
  65. either: 7
  66. static: 4
  67. visibility: 6
  68. control_space_parens:
  69. ?: 1
  70. no: 19
  71. yes: 2
  72. blank_line_after_php:
  73. ?: 1
  74. no: 13
  75. yes: 8
  76. class_method_control_brace:
  77. next/next/next: 4
  78. next/next/same: 11
  79. next/same/same: 1
  80. same/same/same: 6
復制代碼

轉自Github(PizzaLiu)

PHP, PSR


本站聲明
本文內容由網(wǎng)友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅動的應用程序,用于創(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

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

如何在PHP中實施身份驗證和授權? 如何在PHP中實施身份驗證和授權? 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中的文件上傳,核心在于驗證文件類型、重命名文件并限制權限。1.使用finfo_file()檢查真實MIME類型,僅允許特定類型如image/jpeg;2.用uniqid()生成隨機文件名,存儲至非Web根目錄;3.通過php.ini和HTML表單限制文件大小,設置目錄權限為0755;4.使用ClamAV掃描惡意軟件,增強安全性。這些步驟有效防止安全漏洞,確保文件上傳過程安全可靠。

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

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

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

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

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

是的,PHP可以通過特定擴展或庫與MongoDB和Redis等NoSQL數(shù)據(jù)庫交互。首先,使用MongoDBPHP驅動(通過PECL或Composer安裝)創(chuàng)建客戶端實例并操作數(shù)據(jù)庫及集合,支持插入、查詢、聚合等操作;其次,使用Predis庫或phpredis擴展連接Redis,執(zhí)行鍵值設置與獲取,推薦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

如何設置PHP時區(qū)? 如何設置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