В PHP сообществе существует два стандарта оформления PSR-1 и PSR-2
Переводы на русский PSR-1 и PSR-2
js
data-
(HTML5) <ul id="js-basket-list">
<li class="js-basket-item" data-basket-id="17">
...
</li>
<ul>
1 Операции фильтрации данных (иногда обработки) лучше делать на стороне БД
$sql = <<<'SQL'
SELECT DISTINCT `status`
FROM ...
SQL;
$list = fetchAll($sql);
Вместо
$sql = <<<'SQL'
SELECT `status`
FROM ...
SQL;
$list = array_unique(fetchAll($sql));
2 Использование встроенных функций
if (strcasecmp($requestAlias, $storedAlias) === 0) {
...
}
вместо
if (strtolower($requestAlias) === strtolower($storedAlias)) {
...
}
3 Тонкий контроллер, толстая модель
Код нужно писать в сервисах или моделях, а контроллер уже использует их
1 Запросы к БД в цикле
$result = [];
foreach ($baskets as $basket) {
$result[$basket->getId()] = fetchProduct($basket->getProductCode());
}
Лучше:
$productCodes = [];
foreach ($baskets as $basket) {
$productCodes[] = $basket->getProductCode();
}
$result = fetchProducts($productCodes);
2 Лишние конструкции else
| elseif
| else if
public function iHaveCookie($nameCookie)
{
if ($this->getSession()->getCookie($nameCookie)){
return true;
} else {
throw new \Exception("Cookie with name $nameCookie not found");
}
}
Лучше:
public function iHaveCookie($nameCookie)
{
if ($this->getSession()->getCookie($nameCookie)){
return true;
}
throw new \Exception("Cookie with name $nameCookie not found");
}
В больших функциях - это ранее возвращение результата early return
3 Перемешаны методы и свойства с разными областями видимости
private function resolve()
{
...
}
public function find()
{
...
}
private function findByCode()
{
...
}
private $id;
4 Двойные проверки
if (isset($variable) && $variable) {
...
}
правильнее заменить
if (!empty($variable)) {
...
}
5 Проверки с двойным отрицанием
$variable = getSomeThing();
if (!empty($variable)) {
...
}
правильнее заменить
$variable = getSomeThing();
if ($variable) {
...
}
Приведение значений к "bool" прямое, через конструкции или функции
Все свойства и константы нужно объявлять сверху Дальше public методы Дальше protected и private
Основной функционал нужно покрывать тестами и учитывать это время при обсуждении задачи и оценке
Пример для интернет магазинов - это добавления в корзину и оформления заказа
В коммитах нужно размещать ссылку на задачу: Примеры:
Add PSR-1 & PSR-2 #1
move to new framework (HD-15)