# PSR-1:基本編碼標準
標準的這一部分包括應該被認為是確保共享PHP代碼之間高度技術互操作性所需的標準編碼元素。
本文件中的關鍵詞“必須”,“不得”,“必須”,“應該”,“不應該”,“應該”,“不應該”,“推薦”,“可以”和“可選”按照[RFC 2119中的](http://www.ietf.org/rfc/rfc2119.txt)描述進行解釋。
## [1.概述](http://phpfig.p2hp.com/psr/psr-1/#1-overview)
* 文件必須只使用`<?php`和`<?=`標簽。
* 對于PHP代碼,文件必須僅使用沒有BOM的UTF-8。
* 文件應該*任一*聲明的符號(類,函數,常量等)*或*引起副作用(例如產生的輸出,修改的.ini設置,等等),但是不應該這樣做既。
* 命名空間和類必須遵循“自動加載”PSR:\[[PSR-0](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md),[PSR-4](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md)\]。
* 類名必須聲明`StudlyCaps`。
* 類常量必須以全部大寫形式用下劃線分隔符聲明。
* 必須聲明方法名稱`camelCase`。
## [2.文件](http://phpfig.p2hp.com/psr/psr-1/#2-files)
### [2.1。PHP標簽](http://phpfig.p2hp.com/psr/psr-1/#21-php-tags)
PHP代碼必須使用長標簽或短回聲標簽;它不能使用其他標簽變體。`<?php ?>`
### [2.2。字符編碼](http://phpfig.p2hp.com/psr/psr-1/#22-character-encoding)
PHP代碼必須只使用沒有BOM的UTF-8。
### [2.3。副作用](http://phpfig.p2hp.com/psr/psr-1/#23-side-effects)
以下是具有聲明和副作用的文件示例;
即,要避免的一個例子:
~~~
<?php
// side effect: change ini settings
ini_set('error_reporting', E_ALL);
// side effect: loads a file
include "file.php";
// side effect: generates output
echo "<html>\n";
// declaration
function foo()
{
// function body
}
~~~
以下示例是包含沒有副作用的聲明的文件;
即要模仿的例子:
~~~
<?php
// declaration
function foo()
{
// function body
}
// conditional declaration is *not* a side effect
if (! function_exists('bar')) {
function bar()
{
// function body
}
}
~~~
## [3.命名空間和類名](http://phpfig.p2hp.com/psr/psr-1/#3-namespace-and-class-names)
命名空間和類必須遵循“自動加載”PSR:。
這意味著每個類本身都在一個文件中,并且位于至少一個級別的命名空間中:頂級供應商名稱。
類名必須聲明`StudlyCaps`。
為PHP 5.3編寫的代碼,必須使用正式的命名空間。
例如:
~~~
<?php
// PHP 5.3 and later:
namespace Vendor\Model;
class Foo
{
}
~~~
為5.2.x編寫的代碼,在SHOULD之前應該使用`Vendor_`類名稱前綴的偽命名約定。
~~~
<?php
// PHP 5.2.x and earlier:
class Vendor_Model_Foo
{
}
~~~
## [4.類常量,屬性和方法](http://phpfig.p2hp.com/psr/psr-1/#4-class-constants-properties-and-methods)
術語“類”指的是所有類,接口和特征。
### [4.1。常量](http://phpfig.p2hp.com/psr/psr-1/#41-constants)
類常量必須以全部大寫形式用下劃線分隔符聲明。例如:
~~~
<?php
namespace Vendor\Model;
class Foo
{
const VERSION = '1.0';
const DATE_APPROVED = '2012-06-01';
}
~~~
### [4.2。屬性](http://phpfig.p2hp.com/psr/psr-1/#42-properties)
本指南有意避免關于使用任何建議`$StudlyCaps`,`$camelCase`或`$under_score`屬性名稱。
無論使用何種命名約定,都應該在合理的范圍內一致地應用。該范圍可以是供應商級別,包級別,類級別或方法級別。
### [4.3。方法](http://phpfig.p2hp.com/psr/psr-1/#43-methods)
必須聲明方法名稱`camelCase()`。