У меня есть статическая функция в классе, который нужно назвать от нескольких дочерних классов. Мне нужна константа от дочернего класса вызова, чтобы быть доступным в той функции. Для имения этих констант в наличии в других местах дочерние классы имеют функцию, которая возвращает значение той константы (php 5.2.9).
Однако, когда в родительском классе, я, может казаться, не получаю доступ к той константе, не с функцией, ни непосредственно. Это даже возможно в php 5.2.9, или я должен передать его как аргумент?
Это - простая версия кода:
abstract class ParentClass {
static function DoSomething() {
$not_working = self::show_const();
$not_working_either = self::SOME_CONST;
return 'working';
}
}
class ChildClass extends ParentClass {
const SOME_CONST = 'some string';
function show_const() {
return self::SOME_CONST;
}
}
$result = ChildClass::DoSomething();
Править: сгенерированная ошибка:
К сожалению, то, что вы пытаетесь сделать, не собирается работать до 5,3. Проблема здесь в начале статическая связывание против поздний Статическое связывание. Ключевое слово
, чтобы означать с опозданием привязки при использовании как
ключевое слово связывается рано, поэтому он выглядит только в классе, где он используется для разрешения символов. Волшебная постоянная __ Класс __
или функция get_Class ()
тоже не будет работать, они также делают ранние статические связывания. По этой причине PHP 5.3 расширено статическое
ключевое слово Static :: uver_method ()
.
Так что в 5.3 это будет работать:
abstract class ParentClass {
public static function DoSomething() {
return static::show_const();
// also, you could just do
//return static::SOME_CONST;
}
}
class ChildClass extends ParentClass {
const SOME_CONST = 'some string';
public static function show_const() {
return self::SOME_CONST;
}
}
$result = ChildClass::DoSomething();
Вы должны сделать ChildClass расширять родительский класс ::
class ChildClass extends ParentClass {
Редактировать:
Вы пытаетесь обратиться к константу и методу в детском классе из родительского класса. что не знает, что постоянная класса ребенка существует. Это проблема сферы объема. Ребенок может обратиться к методам и константа родителей, но не наоборот.