2017-04-27 70 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 = new Foo();

寫作$classinstring = 'Foo'受讓人$classinstring字符串文字"Foo"


命名空間是類的快捷方式。這兩個語句是相等的:

namespace x\y\z; 

use x\y\z\h\Foo; 

$bar = new Foo(); 

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


另外,還要確保你有拼寫類的名字完全一樣的文件名。


靜態方法不需要被實例化使用;你可以直接從課程名稱中調用它們。

Foo::someCustomMethod();

您使用getType()爲例,雖然這是一個本地的PHP全局函數,不能被稱爲一個靜態方法,除非已在類中定義你自己的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^\^h \富。確保您的Foo類具有名稱空間\ x \ y \ z \ h的命名空間