我在PHP中遇到了一些似乎很奇怪的東西。我試圖從一個非靜態方法訪問一個靜態屬性。我需要使用static關鍵字來訪問此屬性,因爲它可以在每個子類中具有不同的值。從PHP中的非靜態方法訪問不正確的靜態屬性
但是,不是從預期的類中訪問屬性,而是從調用類訪問屬性。這對我來說似乎是一個錯誤,但如果不是,我想知道是否有人可以向我解釋這種行爲,並解釋我如何訪問這個靜態屬性。
在這裏,我的期望是,靜態屬性$爲什麼會從類B.採取我困惑,爲什麼反而會從A類採取
<?php
error_reporting(E_ALL & ~E_STRICT);
class A
{
public static $why = "Really don't want this value. Bug?";
public function callB()
{
$B = new B;
$B::getWhy(); // PHP Bug?
$B->getWhy();
$B::getWhyStatic();
$B::getWhyStaticSelf();
}
}
class Base {
protected static $why = "Don't want this value";
public static function getWhyStatic()
{
echo static::$why . "<BR>\n";
}
public static function getWhyStaticSelf()
{
echo self::$why . "<BR>\n";
}
public function getWhy()
{
echo static::$why . "<BR>\n";
}
}
class B extends Base
{
protected static $why = "Want this value?";
}
$A = new A;
$A->callB();
你需要與你的問題更明確,比如,你希望哪個屬性來訪問和訪問呢? – ollieread
已經添加了一些額外的說明。將不勝感激取消投票。 –
刪除投票,看到我編輯的答案在下面,將'$ B :: bah()'改爲'$ B-> bah()'應該修復它 – ollieread