Константа позвонившего ребенка, не доступная в статической функции в родителе

У меня есть статическая функция в классе, который нужно назвать от нескольких дочерних классов. Мне нужна константа от дочернего класса вызова, чтобы быть доступным в той функции. Для имения этих констант в наличии в других местах дочерние классы имеют функцию, которая возвращает значение той константы (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();

Править: сгенерированная ошибка:

  • Вызов к неопределенному методу ParentClass:: show_const () (для функции)
  • Неопределенный класс постоянный 'SOME_CONST' (использующий сам:: SOME_CONST)
6
задан Brian Webster 14 July 2011 в 22:14
поделиться

2 ответа

К сожалению, то, что вы пытаетесь сделать, не собирается работать до 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();
13
ответ дан 8 December 2019 в 16:02
поделиться

Вы должны сделать ChildClass расширять родительский класс ::

class ChildClass extends ParentClass {

Редактировать:

Вы пытаетесь обратиться к константу и методу в детском классе из родительского класса. что не знает, что постоянная класса ребенка существует. Это проблема сферы объема. Ребенок может обратиться к методам и константа родителей, но не наоборот.

2
ответ дан 8 December 2019 в 16:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: