2010-11-24 3 views
6

I次のコードを持っている。ここで、両方のケースで、それは使用して静的クラスの関数を呼び出すための問題である - >間接参照私は</p> <p>PHP 5.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番目の参照方法を使用すると問題はありますか?

私は上記の静的なものと同じ署名を持つ非静的な関数を持つことはできないため、問題にはなりません。私は静的関数を使用するときにもスピードブーストがあるので、関数を静的にしたい。

私は何かが欠けているか、またはここで唯一の問題は、 - >参照外の構文でこれが静的関数であることを示していないという意味ですか?

+0

良い質問です。 :) –

+0

機能的には同等です。静的呼び出しは空のローカルスコープで実行されますが、 ' - >'呼び出しは$ thisインスタンスを持ちます。 "静的"キーワードは、ほとんどあなたのケースのNOPです。自己::参照のみに関連しています。 – mario

+0

@mario、それは間違っています。いずれにせよ、それは静的メソッドであり、 '$ this'は利用できません。 –

答えて

6

docsは、明示的にそれは大丈夫だと言う:

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

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

関連する問題

 関連する問題