PHP的範圍解析操作符
今天看到幾個有關PHP的符號。一個是@,這個加在一個變數的前面,是為了抑制PHP直譯器報錯,也就是說即使出了錯也不會顯示出來。
還有一個更重要的符號PHP的範圍解析操作符(::)
在沒有宣告任何例項的情況下訪問類中的函式或者基類中的函式和變數很有用處。而 :: 運算符即用於此情況。
複製程式碼 程式碼如下:
<?php
class A {
function example() {
echo "I am the original function A::example().
n";
}
}
class B extends A {
function example() {
echo "I am the redefined function B::example().
n";
A::example();
}
}
// A 類沒有物件,這將輸出
// I am the original function A::example().
A::example();
// 建立一個 B 類的物件
$b = new B;
// 這將輸出
// I am the redefined function B::example().
// I am the original function A::example().
$b->example();
?>
上面的例子呼叫了 A 類的'函式 example(),但是這裡並不存在 A 類的物件,因此不能這樣用 $a->example() 或者類似的方法呼叫 example()。反而我們將 example() 作為一個類函式來呼叫,也就是說,作為一個類自身的函式來呼叫,而不是這個類的任何物件。
這裡有類函式,但沒有類的變數。實際上,在呼叫函式時完全沒有任何物件。因而一個類的函式可以不使用任何物件(但可以使用區域性或者全域性變數),並且可以根本不使用 $this 變數。
上面的例子中,類 B 重新定義了函式 example()。A 類中原始定義的函式 example() 將被遮蔽並且不再生效,除非使用 :: 運算子來訪問 A 類中的 example() 函式。如:A::example()(實際上,應該寫為 parent::example(),下一章介紹該內容)。
就此而論,對於當前物件,它可能有物件變數。因此可以在物件函式的內部使用 $this 和物件變數。