ホームページ  >  記事  >  バックエンド開発  >  PHP で二重コロン (::) 演算子を使用して非静的メソッドを呼び出すことはできますか?

PHP で二重コロン (::) 演算子を使用して非静的メソッドを呼び出すことはできますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-19 17:00:03363ブラウズ

Can I Use the Double Colon (::) Operator to Call Non-Static Methods in PHP?

二重コロン (::) を使用した非静的メソッドの呼び出し

PHP では、次の構文を使用して非静的メソッドを呼び出すことはできません。静的メソッド (クラス::メソッド)。この動作は、静的メソッドと非静的メソッドの異なる性質に起因します。

静的メソッドはクラス内で定義されますが、クラスのインスタンスを呼び出す必要はありません。これらは通常、ユーティリティ関数または定数に使用されます。対照的に、非静的メソッドでは、アクセスする前にクラスのインスタンスを作成する必要があります。

二重コロン (::) 構文は、静的メソッドを呼び出すために予約されています。この構文を使用して非静的メソッドを呼び出そうとすると、PHP でエラーが発生します。このエラーは構成の問題ではなく、言語の基本的な制限です。

例:

class Teste {

    public function fun1() {
        echo 'fun1';
    }
    public static function fun2() {
        echo "static fun2" ;
    }
}

// Attempt to invoke non-static method using double colon syntax
Teste::fun1(); // Raises error

// Invocation of static method using double colon syntax
Teste::fun2(); // Works as expected

特別な考慮事項

静的メソッドは二重コロン構文を使用して呼び出すことはできません。この規則には例外が 1 つあります。非静的メソッド内では、次の構文を使用して同じクラスの非静的メソッドを呼び出すことができます:

$this->nonStaticMethod();

このコンテキストでは、$this キーワードはクラスの現在のインスタンスを表し、次の構文を使用できます。同じインスタンス内から非静的メソッドにアクセスできます。さらに、同じクラスの非静的メソッド内から非静的メソッドを静的に呼び出す場合、呼び出されたメソッド内の $this は呼び出しクラスのインスタンスを参照します。

例:

class A {

    public $name;
    public function test() {
        echo $this->name;
    }
}

class C {

    public function q() {
        $this->name = 'hello';
        A::test();
    }
}

$c = new C();
$c->q(); // Prints 'hello'

このルールの例外は必ずしも望ましいものではないことに注意することが重要です。この構文を意図せずに使用しようとすると、厳密なエラー報告によりエラーが発生する可能性があります。

以上がPHP で二重コロン (::) 演算子を使用して非静的メソッドを呼び出すことはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。