如何在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 :(得分: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';
答案 1 :(得分:0)
试试这个。
namespace x\y\z;
use x\y\z\h\Foo;
...
$classinstring = 'Foo';
$classinstring = new $classinstring;
$classinstring::getType();
OR
也许您的文件无法找到并访问 x \ y \ z \ h \ Foo 类。确保您的类Foo具有 namespace \ x \ y \ z \ h 的命名空间。