3

重複の可能性:
phpでオブジェクト演算子「->」を使用する場合

PHP 5では、$class::method()代わりに入力することの利点は何$class->method()ですか?

パフォーマンスや機能の違いと同じように。それとも、これは完全な書き直しのためにコードを非PHP4フレンドリーにする方法にすぎませんか?

4

2 に答える 2

11

PHP5では、この2つは互換性がありません。

静的メソッド呼び出しは、非静的呼び出しよりも高速に実行されますが(多くの反復にわたって)、メソッドは静的コンテキストで呼び出され、呼び出されたメソッドで使用できるオブジェクトはありません。

PHPで静的表記を使用して非静的メソッドを呼び出せる唯一の理由は、PHP 4の下位互換性のためです(PHP 4には関数の静的修飾子、またはpublic / protected / privateがなかったため)。非静的メソッドを静的に呼び出すと、「Strict Standards」出力に関する警告が表示され、最終的には致命的なエラーで失敗する可能性があります。

したがって、答えは実際には、メソッドが呼び出されるはずの方法でメソッドを呼び出すことです。PHP 5の静的メソッドの場合は静的に呼び出しClass::method()、パブリックメソッドの場合はオブジェクトを使用して呼び出します$class->method()

このコードを検討してください(PHP 5で実行):

class Foo {
    protected $bar = 'bar';

    function f() {
        echo $this->bar;
    }
}

echo Foo::f(); // Fatal error: Using $this when not in object context
于 2012-08-06T21:43:42.217 に答える
0

$class::method()クラスの静的メソッドを呼び出しますが、クラス$class->method()のパブリック標準メソッドを呼び出します。

于 2012-08-06T21:44:12.697 に答える