如何從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
我怎麼能做到這一點?
如何從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
我怎麼能做到這一點?
要實例化一個類,應該使用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';
試試這個。
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的命名空間。