2015-07-06 3 views
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()); 

Метод пиловочник: добавить получает NULL на 3-й аргумент. Я хочу иметь «Пользователей».

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

ответ

1

Вы должны использовать «Late static bindings»

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

public static function getModuleInfo($key=null) 
{ 
    if($key) return static::$info[$key]; 
    else return static::$info; 
} 
+0

Работает как очарование. Спасибо. – Neevor

1

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

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

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

Смежные вопросы