Использование констант в унаследованных классах php

Когда вы унаследовали классы, где дочерний класс устанавливает некоторые константы, а у родительского класса есть статический метод, который должен их использовать:

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()

Есть ли способ заставить это работать?

2

Решение

Это хороший пример того, как поздняя статическая привязка работает.

Я не буду переписывать документацию для него, но 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)

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector