PHP: Как избежать define () при проверке, существует ли константа? - PullRequest
0 голосов
/ 08 июля 2019

Многие опытные разработчики знают, что функция defined() примерно в 19 раз медленнее, чем любые другие проверки.

Я попал в проблему, когда мне нужно иметь цикл с более чем 5000 записей и 7 defined() проверок в последовательности и это замедление завершить проект.

В этом случае изменение способа работы проекта или разбиения на части невозможно. Есть какое-то хорошее решение или идея, как избежать функции defined()?

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Я тестирую что-то вроде:

if(!defined('TEST')) continue;

и

if(!@TEST) continue;

и

if(NULL === @constant('TEST')) continue;

По моим меркам в PHP 7.1, if(!@TEST) continue; быстрее, чем if(NULL === @constant('TEST')) continue;, но оба медленнее, чем if(!defined('TEST')) continue;

Это говорит о том, что у нас пока нет более быстрого решения, а define()еще более быстрый способ проверки констант.

0 голосов
/ 08 июля 2019

Вы пытались использовать

constant ( string $name ) : mixed

Возвращает значение константы или NULL, если константа не определена.

Учитывая, что в php null == false

if (defined($name))

и

if (constant($name))

практически идентичны
https://www.php.net/manual/en/function.constant.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...