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