通过基类方法访问属性


Access to property by base class method

基类:

   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关键字引用在调用它的类中定义的属性的版本。