作用功能變數分辨運算符(::

注意

下列內容僅在 PHP 4 及以後版本中有效。

有時,在沒有聲明任何案例的情況下訪問類中的函數或是基類中的函數和變量很有用處。而 :: 運算符即用於此情況。

<?php
class {
    function 
example() {
        echo 
"I am the original function A::example().<br />\n";
    }
}

class 
extends {
    function 
example() {
        echo 
"I am the redefined function B::example().<br />\n";
        
A::example();
    }
}

// A 類沒有對象,這將輸出
//   I am the original function A::example().<br />
A::example();

// 建立一個 B 類的對象
$b = new B;

// 這將輸出
//   I am the redefined function B::example().<br />
//   I am the original function A::example().<br />
$b->example();
?>

上面的例子呼叫了 A 類的函數 example(),但是這裡並不存在 A 類的對象,因此不能這樣用 $a->example() 或是類似的方法呼叫 example()。反而我們將 example() 作為一個類函數來呼叫,也就是說,作為一個類自身的函數來呼叫,而不是這個類的任何對象。

這裡有類函數,但沒有類的變量。實際上,在呼叫函數時完全沒有任何對象。因而一個類的函數可以不使用任何物件(但可以使用局部或是全局變量),並且可以根本不使用 $this 變量。

上面的例子中,類 B 重新定義了函數 example()。A 類中原始定義的函數 example() 將被屏蔽並且不再生效,除非使用 :: 運算符來訪問 A 類中的 example() 函數。如:A::example()(實際上,應該寫為 parent::example(),下一章介紹該內容)。

就此而論,對於現用的對象,它可能有對象變量。因此可以在物件函數的內定使用 $this 和物件變量。