由于看到框架里面經常使用static::method() 于是稍微了解下static和self的區別
廢話少說,直接上代碼
class Father
{
public function __construct()
{
$this->init();
self::test();
}
public static function test()
{
echo "father test....<br>";
}
public function init()
{
echo 'father init...<br>';
}
}
class Son extends Father
{
public function init()
{
echo 'son init..<br>';
}
public static function test()
{
echo "son test..<br>";
}
}
$son_obj = new Son();顯示結果:
son init.. father test....
分析結果看,調用init非靜態方法已經被子類覆蓋了,但使用self調用靜態方法還是使用的是父類的test靜態方法
于是我們將代碼修改成static
class Father
{
public function __construct()
{
$this->init();
static::test();
}
public static function test()
{
echo "father test....<br>";
}
public function init()
{
echo 'father init...<br>';
}
}
class Son extends Father
{
public function init()
{
echo 'son init..<br>';
}
public static function test()
{
echo "son test..<br>";
}
}
$son_obj = new Son();出現的結果是:
son init.. son test..
使用static調用靜態方法使用了當前分類的靜態方法
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。