你的代碼在這裏
class B extends A
{
A::setX();
}
是有點過。你沒有把你的調用放在方法中。
class B extends A
{
public static function doSomething() {
A::setX();
}
}
這實際上並沒有通過父/子關係做任何事情。實際上,在您定義class A
之後,由於A::setX()
是公共和靜態的,因此可以在任何地方發起呼叫。此代碼是一樣有效:
class A
{
function isXSet()
{
return X;
}
public static function setX()
{
define('X', 1);
}
}
class B { // No extending!
function isXSet() {
return A::isXSet();
}
}
什麼你就更有可能尋找的是parent
代替:
class A
{
public function isXSet()
{
return X;
}
protected static function setX()
{
define('X', 1);
}
}
class B extends A
{
public static function doSomething() {
parent::setX();
var_dump(parent::isXSet()); // int(1)
}
}
一大利好這裏是擴展類可以訪問從保護的方法和屬性類parent
。這意味着您可以讓其他人不能撥打A::setX()
,除非被叫方是A
的實例或子女。
[在PHP中調用父級靜態方法]可能的副本(http://stackoverflow.com/questions/18636171/call-parent-static-method-in-php) – FirstOne
它應該工作,如果你從某個地方調用它。如果你看一下,那'A :: setX();'只是'飛來飛去'(它不在方法內部)...... – FirstOne
@FirstOne - 爲什麼這個'飛行翱翔'?那我怎麼打電話呢? – Piter