Доступ к свойству методом базового класса

1

Базовый класс:

   class CoreModule {
    private static $info;

    public static function getModuleInfo($key=null){
        //Notice: Undefined index: name
        if($key) return self::$info[$key];
        else return self::$info;
    }

    public static function getModuleName(){
        return self::getModuleInfo('name');
    }

Производный класс:

final class users extends CoreModule {
    public static $info = Array(
        'name' => 'Users',
        'version' => '2.0',
        'access' => 999,
        'icon' => 'img/user_gray.png'
    );
    ...
    ...
    logs::add(1, 'logged', self::getModuleName());

Журнал методов: add получает NULL в третьем аргументе. Я хочу иметь "Пользователей".

Что я делаю неправильно? Дополнительно. Как избежать уведомления в методе базового класса?

Теги:

2 ответа

1
Лучший ответ

Вы должны использовать " Поздние статические привязки "

Попробуй это:

public static function getModuleInfo($key=null)
{
    if($key) return static::$info[$key];
    else return static::$info;
}
  • 0
    Работать как шарм. Спасибо.
1

Замените ключевое слово self ключевым словом в вашем коде, и оно будет работать.

Вам нужно использовать поздние статические привязки. Используя self в вашем коде, вы в основном ссылаетесь на свойство $ info, определенное в классе CoreModule, которое не инициализируется. И хотя вы переопределяете $ info в производном классе, это переопределенное свойство не ссылается из-за раннего связывания с родительским классом.

static keyword ссылается на эту версию свойства, которая определена в классе, из которого он вызывается.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню