基类:
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关键字替换为static关键字,它就会起作用。
您需要使用后期静态绑定。通过在代码中使用self,您实际上是在引用未初始化的CoreModule类中定义的属性$info。即使您在derivied类中重写$info,由于早期绑定到父类,这个重写的属性也不会被引用。
static关键字引用在调用它的类中定义的属性的版本。