クラスとオブジェクト (PHP 5)
日本語版PHP マニュアルトップへ 英語版PHP Manualトップへ

スコープ定義演算子 (::)

スコープ定義演算子 (またの名を Paamayim Nekudotayim)、 平たく言うと「ダブルコロン」は、トークンのひとつです。 static, 定数 およびオーバーライドされたクラスのメンバやメソッドにアクセスすることができます。

これらの要素をクラス定義の外から参照する際には、 クラスの名前を使用してください。

PHP 5.3.0 以降では、変数を用いてクラスを参照することも可能です。 変数の値に (selfparentstatic といった) キーワードを指定することはできません。

なぜダブルコロンに Paamayim Nekudotayim という名前をつけたのか、 ちょっと奇妙に感じられるかもしれません。 しかし、Zend Engine 0.5 (PHP 3のエンジン) を 書いている時に、Zend チームはこう呼ぶと決めたのです。 この奇妙な名前は、実はダブルコロンを意味するヘブライ語なのです!

例1 クラス定義の外からの ::

<?php
class MyClass {
    const 
CONST_VALUE 'A constant value';
}

$classname 'MyClass';
echo 
$classname::CONST_VALUE// PHP 5.3.0 以降で対応

echo MyClass::CONST_VALUE;
?>

二つの特別なキーワードselfparent がクラス定義の内部からメンバまたはメソッドにアクセスする際に使用されます。

例2 クラス定義の中からの ::

<?php
class OtherClass extends MyClass
{
    public static 
$my_static 'static var';

    public static function 
doubleColon() {
        echo 
parent::CONST_VALUE "\n";
        echo 
self::$my_static "\n";
    }
}

$classname 'OtherClass';
echo 
$classname::doubleColon(); // PHP 5.3.0 以降で対応

OtherClass::doubleColon();
?>

拡張されたクラスが親クラスのメソッドの定義をオーバーライドする際、 PHPは親クラスのメソッドをコールしません。 親クラスのメソッドをコールするかしないかは、 拡張されたクラスに責任があります。 これは、コンストラクタおよびデストラクタ, オーバーロード, そして マジック メソッドの定義にも 適用されます。

例3 親クラスのメソッドをコールする

<?php
class MyClass
{
    protected function 
myFunc() {
        echo 
"MyClass::myFunc()\n";
    }
}

class 
OtherClass extends MyClass
{
    
// Override parent's definition
    
public function myFunc()
    {
        
// But still call the parent function
        
parent::myFunc();
        echo 
"OtherClass::myFunc()\n";
    }
}

$class = new OtherClass();
$class->myFunc();
?>

PHPメニュー

スポンサー

人材派遣・アルバイト

日本全国の人材派遣会社とアルバイト紹介サイトを集めたディレクトリです。派遣やアルバイトをお探しの方はご参考に。

会社設立

株式会社の設立や電子定款公証を専門とする方の紹介サイト。

風俗営業許可(バー・キャバクラ等)

バーやキャバレー、クラブやスナック、パチンコ店やダーツバー等を始める場合に必要な風俗営業許可を専門に扱うサイトです。

産業廃棄物収集運搬業許可

産業廃棄物を取扱う事業の中でも収集運搬を専門に許可取得代行を行う専門家を紹介するサイトです。建築関係で事業拡大を図りたい場合にご覧下さい。

NPO法人設立・助成金

NPO法人の設立や運営、助成金の申請を専門にするプロ集団です。


クラスとオブジェクト (PHP 5)
日本語版PHP マニュアルトップへ 英語版PHP Manualトップへ