Комментарии 18
А если проект использует
для примера, то мы отключим по логике xdebug.
Ну и таких способов — миллион. Например, можно еще использовать eval.
$v = 'xdebug_var_dump';
$v('test');
для примера, то мы отключим по логике xdebug.
Ну и таких способов — миллион. Например, можно еще использовать eval.
Согласен, сканер не гарантирует 100% точности.
И наоборот — к примеру, имена функций могут храниться в базе и в коде вызываться динамически.
Поэтому надо перед отключением хотя бы проанализировать список самому.
И наоборот — к примеру, имена функций могут храниться в базе и в коде вызываться динамически.
Поэтому надо перед отключением хотя бы проанализировать список самому.
Имхо, такому проекту уже ничего не поможет.
call_user_function тоже криминал?
нет, это не криминал. Но, это разные вещи.
Если я увижу в коде call_user_function — я буду знать, что сейчас будет вызвана функия (или метод класса). Причем сразу видно имя функции / метода.
Если я увижу в коде $v('test') — то сейчас должно произойти? $v — это функция или объект?
Кстати, IDE в данном случае корректо отработает, если это будет объект и запутается, если это будет функция.
Если я увижу в коде call_user_function — я буду знать, что сейчас будет вызвана функия (или метод класса). Причем сразу видно имя функции / метода.
Если я увижу в коде $v('test') — то сейчас должно произойти? $v — это функция или объект?
Кстати, IDE в данном случае корректо отработает, если это будет объект и запутается, если это будет функция.
$v('test') — это функция, всегда, объектом может быть только new $v('test'), чтобы у объекта работал $v('test') у него должен быть метод __invoke, который, о чудо, заставляет объект эмулировать функцию. call_user_function нужен если есть нужда вызывать методы объектов в виде array($object, 'method'), но и накладные расходы при вызове у него больше, так как это функция, а variable functions — языковая конструкция.
А как же кложур? $v = function($c){ echo $c; }; $v('test'); Вот вам и без new $v :)
$v('test') — это функция, всегда, объектом может быть только new $v('test'), чтобы у объекта работал $v('test') у него должен быть метод __invoke
Ну да, вы повторяете очевидные вещи, которые описаны по ссылке, которую я привел в комментарии выше. И наличие у объекта метода __invoke не должно удивлять, например, в zend framework 2 он используется.
Только, повторюсь. $v('test') не всегда функция, вот пример из документации:
Соответственно, как я и писал, если в коде встретить
то непонятно, это функция или объект.
Ну да, вы повторяете очевидные вещи, которые описаны по ссылке, которую я привел в комментарии выше. И наличие у объекта метода __invoke не должно удивлять, например, в zend framework 2 он используется.
Только, повторюсь. $v('test') не всегда функция, вот пример из документации:
class CallableClass
{
public function __invoke($x)
{
var_dump($x);
}
}
$v = new CallableClass;
$v(5);
Соответственно, как я и писал, если в коде встретить
$v('test');
то непонятно, это функция или объект.
Замеры не делали?
Нет
Без цифр — в статье нет смысла. Если прирост на уровне 1-2% смысла дёргаться нет. Если хотя бы 10% — можно подумать
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Ищем неиспользуемые расширения PHP