Хотел в коде написать проверку:
assert('is_subclass_of($classname, BasicClass::class)', 'Класс быть наследником BasicClass');
Всё бы ничего, но оказалось что assert это как eval, и про текущий нэймспэйс и загруженные классы он ничего не знает. Пришлось написать так:
assert('is_subclass_of($classname, "Name\Space\BasicClass")', 'Класс быть наследником BasicClass');
Приемлемо в общем, но в приступе негодования успел написать репорт на bugs.php.net, где быстро получил "Not a bug" с комментарием про который собственно и возникает вопрос:
If you want to stay in the same context, don't use strings and pass your expression directly. In PHP 7 this will incur no cost if asserts are disabled.
И вот я смотрю на списки изменений в PHP 7 и нигде не вижу, чтобы в ассертах что-либо изменилось.
3v4l.org намекает, что стало лучше, но разброс времени настолько незначителен, по сравнению с разбросом в минорных релизах, что тоже сомнительно. Сам is_subclass_of, наверное, сильно изменился в связи с изменениями во внутренностях, но как функцией был, так и остался, и время на его вызов
тратится. Так где же правда?
P.S. Уточняю вопрос: правда ли вызов
assert(is_subclass_of(...))
будет бесплатен? И какие изменения в движке к этому привели?