ホームページ > バックエンド開発 > PHPチュートリアル > 二重コロン (::) 演算子を使用して非静的 PHP メソッドを呼び出せないのはなぜですか?

二重コロン (::) 演算子を使用して非静的 PHP メソッドを呼び出せないのはなぜですか?

Linda Hamilton
リリース: 2024-11-28 17:14:12
オリジナル
295 人が閲覧しました

Why Can't I Call Non-Static PHP Methods Using the Double Colon (::) Operator?

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

次の構文を使用して非静的メソッドを呼び出そうとする場合静的メソッド (class::method) を使用すると、エラーが発生する可能性があります。構成の問題とは対照的に、この動作は PHP の設計に固有のものです。

PHP では、非静的メソッドを呼び出すには、最初にインスタンスを作成する必要があります。このエラーは、class::method 構文を使用するときにインスタンスが明示的に提供されないために発生します。

静的メソッドと非静的メソッドの区別

静的メソッドは、クラスのインスタンスですが、非静的メソッドにはインスタンスが必要です。この違いは、以下の例で明らかです。

class Teste {

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

Teste::fun2(); // This is valid because fun2 is a static method
Teste::fun1(); // This will generate an error because fun1 is not a static method
ログイン後にコピー

一貫性のない動作

ただし、PHP は、静的に呼び出される非静的メソッドでは一貫性のない動作を示します。非静的メソッドが同じクラスの非静的メソッド内から静的に呼び出された場合、非静的メソッド内の $this はクラスの現在のインスタンスを参照します。

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

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

$c = new C;
$c->q(); // This will print 'hello'
ログイン後にコピー

この動作厳密なエラー報告が有効になっている場合、これは誤りであると考えられます。

結論

非静的呼び出し静的メソッドの構文を使用するメソッドは一般に推奨されません。予期しない動作やエラーが発生する可能性があります。代わりに、非静的メソッドを呼び出すための適切な構文を使用することをお勧めします。これには、クラスのインスタンスを作成し、そのインスタンスでメソッドを呼び出すことが含まれます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート