基类:
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。 我希望有'用户'。
我做错了什么? 另外。 如何避免基类方法中的通知?
答案 0 :(得分:1)
您应该使用" Late static bindings"
试试这个:
public static function getModuleInfo($key=null)
{
if($key) return static::$info[$key];
else return static::$info;
}
答案 1 :(得分:1)
在代码中用self关键字替换self关键字,它将起作用。
您需要使用后期静态绑定。通过在代码中使用self,您实际上引用了未初始化的CoreModule类中定义的属性$ info。即使您在派生类中重写了$ info,也不会因为早期绑定到父类而引用此重写属性。
static keyword指的是在调用它的类中定义的属性版本。