forked from zero-archive/fig-standards
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
1,060 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
Ниже описаны обязательные требования, которые должны соблюдаться в | ||
автозагрузчике для взаимодействия. | ||
|
||
Обязательные | ||
------------ | ||
|
||
* Полностью сформированное пространство имен и класс должны иметь следующую | ||
структуру `\<Vendor Name>\(<Namespace>\)*<Class Name>` | ||
* Каждое пространство имен должно иметь пространство имен верхнего уровня ("Vendor Name"). | ||
* Каждое пространство имен может содержать столько вложенных пространств имен, | ||
сколько ему необходимо. | ||
* Каждый разделитель пространств имен преобразуется в `DIRECTORY_SEPARATOR` при | ||
загрузке из файловой системы. | ||
* Каждый символ `_` в ИМЕНИ КЛАССА преобразуется в `DIRECTORY_SEPARATOR`. | ||
Символ `_` не имеет особого значения в пространстве имен. | ||
* Полностью сформированное пространство имен и класс дополняются `.php` при | ||
загрузке из файловой системы. | ||
* Буквы в именах поставщиков, пространствах имен, и именах классов могут в любой комбинации | ||
строчных и прописных букв. | ||
|
||
Примеры | ||
------- | ||
|
||
* `\Doctrine\Common\IsolatedClassLoader` => `/path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php` | ||
* `\Symfony\Core\Request` => `/path/to/project/lib/vendor/Symfony/Core/Request.php` | ||
* `\Zend\Acl` => `/path/to/project/lib/vendor/Zend/Acl.php` | ||
* `\Zend\Mail\Message` => `/path/to/project/lib/vendor/Zend/Mail/Message.php` | ||
|
||
Подчеркивания в Пространствах имен и Именах классов | ||
--------------------------------------------------- | ||
|
||
* `\namespace\package\Class_Name` => `/path/to/project/lib/vendor/namespace/package/Class/Name.php` | ||
* `\namespace\package_name\Class_Name` => `/path/to/project/lib/vendor/namespace/package_name/Class/Name.php` | ||
|
||
Стандарты установленные здесь должны быть наименьшим общим знаменателем для | ||
безболезненного взаимодействия с автозагрузчиком. Вы можете проверить, что вы следуете | ||
этим стандартам, используя предложенный пример SplClassLoader, реализующий возможность | ||
загружать PHP 5.3 классы. | ||
|
||
|
||
Пример реализации | ||
----------------- | ||
|
||
Ниже приведен пример функции, чтобы просто показать, как выше | ||
предложенные стандарты будут автоматически загружены. | ||
```php | ||
<?php | ||
|
||
function autoload($className) | ||
{ | ||
$className = ltrim($className, '\\'); | ||
$fileName = ''; | ||
$namespace = ''; | ||
if ($lastNsPos = strrpos($className, '\\')) { | ||
$namespace = substr($className, 0, $lastNsPos); | ||
$className = substr($className, $lastNsPos + 1); | ||
$fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; | ||
} | ||
$fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; | ||
|
||
require $fileName; | ||
} | ||
``` | ||
|
||
Реализация SplClassLoader | ||
------------------------- | ||
|
||
Следующий gist представляет собой пример реализации SplClassLoader, который может | ||
загружать ваши классы, если вы будете следовать выше предложенным стандартам для | ||
автозагрузчика. На данным момент это рекомендованный способ загружать PHP | ||
5.3 классы, которые следуют этим стандартам. | ||
|
||
* [http://gist.github.com/221634](http://gist.github.com/221634) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,175 @@ | ||
Основной стандарт написания кода | ||
================================ | ||
|
||
Этот раздел стандартов включает в себя что следует рассматривать как стандарт | ||
элементов кода, который необходим для обеспечения высокого уровня технической | ||
взаимодействия между общим PHP кодом. | ||
|
||
Ключевые слова "ДОЛЖЕН", "НЕ ДОЛЖЕН", "ТРЕБУЕТСЯ", "БУДЕТ", "НЕ БУДЕТ", "СЛЕДУЕТ", | ||
"НЕ СЛЕДУЕТ", "РЕКОМЕНДУЕТСЯ", "МОЖЕТ", и "ДОПОЛНИТЕЛЬНО" в этом документе должны | ||
быть истолкованы как описано в [RFC 2119][]. | ||
|
||
[RFC 2119]: http://www.ietf.org/rfc/rfc2119.txt | ||
[PSR-0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md | ||
|
||
|
||
1. Обзор | ||
-------- | ||
|
||
- Файлы ДОЛЖНЫ использовать только `<?php` и `<?=` теги. | ||
|
||
- Файлы ДОЛЖНЫ использовать только UTF-8 без BOM для PHP кода. | ||
|
||
- Файлам СЛЕДУЕТ *либо* объявлять знаки (классы, функции, константы, и т.д.) | ||
*или* оказывать побочный эффект (например, генерировать вывод, изменять .ini | ||
настройки, и т.д.) но НЕ СЛЕДУЕТ делать и то и другое. | ||
|
||
- Пространства имен и классы ДОЛЖНЫ следовать [PSR-0][]. | ||
|
||
- Имена классов ДОЛЖНЫ быть объявлены используя `StudlyCaps`. | ||
|
||
- Константы класса ДОЛЖНЫ быть объявлены в верхнем регистре с подчеркиванием | ||
в качестве разделителей. | ||
|
||
- Имена методов ДОЛЖНЫ быть объявлены используя `camelCase`. | ||
|
||
|
||
2. Файлы | ||
-------- | ||
|
||
### 2.1. PHP Теги | ||
|
||
PHP код ДОЛЖЕН использовать длинные `<?php ?>` теги или короткие-выводящие | ||
`<?= ?>` теги; другие варианты тегов НЕ ДОЛЖНЫ использоваться. | ||
|
||
### 2.2. Кодировка символов | ||
|
||
PHP код ДОЛЖЕН использовать только UTF-8 без BOM. | ||
|
||
### 2.3. Побочные эффекты | ||
|
||
Файлу СЛЕДУЕТ объявлять знаки (классы, функции, константы, и т.д.), | ||
и не оказывать побочный эффект, или ему СЛЕДУЕТ выполнять логику с побочным | ||
эффектом, но НЕ СЛЕДУЕТ делать и то и другое. | ||
|
||
Фраза "побочны эффекты" означает выполнение логики непосредственно не связанной с | ||
объявлением классов, функций, констант и т.д., *просто от включения | ||
файла*. | ||
|
||
"Побочные эффекты" включают, но не ограничены: генерацией вывода, явным | ||
использованием `require` или `include`, подключением к внешним сервисам, | ||
изменениям настроек ini, испусканием ошибок или исключений, изменением глобальных | ||
или статичных переменных, чтением или записью в файл, и так далее. | ||
|
||
Ниже приведен пример файла с одновременно объявляющий знаки и оказывающий | ||
побочные эффекты; т.е., пример того, что следует избегать: | ||
|
||
```php | ||
<?php | ||
// побочный эффект: изменение ini настроек | ||
ini_set('error_reporting', E_ALL); | ||
|
||
// побочный эффект: загрузка файла | ||
include "file.php"; | ||
|
||
// побочный эффект: вывод результата | ||
echo "<html>\n"; | ||
|
||
// описание | ||
function foo() | ||
{ | ||
// тело функции | ||
} | ||
``` | ||
|
||
В следующем примере файл который содержит объявление без оказания побочных | ||
эффектов; т.е., пример того, к чему следует стремится: | ||
|
||
```php | ||
<?php | ||
// объявление | ||
function foo() | ||
{ | ||
// тело функции | ||
} | ||
|
||
// условное объявление это *не* побочный эффект | ||
if (! function_exists('bar')) { | ||
function bar() | ||
{ | ||
// тело функции | ||
} | ||
} | ||
``` | ||
|
||
|
||
3. Пространства имен и Имена Классов | ||
------------------------------------ | ||
|
||
Пространства имен и классы ДОЛЖНЫ следовать [PSR-0][]. | ||
|
||
Это означает, что каждый класс находится в собственном файле, и в пространстве | ||
имен, по крайней мере, на один уровень: верхний уровень имя поставщика. | ||
|
||
Имена классов ДОЛЖНЫ быть объявлены используя `StudlyCaps`. | ||
|
||
Код написанный на PHP 5.3 и старше ДОЛЖЕН использовать формальные пространства | ||
имен. | ||
|
||
Например: | ||
|
||
```php | ||
<?php | ||
// PHP 5.3 и старше: | ||
namespace Vendor\Model; | ||
|
||
class Foo | ||
{ | ||
} | ||
``` | ||
|
||
В коде написанном для 5.2.x и раньше СЛЕДУЕТ использовать псевдо-пространства | ||
имен, условные приставки `Vendor_` к именам классов. | ||
|
||
```php | ||
<?php | ||
// PHP 5.2.x и раньше: | ||
class Vendor_Model_Foo | ||
{ | ||
} | ||
``` | ||
|
||
4. Константы, Свойства, и Методы Класса | ||
--------------------------------------- | ||
|
||
Термин "класс" относится ко всем классам, интерфейсам и трейтам. | ||
|
||
### 4.1. Константы | ||
|
||
Константы класса ДОЛЖНЫ быть объявлены в верхнем регистре с подчеркиванием в | ||
качестве разделителей. | ||
Например: | ||
|
||
```php | ||
<?php | ||
namespace Vendor\Model; | ||
|
||
class Foo | ||
{ | ||
const VERSION = '1.0'; | ||
const DATE_APPROVED = '2012-06-01'; | ||
} | ||
``` | ||
|
||
### 4.2. Свойства | ||
|
||
Это руководство намеренно избегает любых рекомендаций, касающихся использования | ||
`$StudlyCaps`, `$camelCase`, или `$under_score` для имен свойств. | ||
|
||
Независимо от соглашения именования его СЛЕДУЕТ применять последовательно в | ||
разумных пределах. Этот предел может быть на уровне поставщика, на уровне | ||
пакета, на уровне класса, или уровне метода. | ||
|
||
### 4.3. Методы | ||
|
||
Имена методов ДОЛЖНЫ быть объявлены используя `camelCase`. |
Oops, something went wrong.