У меня есть некоторый код, который работал долгое время, но теперь вызывает недоумение.Я должен предположить, что это было вызвано моим переходом на php 7.3, но я не могу найти никаких ссылок, объясняющих, что происходит.
У меня есть метод в классе, который выглядит примерно так:
class Foo {
function bar($param = OtherClass::MY_CONSTANT) {
logger(__METHOD__);
logger(OtherClass::MY_CONSTANT);
logger($param);
logger('ready to do stuff');
// does stuff
}
}
Где OtherClass :: MY_CONSTANT = 1.
Когда я вызываю этот метод из другого класса:
$foo = new Foo();
$foo->bar();
, вывод выглядит примерно так:
DEBUG - Foo::bar
DEBUG - 1
и затем выполнение php резко останавливается, даже не вызывая мою зарегистрированную функцию завершения работы.Я могу использовать константу класса непосредственно в теле метода, но я не могу использовать параметр, установленный в значение константы класса по умолчанию.
Если я изменю метод на
function bar($param = 1) {
все работает отлично.
Кроме того, если я передаю константу при вызове метода, он работает:
$foo = new Foo();
$foo->bar(OtherClass::MY_CONSTANT);
Я получаю счастливое
DEBUG - Foo::bar
DEBUG - 1
DEBUG - 1
DEBUG - ready to do stuff
и выполнение продолжается нормально.
Что-то в использовании константы класса по умолчанию делает переменную ядовитой, хотя я могу без проблем использовать константу класса в методе.
Iпопытался создать простой пример из одного файла, чтобы воссоздать эту проблему, но он работал просто отлично.Aargh.
Что-то изменилось в php 7.3, что могло бы вызвать такое поведение?Я только что обновился до 7.3.1, но проблема осталась.Есть ли лучшая практика, которую я должен использовать?
РЕДАКТИРОВАТЬ, ЧТОБЫ ДОБАВИТЬ:
После нескольких часов, пытаясь создать простой случай, чтобы воспроизвести это, я должен идти дальше.Соответствующие факторы включают в себя:
- работает в php-fpm
- код работает после закрытия подключения к браузеру.
- даже константы в том же классе (
self::MY_CONSTANT
) создать ядовитые переменные
Моим решением было откатиться до php 7.2.14, который работает правильно.Я могу предположить это только в ошибке в php 7.3.