今天老大在公司 問了一下 new static 和 new self 的區別 公司十個程序 竟然沒有一個回答上來 後面畫面自補 。。。
本屌絲回家後 就百度了解了下 這二者區別 :
使用 self:: 或者 __CLASS__ 對當前類的靜態引用,取決於定義當前方法所在的類:
使用 static:: 不再被解析為定義當前方法所在的類,而是在實際運行時計算的。也可以稱之為“靜態綁定”,因為它可以用於(但不限於)靜態方法的調用。
簡單通俗的來說, self就是寫在哪個類裡面, 實際調用的就是這個類.所謂的後期靜態綁定, static代表使用的這個類, 就是你在父類裡寫的static,
然後通過子類直接/間接用到了這個static, 這個static指的就是這個子類, 所以說static和$this很像, 但是static可以用於靜態方法和屬性等.
請看列子
<?php
class Person
{
public static function name()
{
echo "xiaosan";
}
public static function callself()
{
self::name();
}
public static function callstatic()
{
static::name();
}
}
class Man extends Person
{
public static function name()
{
echo "gaojin";
}
}
Man::name(); // output: gaojin
Person::callself(); // output: xiaosan
Person::callstatic(); // output:gaojin
?>
小編繼續學習中