::
基底クラスの関数や変数を参照したり、まだ特定のインスタンスを持たな
いクラスの関数を参照したりできると便利であるような場合があります。
演算子 :: はこのような場合に使用されます。
上の例では、関数example()がクラスAでコールされていますが、クラスA
のオブジェクトはありません。このため、$a->example()のように書くこと
はできません。代わりに、example()を「クラス関数」、つまり、そのク
ラスのオブジェクトではなく、クラス自体の関数としてとしてコールしま
す。
クラス関数はありますが、クラス変数はありません。実際、コールをする
時点ではオブジェクトは存在しません。つまり、クラス関数はどのオブジェ
クト変数も使用することはできません。(しかし、ローカル変数やグロー
バル変数は使用可能です。)また、$this を使用することはできません。
上の例では、クラスBは関数example()を再定義しています。クラスAの元
の定義は隠され、::演算子を使用してクラスAのexample()の実装を明示的
に参照しない限り利用できなくなっています。これを行うには、
A::example()と書いて下さい。(実際には、次節で示すように
parent::example()と書く必要があります。)
この状況では、カレントのオブジェクトがあり、オブジェクト変数を保持
することが可能です。つまり、オブジェクト関数の内部で使用された場合、
$this およびオブジェクト変数を使用することが可能です。