Базовый класс:
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 в третьем аргументе. Я хочу иметь "Пользователей".
Что я делаю неправильно? Дополнительно. Как избежать уведомления в методе базового класса?
Вы должны использовать " Поздние статические привязки "
Попробуй это:
public static function getModuleInfo($key=null)
{
if($key) return static::$info[$key];
else return static::$info;
}
Замените ключевое слово self ключевым словом в вашем коде, и оно будет работать.
Вам нужно использовать поздние статические привязки. Используя self в вашем коде, вы в основном ссылаетесь на свойство $ info, определенное в классе CoreModule, которое не инициализируется. И хотя вы переопределяете $ info в производном классе, это переопределенное свойство не ссылается из-за раннего связывания с родительским классом.
static keyword ссылается на эту версию свойства, которая определена в классе, из которого он вызывается.