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

PHP で二重コロン構文を使用して非静的メソッドを呼び出せないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-27 01:15:18978ブラウズ

Why Can't I Call Non-Static Methods Using the Double-Colon Syntax in PHP?

二重コロン構文による非静的メソッドの呼び出し

PHP では、クラス名とそれに続くスコープ解決演算子 (::) を使用して静的メソッドを呼び出すことができます。 。ただし、一般に、同じ方法で非静的メソッドを呼び出すことはできません。

二重コロン構文の非静的メソッド

以下のコード スニペットは、二重コロン構文を使用して、非静的メソッド fun1 を呼び出します。

class Teste {

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

Teste::fun1(); // why?
Teste::fun2(); // ok - is a static method

このコードは、非静的メソッドにはクラス名を介して直接アクセスできないため、エラーが発生します。

制限の理由

PHP では、静的メソッドと非静的メソッドに対して緩やかな型付けを採用しています。静的メソッド。非静的メソッドが静的に呼び出される場合、そのメソッド内の $this キーワードはクラスのインスタンスを参照しません。この緩い動作により、コードに一貫性がなくなり、潜在的にエラーが発生する可能性があります。

静的メソッドのバリアント

二重コロン構文は、静的メソッドを呼び出す場合にのみ許可されます。以下に例を示します。

class StaticExample {

    public static function staticMethod() {
        echo "static method";
    }
}

StaticExample::staticMethod(); // valid

非静的メソッド内

同じ非静的メソッド内から非静的メソッドを静的に呼び出すことができます。クラス。このような場合でも、呼び出されたメソッド内の $this は正しいオブジェクト インスタンスを参照します。

class A {

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

class C {

    public function callNonStatic() {
        $this->name = 'Example';
        A::nonStaticMethod(); // valid
    }
}

$c = new C;
$c->callNonStatic(); // prints Example

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

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