2011-01-12 2 views
1

彼女は私のコードです:次にPHP:ClassName :: method構文を使用してインスタンスメソッドを呼び出すと、静的呼び出しが行われますか?

class MyClass 
{ 
    public $prop; 
    public function method() 
    { 
    echo $this->prop; 
    } 
} 

どこかのコードでは、誤って:

MyClass::method(); 

と呼ばれる方法が静的ではありませんので、私は、上記の行についての解釈の誤りを持っていることを期待します。代わりに、このメソッドが呼び出され、$ propについての例外が存在しませんでした。だから私はメソッドが静的メソッドとして呼び出されたことを理解しますが、そうではありません。

このように動作しますか? (理由は?)

+0

エラー報告を確認してください。それらは隠れている可能性があります。メインファイルの近くでerror_logを探してください。 – RobertPitt

答えて

4

非静的メソッドを呼び出すと、静的にE_STRICTレベルの警告が生成されます。

http://php.net/manual/en/language.oop5.static.php

私はあなたが抑制さE_STRICT警告があるとします。それは機能します(従来の理由の可能性が高い)が、推奨されていません。

4

従来の理由から、以前は宣言できなかったので、どのクラスメソッドも、staticと宣言されていなくても、静的に呼び出すことができました。そのような場合、$thisはオブジェクトコンテキスト変数ではないため何も参照しません。

PHP5では、静的でないメソッドを静的に呼び出すための警告(E_STRICT)が表示されます。

関連する問題