
I. Предисловие к стандартам
Стандартизация — это не особый личный стиль. Она позволяет программистам понимать любой код и улавливать состояние программы; помогает новичкам быстро адаптироваться к среде; не даёт людям, только начинающим работать с PHP, повторять одни и те же ошибки; а в единообразной среде разработки снижает вероятность ошибок. Этот стандарт в большинстве приложений в значительной степени следует технологической системе Java, поскольку благодаря множеству успешных примеров технологическая система Java стала отраслевым стандартом для большинства уровней компьютерных приложений. Кроме того, он облегчает компании будущий переход на технологическую систему Java.
II. Раздел определений именования
Именование локальных переменных
Используйте английские существительные и глаголы. Используйте заглавные буквы в качестве разделителей слов, а все остальные буквы должны быть строчными. Первая буква каждого слова должна быть строчной, и не следует использовать символы подчёркивания. Пример:
$repeatCount = ''; $delUserSql = '';
Именование глобальных констант
Используйте английские существительные и глаголы. Все буквы должны быть заглавными, а слова разделяться символами подчёркивания. Пример:
define( 'WEBSITE_NAME', '名称' ); define( 'WEBSITE_URL', '地址' )
Именование переменных-массивов
Используйте английские существительные и глаголы. Используйте заглавные буквы в качестве разделителей слов, а все остальные буквы должны быть строчными. Первая буква каждого слова должна быть строчной, и не следует использовать символы подчёркивания. Используйте строку "Array" в качестве суффикса. Пример:
$scopeArray = array(); $bookIdArray = array();
Именование статических переменных
Используйте английские существительные и глаголы. Используйте заглавные буквы в качестве разделителей слов, все остальные буквы должны быть строчными. Первая буква каждого слова должна быть строчной, а подчёркивания не должны использоваться. Используйте строку "Static" в качестве суффикса. Пример:
function getDirectoryFile()
{
static $fileArrayStatic = '';
static $fileNumStatic = '';
...
}
Именование объектных переменных
Используйте имя класса в качестве префикса переменной. Все буквы должны быть заглавными, а строку "_OBJECT" используйте в качестве суффикса. Пример:
$USERACCOUNT_OBJECT = new UserAccount(); $PAINTINGORDER_OBJECT = new PaintingOrder();
Именование классов
Используйте английские существительные. Используйте заглавные буквы в качестве разделителей слов, все остальные буквы должны быть строчными. Первая буква существительного должна быть заглавной, а подчёркивания не должны использоваться. Пример:
class UserAccount
{
...
}
class PaintingOrder
{
...
}
Именование методов
Используйте английские существительные и глаголы. Используйте заглавные буквы в качестве разделителей слов, а все остальные буквы должны быть строчными. Первая буква каждого слова должна быть строчной, и не следует использовать символы подчёркивания. Пример:
class UserAccount
{
function isAccountOk()
{
...
}
function addAccount()
{
...
}
}
Именование параметров в методах
Используйте английские существительные и глаголы. Используйте заглавные буквы в качестве разделителей слов, а все остальные буквы должны быть строчными. Первая буква каждого слова должна быть строчной, и не следует использовать символы подчёркивания. Пример:
class UserAccount
{
function isAccountOk( $accountName )
{
$this->accountName = $accountName;
...
}
function addAccount( $inputDataArray )
{
$this->inputArray = $inputDataArray;
...
}
var $accuntName = '';
var $inputArray = '';
}
Именование свойств класса
Используйте английские существительные и глаголы. Используйте заглавные буквы в качестве разделителей слов, все остальные буквы должны быть строчными. Первая буква слова.
Используйте заглавные буквы и не используйте подчёркивания. Для свойств класса, которые являются объектными переменными, используйте строку "Object" в качестве суффикса. Пример:
class UserAccount
{
function IsAccountOk()
{
...
}
function AddAccount()
{
...
}
var $tableName = '';
var $databaseObject = '';
}
III. Раздел написания синтаксиса
Правила использования фигурных скобок {}
Размещайте фигурные скобки в том же столбце под ключевым словом. Пример:
if ( $condition )
{
...
}
Не используйте этот стиль:
if ( $condition )
{
...
}
Правила отступов в коде
Используйте отступы табуляцией (клавиша TAB) или четырьмя пробелами. Если уровень отступа больше четырёх, перепроектируйте алгоритм для этой бизнес-логики.
Правила использования круглых скобок ()
Не ставьте круглые скобки вплотную к ключевым словам, именам методов или параметрам методов. Отделяйте их пробелом. Пример:
if ( $condition )
{
...
}
function addAccount( $inputDataArray )
{
...
}
Поскольку круглые скобки, вплотную прилегающие к ключевым словам и т. п., легко воспринимаются как единое целое, не используйте следующий стиль. Пример:
if ($condition)
{
...
}
function addAccount($inputDataArray)
{
...
}
Правила if .. else ...
Обычно лучше иметь блок else для обработки необработанных или неизвестных прочих случаев. Даже если условный оператор содержит только один оператор, необходимо использовать фигурные скобки {}. Пример:
if ( $condition1 )
{
...
}
else if ( $condition2 )
{
...
}
else
{
...
}
По возможности избегайте следующего использования. Пример:
if ( $condition1 ) ... else ...
Правила switch
Каждый блок case должен заканчиваться break, и всегда должен присутствовать default для обработки неизвестных случаев. Пример:
switch( $condition )
{
case $value1:
...
break;
case $value2:
...
break;
default:
...
break;
}
Правила размещения объявлений
Блоки кода объявления должны быть выровнены, а переменные должны быть инициализированы при первом использовании. Пример:
var $tableName = ''; var $databaseObject = '';
Не используйте следующий стиль. Пример:
var $tableName; var $accuntName = ''; var $databaseObject = '';
IV. Раздел прочих примечаний
Все методы класса должны иметь возвращаемые значения. За исключением методов, которые просто возвращают true или false из-за простых результатов, остальные методы должны возвращать разные значения.
Для передачи на следующий шаг рабочего процесса для дальнейшей обработки.
В HTML-формах единообразно не задавайте атрибут name (name) у кнопки отправки.
Имена элементов в HTML-формах должны соответствовать полям базы данных.
Один оператор на строку.
Не используйте метод по умолчанию для проверки ненулевых значений; необходимо проверять явно. Пример:
if ( false != $this->IsAccountOk() )
{
...
}
else
{
...
}
Не используйте следующий стиль. Пример:
if ( $this->IsAccountOk() )
{
...
}
else
{
...
}
Не используйте тернарный логический оператор ? :, за исключением присваивания переменной. Пример:
$_GET['act'] = !empty( $_GET['act'] ) ? $_GET['act'] : 'v_login';
Единообразно используйте <?php ?>, а использование формата <? ?> запрещено.
Для переменных типа get, post и session их необходимо определять и вызывать с использованием $_GET, $_POST и $_SESSION.
По возможности используйте одинарные кавычки '' вместо двойных кавычек "".
После использования переменные-массивы, переменные-объекты и наборы результатов запросов должны немедленно освобождать ресурсы с помощью unset() или free_result().
PHP-файл может содержать только одно определение класса, причём имя класса должно совпадать с именем файла.
PHP-файлы никогда не должны содержать HTML-инструкции, а HTML-файлы должны по возможности избегать PHP-инструкций.
HTML-файлы должны проходить сертификацию валидации W3C HTML4 (http://validator.w3.org/).
Если вы обнаружите, что лишь немногие из ваших имён в программе могут соответствовать соответствующим им вещам, пожалуйста, перепроектируйте систему.
Прежде чем давать классу имя, сначала узнайте, чем он является. Если вы всё ещё не можете вспомнить, что это за класс, по подсказкам, предоставленным именем класса, то ваш дизайн недостаточно хорош.
Смешанные имена, состоящие более чем из трёх слов, могут легко вызвать путаницу между сущностями в системе. Пожалуйста, перепроектируйте класс.
Обычно каждый метод выполняет только одно логическое действие или транзакцию, поэтому их имена должны ясно объяснять, что они делают: используйте checkForErrors() вместо errorCheck(), используйте dumpDataToFile() вместо dataFile().
Это делает функции и данные более различимыми объектами.
V. Раздел комментариев программы
Комментарии класса
/*
* Purpose:
* 作为通用接口访问数据库的类
* Class Name:
* Database
* Author:
* unixdotnetphpboke@163.com
* Modifications:
* 2004-08-18 09:15
* 添加db_insert_id()方法
* unixdotnetphpboke@163.com
* See: 参照说明
*/
class Database
{
……
}
Комментарии к методам класса
/*
* Purpose:
* 取得上一步数据库insert操作产生的id
* Method Name:
* getInsertId()
* Parameter:
* Return:
* int
* Author:
* unixdotnet phpboke@163.com
* Modifications:
* 2004-08-18 09:15
* 修改原因
* unixdotnet phpboke@163.com
* See: 参照说明
*/
function getInsertId()
{
...
}
Комментарии к свойствам класса
class Database
{
/*
* Purpose:
* 连接数据库所需的用户名
* Attribute Name:
* $databaseUserName
* Type: string
* Author:
* unixdotnet phpboke@163.com
* Modifications:
* 2004-08-18 09:15
* 修改原因
* unixdotnet phpboke@163.com
* See: 参照说明
*/
var $databaseUserName;
...
}
VI. Раздел применения баз данных
Проектирование базы данных должно соответствовать трём нормальным формам (кроме случаев, когда предъявляются чрезвычайно высокие требования к скорости, тогда можно рассмотреть отдельные таблицы записей).
Имена баз данных должны состоять из английских существительных в нижнем регистре, обобщающих содержание проекта.
Имена таблиц данных должны состоять из английских существительных в нижнем регистре, обозначающих имена объектов (по возможности соответствующих именам бизнес-классов в системе).
Используйте подчёркивания для разделения слов, избегая возможных ошибок регистра при переносе между платформами.
Поля таблиц данных должны избегать типов переменной длины, таких как varchar и text. Поля с информацией о времени должны храниться с использованием типа unix timestamp.
При запросе данных запрещено использовать подстановочный знак * во избежание расходования ресурсов и для ускорения обработки. Постарайтесь избегать использования временных таблиц.
При запросе данных с объединением нескольких таблиц все ресурсы должны использовать полные имена, т.е. tableName.fieldName, а не fieldName.
SQL-запросы должны по возможности соответствовать стандарту ANSI92 и избегать использования расширенных возможностей SQL, специфичных для конкретной базы данных.
После завершения разработки необходимо добавить индексы к части условия (where) SQL-запросов. Для запросов с несколькими условиями следует использовать составной индекс.
Состав индекса должен соответствовать порядку условий в операторах слева направо.
Строго запрещено слепо добавлять индексы, чтобы не замедлять вставку данных, не увеличивать занимаемое пространство и не замедлять выполнение запросов.
Всякий раз, когда в базе данных (таблице) происходит структурное изменение, оно должно быть зарегистрировано и сохранено; структура базы данных и её данные должны регулярно резервироваться (не реже чем раз в три рабочих дня).
1. При присваивании строки переменной PHP старайтесь использовать одинарные кавычки. Одинарные кавычки работают намного быстрее.
2. При присваивании значения переменной PHP, если значение содержит переменные, нужно использовать двойные кавычки. Двойные кавычки могут автоматически разбирать переменные, что гораздо удобнее.
Пример: $b=blue; $a="php$b"; echo $a; выводит phpblue (у одинарных и двойных кавычек есть свои преимущества)
3. Старайтесь использовать двойные кавычки в HTML. Каким бы длинным он ни был, просто добавьте одинарные кавычки в начале и в конце при вставке в PHP, не бойтесь ошибок.
Оригинал: http://www.phpboke.com/php-standard.html