2017-04-27 12 views
1

から静的静的関数を実行する方法PHPの異なる名前空間からクラスの静的静的関数を呼び出す方法。私はこのコードを持っている:

namespace x\y\z; 

use x\y\z\h\Foo; 
... 
$classinstring = 'Foo'; 
$classinstring::getType(); 

をし、私はPHPは、私がこれを行うことができますどのようにクラスFooのFatal error: Uncaught Error: Class 'Foo' not foundを見つけることができないというエラーが発生しましたか?

答えて

0

クラスをインスタンス化するには、newを使用する必要があります。 $classinstring = 'Foo'割り当て$classinstring"Foo"文字列リテラルを書く

$classinstring = new Foo();




名前空間は、クラスのショートカットです。これらの2つのステートメントは同じです:

namespace x\y\z; 

use x\y\z\h\Foo; 

$bar = new Foo(); 

$bar = new \x\y\z\h\Foo(); 


また、あなたのクラス名は、ファイル名とまったく同じに綴られていることを確認してください。


スタティックメソッドを使用するためにインスタンス化する必要はありません。クラス名から直接呼び出すことができます。これはネイティブのPHPグローバル関数であり、静的メソッドとして呼び出すことはできませんが、

あなたは、クラス内で独自のgetType()メソッドが定義されていない限り、一例としてgetType()を使用しています。

class Foo 
{ 
    public function getType() 
    { 
     echo 'This is my own function.'; 
    } 

    public static function callAnywhere() 
    { 
     echo 'You don't have to make a new one to use one.'; 
    } 
} 

これは、クラスメソッドを呼び出す必要がある場合に適しています。

Foo::callAnywhere() // prints 'You don't have to make a new one to use one.'; 

$bar = new Foo(); 
$bar->getType(); // prints 'This is my own function.' 

$other = new stdClass(); 
echo getType($other); // prints 'object'; 
0

これを試してください。

namespace x\y\z; 

use x\y\z\h\Foo; 
... 
$classinstring = 'Foo'; 
$classinstring = new $classinstring; 
$classinstring::getType(); 

OR

はたぶんあなたのファイルがちょうど見つけ、クラス X \ Y \ zの\の時間\ fooというにアクセスできませんでした。あなたのクラスFooが 名前空間\ x \ y \ z \ hの名前空間を持っていることを確認してください。

関連する問題