«
»

Тестирование кода на старых PHP без необходимости понижения

Цель этой статьи – открыть вам глаза – не нужно мучить себя установкой старых версий PHP. Вместо этого используйте 3v4l.org, чтобы протестировать меньшие фрагменты кода на каждой имеющейся версии PHP . Я приведу несколько реальных примеров, которые спасли меня от выпуска программного обеспечения, которое работает только на последней версии PHP. Хотя я согласен с тем, что разработчики должны смотреть вперед и использовать новые парадигмы и синтаксис , люди все еще пытаются использовать новый код в старой среде. Фатальные ошибки являются обычным явлением, но их легко избежать с небольшой осторожностью. В этой статье рассказывается о простой половине нашей версии PHP, а в другой рассказывается, как определить минимальную версию PHP для всего вашего проекта.

Почему так сложно и плохо установить старый PHP?

Если вы используете Linux или управляете своим сервером (выделенным, VPS и т.д. ), Вы можете заметить, что старые, неподдерживаемые версии PHP исчезают из менеджеров пакетов, репозиториев и Phpbrew . Как видите, по мере выпуска новых версий старые становятся недоступными:

Phpbrew - не лучший инструмент для тестирования кода на старом PHP

ppa:ondrej/php Репо приветствует вас с этим сообщением:

Совместно устанавливаемые версии PHP: PHP 5.6, PHP 7.x и большинство запрашиваемых расширений включены. Предоставляются только поддерживаемые версии PHP для поддерживаемых выпусков Ubuntu.

И вообще, поддержание разных версий PHP вместе с необходимыми расширениями может быть проблемой. Это, безусловно, возможно, поскольку мы сохраняем как последнюю версию PHP 5, так и новейшую версию PHP 7 и можем легко переключаться между ними. Однако это не является предметом данной статьи.

3v4l.org для тестирования вашего кода на старом PHP

Сайт 3v4al.org (leetspeak для eval) является бесценным для нас, веб разработчиков которые разрабатывают приложения на PHP. Просто вставьте несколько строк кода, в которых вы не уверены. Всякий раз, когда появится новый синтаксис или функция из будущего, eval() скажет вам точно, как ваш код будет вести себя в старых установках PHP. Он проверяет фрагмент каждого выпуска PHP и представляет группы версий, в которых вывод или ошибки различны. Да, он показывает ошибки, которые генерирует ваш код , и которые могут отличаться в разных версиях.

Пример № 1: Синтаксис короткого массива

Это милая маленькая ошибка. Разработчик может отвлечься и создать экземпляр массива, например, как они это делают в JS:

var a = [];

Но если вы думаете, что можете обойтись без этого в PHP:

$a = [];

Вы будете не правы. Вероятно, он будет работать везде, где вы тестируете, потому что нам, разработчикам, нравится не отставать от версий PHP и использовать достойный сервер. Но клиент наших плагинов WP не может.

Как вы можете видеть на DisplayWP, минимальная требуемая PHP-версия WordPress 5 по-прежнему составляет 5.2.4, что существует уже более десяти лет. Да, плагины могут устанавливать различные минимальные требования, но все же это вызывает беспокойство!

Пример № 1 является, казалось бы, доброкачественной ошибкой. Во-первых, вы можете даже не знать, как называется этот синтаксис или как его искать в документации. Вот некоторая официальная информация:

Начиная с PHP 5.4 вы также можете использовать синтаксис короткого массива, который заменяет array () на [] .

В случае сомнений, это часто быстрее и проще, чтобы поставить его через 3v4l.org,  и чтобы проверить код на многих старых версиях PHP и получить уверенность. Это сразу говорит вам, что все в порядке, начиная с PHP 5.4, но любой код, подобный приведенному выше, потерпит неудачуParse error: syntax error, unexpected '[' ...

Пример # 2: Объявление типа или подсказка типа аргументов функции

Объявление типов может сделать ваш PHP немного строже. Эта особенность PHP продолжает улучшаться с новыми возможными опциями. Это то, что имеет неизменный синтаксис и работает с PHP 5. Однако, что вы можете намекнуть, зависит от версии. Следовательно, может случиться так, что вы случайно объявите что-то, что только что появилось в PHP 7.  К сожалению, это невозможно, если у вас есть пользователи со старым PHP.

function expect_an_exception(Exception $e){} function expect_a_string(string $string){} expect_an_exception(new Exception('Division by zero.')); expect_a_string("hello");

Как только вы протестируете этот фрагмент кода на старом PHP с 3v4l.org, вы увидите, что начиная с PHP 5 вы можете использовать имена классов для подсказок. Разве не странно, что он появился первым, а не типы родного языка, такие как bool, string, int?

Пример № 2 также показывает, что объявление вашего ожидания для строки на самом деле является функцией PHP 7, и она просто не работает в старых PHP. Вы получаете ошибку, похожую на пасхальное яйцо, которую ваши клиенты не найдут такой забавной:

Catchable fatal error: Argument 1 passed to expect_a_string() must be an instance of string, string given in...

Что еще более запутанно, так это то, что вы можете использовать подсказку массива начиная с PHP 5.1. Это хаос, если вы спросите меня. Я признаю, что мне было трудно помнить об этом. Полезный 3v4l.org помог мне много раз.

PHPStorm как альтернатива?

Я хотел представить бесплатный инструмент / сервис для тестирования ваших фрагментов кода в прошлых версиях PHP. Конечно, я знаю, что существуют другие решения. У многих из нас нет модных платных IDE, таких как PHPStorm.  Эти IDE, вероятно, могут сказать вам, что есть проблема с вашим кодом в выбранной версии PHP. Но что, если вы пишете вручную в Sublime Text или в похожем, более простом редакторе?

Как вы думаете, 3v4l.org вам тоже поможет? Поделитесь этим в комментариях!

Источник записи: https://letswp.io

Оставьте комментарий