通过基类方法访问属性

时间:2015-07-06 22:12:46

标签: php

基类:

   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。 我希望有'用户'。

我做错了什么? 另外。 如何避免基类方法中的通知?

2 个答案:

答案 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指的是在调用它的类中定义的属性版本。