Когда вы унаследовали классы, где дочерний класс устанавливает некоторые константы, а у родительского класса есть статический метод, который должен их использовать:
class some_helperclass {
public static function add_them() {
return self::some_c + self::another_c;
}
}
class mainclass extends some_helperclass {
const some_c = 1;
const another_c = 2;
}
Я получаю сообщение об ошибке при попытке выполнить это:
mainclass::add_them()
Есть ли способ заставить это работать?
Это хороший пример того, как поздняя статическая привязка работает.
Я не буду переписывать документацию для него, но TL; DR это то, что self
ссылается на буквальный класс, который выполняет код. В вашем примере это mainclass
который определяет константы, но some_helperclass
который читает их, так что не работает с помощью self
,
Если вы измените использовать static::CONST_NAME
Это буду работать.
Кроме того, рекомендуется указывать константы только в верхнем регистре.
Пример кода:
<?php
class some_helperclass {
public static function add_them() {
return static::some_c + static::another_c;
}
}
class mainclass extends some_helperclass {
const some_c = 1;
const another_c = 2;
}
var_dump(mainclass::add_them());
Выход: int(3)
Других решений пока нет …