[英]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.