PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPスコープ解決演算子(::)の使い方を徹底解説

はじめに

PHPにおけるダブルコロン(::)は、スコープ解決演算子(Scope Resolution Operator)と呼ばれる演算子です。クラスレベルで定義された定数・静的プロパティ(static変数)・静的メソッドへアクセスする際に使用します。クラス定義の外部からこれらの要素を参照する場合には、クラス名にスコープ解決演算子を組み合わせて記述します。なお、この演算子は「Paamayim Nekudotayim(パーマイム・ネクドタイム)」とも呼ばれており、ヘブライ語で「ダブルコロン」を意味することからこの名前が付いています。

基本構文

クラスの外部からアクセスする場合は、次のように記述します。クラス名、またはクラス名が格納された変数に対して :: を使うことで、定数や静的プロパティへアクセスできます。

<?php
class A{
    const PI = 3.142;
    static $x = 10;
}

echo A::PI;     // 定数へのアクセス
echo A::$x;     // 静的プロパティへのアクセス

$var = 'A';
echo $var::PI;  // 変数経由でもアクセス可能
echo $var::$x;
?>

クラス内部からのアクセス(self)

クラス内のメソッドから、同じクラスで定義された定数や静的メンバーへアクセスする場合は、キーワードselfを使用します。

<?php
class A{
    const PI = 3.142;
    static $x = 10;

    static function show(){
        echo self::PI . self::$x;
    }
}
A::show(); // 「3.14210」と出力される
?>

子クラスでの利用(parent)

親クラスのメソッドが子クラスでオーバーライドされている場合、オーバーライド後のメソッド内から親クラスの元のメソッドを呼び出すには、parentキーワードとスコープ解決演算子を組み合わせて記述します。

サンプルコード

<?php
class testclass{
    public function sayhello(){
        echo "Hello World\n";
    }
}

class myclass extends testclass{
    public function sayhello(){
        parent::sayhello();  // 親クラスのメソッドを呼び出し
        echo "Hello PHP";
    }
}

$obj = new myclass();
$obj->sayhello();
?>

実行結果

上記のコードを実行すると、次のように出力されます。

Hello World
Hello PHP

このように、スコープ解決演算子はクラス名・selfparentなどと組み合わせることで、継承関係にあるクラス間でも柔軟にメンバーへアクセスできるようになります。また、PHP 5.3以降ではstatic::による遅延静的束縛(Late Static Bindings)もサポートされており、実行時に実際に呼び出されたクラスに応じた参照を行うことも可能です。

  1. C#のスコープ解決演算子(::)とは?名前空間エイリアスの使い方を実例で解説

    スコープ解決演算子(::)とはC#におけるスコープ解決演算子「::」は、C++の同名の演算子とは役割が大きく異なります。C++では「::」はグローバル変数やクラスの静的メンバーへのアクセスに用いられますが、C#では主に名前空間エイリアスを修飾するために使用されます。なぜスコープ解決演算子が必要なのか異なる名前空間に同じ識別子を持つ型が存在する場合、どちらの型を参照したいのかを明示する必要があります。このようなときにスコープ解決演算子を使うことで、参照先の曖昧さを解消できます。たとえば、標準の System.Console クラスを確実に参照したい場合は、global名前空間エイリアスと組み合わ

  2. C#のスコープ解決演算子(::)の使い方と活用シーンを徹底解説

    C#におけるスコープ解決演算子(::)とはC++では、スコープ解決演算子「::」はグローバル変数へのアクセスなどに使われますが、C#では主に名前空間(namespace)に関連して使用される点が大きな違いです。具体的には、異なる名前空間に同じ識別子(クラス名など)が存在し、名前が衝突している場合に、どちらの型を参照するのかを明確に指定するために使います。globalエイリアスとの組み合わせ代表的な使用例として、global::System.Console のように、グローバル名前空間エイリアスと組み合わせて System.Console クラスを参照する方法があります。この書き方をすれば、仮に