PHP 5.6 — последняя версия ветки 5.x. Главная её задача — подготовить код к переходу на PHP 7: убрали устаревшее, добавили современные конструкции, но оставили обратную совместимость.
До 5.6 приходилось использовать func_get_args() — нечитаемо и не типизируемо.
Было:
function sum() {
$args = func_get_args();
return array_sum($args);
}
Стало (PHP 5.6+):
function sum(...$numbers) { // ✅ Читаемо
return array_sum($numbers);
}
sum(1, 2, 3); // 6
→ Это основа для ...$args в строго типизированных функциях PHP 8+.
Раньше вызов глобальных функций/констант в неймспейсе выглядел как «магия»:
namespace App;
echo strlen("test"); // откуда strlen? из глобала? из текущего неймспейса?
PHP 5.6+ позволяет импортировать явно:
namespace App;
use function strlen;
use const PHP_EOL;
echo strlen("test"); // ✅ Теперь видно: это глобальная функция
echo PHP_EOL;
→ Повышает читаемость и облегчает рефакторинг.
Раньше в const можно было писать только литералы:
// PHP < 5.6: ❌ Parse error
const MB = 1024 * 1024;
PHP 5.6+ разрешает скалярные выражения:
const MB = 1024 * 1024; // ✅ 1048576
const DSN = 'pgsql:host=' . DB_HOST;
→ Вычисляется один раз при загрузке класса — нет накладных расходов в рантайме.
| Что устарело в PHP 5.6 | Почему | На что заменить |
|---|---|---|
mysql_* функции( mysql_connect, mysql_query и др.) |
Нет поддержки prepared statements → уязвимость к SQL-инъекциям | mysqli или PDO |
$php_errormsg |
Глобальная переменная → конфликты в многопоточных SAPI (например, FPM) | error_get_last() |
ereg_* функции( ereg, eregi) |
Устарели ещё в PHP 5.3; медленнее PCRE | preg_match(), preg_replace() |
# Установи PHP Compatibility (через Composer)
composer require --dev phpcompatibility/php-compatibility
# Проверь проект на совместимость с PHP 7.0 (куда мигрируешь от 5.6)
phpcs --standard=PHPCompatibility --runtime-set testVersion 7.0 your-project/