9 советов по использованию PHP

1. Использование PHP с версии 8.0

В качестве PHP рекомендуется выбирать версию не ниже PHP 8.0.

Многие библиотеки, фреймворки и CMS для работы требуют как минимум версию PHP 8.0.

2. Сокращённый вызов PHP-кода

PHP-код выполняется между тегами <?php ?>. Также возможно указывать сокращённый вид тегов <? ?>, но их не рекомендуется использовать (по умолчанию такое использование тегов запрещено).

Даже если запрещено использовать теги <? ?>, сокращённый код вывода переменной <?=$var?> работает в любом случае.

3. Закрывающий тег ?> в конце файла

В конце файла рекомендуется не использовать закрывающий тег ?>, т.к. это помогает избежать добавления случайных символов пробела или перевода строки, которые могут послужить причиной нежелательных эффектов.

Например, после подключения файла через include() надо использовать header(), чтобы сделать перенаправление, и в этом случае PHP может вывести ошибку, т.к. в подключаемом файле страница уже начала вывод контента из-за закрывающего тега ?> (который добавил перевод строки), а до использования header() не должно быть вывода содержимого страницы.

Об этом также написано в официальной документации: «Закрывающий тег PHP-блока в конце файла не является обязательным, и в некоторых случаях его опускание довольно полезно, например, при использовании include ... нежелательные пробелы не останутся в конце файла и вы все еще сможете добавить http-заголовки».

4. Использование регулярных выражений для поиска текста

Если надо найти строку в тексте, не используя шаблоны регулярных выражений, то рекомендуется использовать strpos() для производительности кода. Об этом также написано в официальной документации.

$text = 'PHP-script';

# не правильно
if (preg_match('/PHP/', $text)) {
    echo 'строка найдена';
}

# правильно
if (strpos($text, 'PHP') !== false) {
    echo 'строка найдена';
}

5. Вывод ошибок на сайте

Вместо вывода ошибок на сайте рекомендуется записывать ошибки в файл. Также данный способ помогает отслеживать ошибки в сложно допустимых местах, например перед редиректом или в Ajax-запросах.

Подробнее о выводе ошибок

6. Длина массива в цикле for

В цикле for длину массива рекомендуется устанавливать заранее, иначе при каждой итерации цикла будет подсчитываться количество элементов в массиве.

$arr = ['PHP', 'Zend', 'MySQL'];

// неправильно
for ($i = 0; $i < sizeof($arr); $i++) {
    // код
}

// правильно
for ($i = 0, $l = sizeof($arr); $i < $l; $i++) {
    // код
}

7. Использование httponly при создании cookies

Параметр httponly запрещает доступ к cookies из JavaScript, в целях предотвращения XSS-атак.

# в .htaccess (рекомендуется)
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>

# при создании cookies
setcookie("name", "Сохранённая информация", time() + 3600, '/page.html', '', false, true);

Подробнее о создании cookies

8. Кэширование данных через Memcached

Для кэширования данных можно использовать Memcached, если сервер это позволяет, т.к. Memcached сохраняет данные в память сервера, что увеличивает скорость сохранения и получения закэшированных данных.

9. Возвращаемый тип данных для методов

Если метод ничего не должен возвращать, то используется ключевое слово void. А если предполагается, что выполнение PHP-кода остановится, то используется ключевое слово never (с версии PHP 8.1).

class Lang {

  public $version = 8.4;

  // Метод ничего не возращает
  public function setVersion($version):void
  {
    $this->version = $version;
  }

  // Ожидается, что после выполнения метода завершится PHP-код
  public function outputError():never
  {
    throw new Exception('Ошибка');

    // или
    echo json_encode(['error' => 1, 'message' => 'Ошибка']);
    exit(); 
  }
}