簡體   English   中英

通過基類方法訪問屬性

[英]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());

方法logs:add在第三個參數上收到NULL。 我希望有“用戶”。

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

您應該使用“ 后期靜態綁定

嘗試這個:

public static function getModuleInfo($key=null)
{
    if($key) return static::$info[$key];
    else return static::$info;
}

在代碼中將self關鍵字替換為static關鍵字,它將起作用。

您需要使用后期靜態綁定。 通過在代碼中使用self,實際上是在引用未初始化的CoreModule類中定義的屬性$ info。 並且即使您在派生類中重寫$ info,由於早期綁定到父類,所以未引用此重寫屬性。

static關鍵字引用在調用它的類中定義的該屬性的版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM