6

PHP5.2を使用しています

私は次のコードを持っています:

class MyClass {
    public function __construct() {}

    public static function stuff() {
        echo 'This is static! <br />';
    }

}

$myClass = new MyClass();

MyClass::stuff(); // Reference by class.

$myClass->stuff(); // Reference by instance of class.

どちらの場合も出力は機能します。出力は次のとおりです。

これは静的です!

これは静的です!

2番目の参照方法と1番目の参照方法の使用に問題はありますか?

上記の静的関数と同じシグネチャを持つ非静的関数を使用することは許可されていないため、問題にはなりません。静的関数を使用すると速度が向上するため、関数を静的にしたいです。

私は何かが足りないのですか、それとも->逆参照構文がこれが静的関数であることを示さないというセマンティクスに関する唯一の問題ですか?

4

1 に答える 1

6

ドキュメントは、それが大丈夫だと明示的に言っています:

静的として宣言されたプロパティは、インスタンス化されたクラス オブジェクトではアクセスできません (ただし、静的メソッドはアクセスできます)。

ただし、 を使用する方が明確::です。また、特にインスタンス フィールドが使用されていない場合に、静的メソッドが大幅に高速であるという考えにも疑問を投げかけます。パフォーマンスのためにアプリケーションのセマンティクスを変更する前に、プロファイリングを行う必要があります。

于 2010-11-24T20:19:24.820 に答える