マニュアル:
スコープ解決演算子 (::)
注
次の内容は、PHP 4 以降のバージョンでのみ有効です。
インスタンスを宣言せずに、クラス内の関数、または基本クラス内の関数と変数にアクセスすると便利な場合があります。この場合、:: 演算子が使用されます。
class A {
function example() {
echo "私はオリジナルの function A::example() です。
n";
}
}
class B extends A {
function example() {
echo "私は再定義された関数 B::example() です。
n";
A::example();
}
}
// クラス A にはオブジェクトがないため、出力されます
// 私がオリジナルですfunction A::example().
A::example();
// クラス B のオブジェクトを作成します
$b = new B;
// これは次のように出力されます
// 私は再定義された関数 B::example().
// 私は元の関数 A::example().< br />
$b->example();
?>
上記の例では、クラス A の関数 example() が呼び出されますが、クラス A は存在しません。ここではオブジェクトなので、$a->example() または同様のメソッドを使用して example() を呼び出すことはできません。代わりに、example() をクラス関数として、つまり、このクラスのオブジェクトではなく、クラス自体の関数として呼び出します。
ここにはクラス関数がありますが、クラス変数はありません。実際、関数が呼び出されるとき、オブジェクトはまったくありません。したがって、クラス関数はオブジェクトを使用できません (ただし、ローカル変数またはグローバル変数は使用できます)。また、$this 変数をまったく使用しないこともあります。
上記の例では、クラス B が関数 example() を再定義します。クラス A で元々定義されていた関数 example() はマスクされ、クラス A の example() 関数にアクセスするために :: 演算子が使用されない限り無効になります。例: A::example() (実際には、parent::example() として記述する必要があります。これについては次の章で説明します)。
さらに言えば、現在のオブジェクトにはオブジェクト変数がある可能性があります。したがって、$this およびオブジェクト変数はオブジェクト関数内で使用できます。
マニュアル:
スコープ解決演算子 (::)
スコープ解決演算子 (Paamayim Nekudotayim とも呼ばれます)、またはより単純にコロンのペアを使用して、静的メンバー、メソッド、および定数にアクセスすることもできます。クラス内のメンバーとメソッドをオーバーライドするために使用されます。
クラスの外でこれらの静的メンバー、メソッド、定数にアクセスする場合は、クラスの名前を使用する必要があります。
このオペレーターの名前として Paamayim Nekudotayim を選択したのは少し奇妙に思えます。ただし、これは Zend Engine 0.5 (PHP 3 で使用された) を作成するときに Zend 開発チームによって行われた決定でした。実際、この単語はヘブライ語で二重コロンを意味します。
例 1 クラス外で :: 演算子を使用する
class MyClass {
const CONST_VALUE = '定数値'
} <🎜; >
echo MyClass::CONST_VALUE;
?>
2 つの特別なキーワード self とparent は、クラス内のメンバーまたはメソッドにアクセスするために使用されます。
例 #2 :: クラス定義内から
class OtherClass extends MyClass
{
public static $my_static = 'static var';
パブリック静的関数 DoubleColon () {
Echo Parent :: const_value.
Echo Self :: $ my_static. >
OtherClass::doubleColon() ;
?>
サブクラスが親クラスのメソッドをオーバーライドする場合、PHP はサブクラスが呼び出されるまで、オーバーライドされたメソッドを親クラスで実行しません。このメカニズムは、コンストラクターとデストラクター、オーバーロードされた関数、およびマジック関数でも機能します。
例 #3 親クラスのメソッドを呼び出す
class MyClass
{
protected function myFunc() {
echo "MyClass:: myFunc()n";
}
}
class OtherClass extends MyClass
{
// 親クラスのメソッドをオーバーライドします
public function myFunc()
{
// ただし、オーバーライドされたメソッドは引き続き呼び出すことができます
$class = new OtherClass()
$class->myFunc(); > ?>
その文全体はどういう意味ですか?
Log オブジェクトの WirteLog 静的メソッドを呼び出し、2 つのパラメーター 7 と $notice を渡します