2017-01-13 14 views
9

私はPHPコードで作業しています。同じクラスの静的メソッドから非静的メソッドを呼び出す方法は?

ここに私の問題を説明するためのサンプルコードは次のとおりです。

class Foo { 

    public function fun1() { 
      echo 'non-static'; 
    } 
    public static function fun2() { 
     echo "static" ; 
     //self::fun1(); 
     //Foo::fun1(); 
    } 
} 

私は静的メソッドから非静的メソッドを呼び出すことができますどのように?

両方の機能は知られていないサイト、全体で使用されています。 I は、静的/非静的な性質を変更することはできません。

+0

私は非静的メソッドはオブジェクトだけで呼び出すことができると思います。クラスと静的メソッドの依存関係は独立しているためです。 – C2486

+0

ええ、しかし、クラス内で、どのように?私は同じクラスのオブジェクトを同じクラスの関数で作成する必要がありますか? – rahulsm

+0

これをチェックしてください:http://stackoverflow.com/a/2396427/2815635 – C2486

答えて

21

あなたは、そのクラスの内部ではない - 静的メソッドにアクセスするための静的メソッド内で新しいオブジェクトを作成する必要があります。

class Foo { 

    public function fun1() { 
     echo 'non-static'; 
    } 

    public static function fun2() { 
     echo (new self)->fun1(); 
    } 
} 
+0

https://eval.in/715502 –

1

主な違いは、あなたがすることなく、クラスの静的メソッドを呼び出すことができるということでしょうそのクラスのオブジェクトをインスタンス化します。 だから、あなたの静的メソッドで

Foo $objInst = new Foo(); 
$objInst->fun1(); 

を試してみてくださいしかし、私は、これは任意のコンテキストで任意の理にかなってどのように表示されません。

+0

ありがとうございます!うまく動作します。しかし、同じクラスのオブジェクトを同じクラスにインスタンス化する必要があるかどうかは、何らかのルールがありますか? – rahulsm

関連する問題