繁体   English   中英

PHP,从$ class执行公共静态函数

[英]PHP, execute public static function from $class

如何在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();

要么

也许你的文件找不到并访问类x \\ y \\ z \\ h \\ Foo 确保您的类Foo具有namespace \\ x \\ y \\ z \\ h的命名空间

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM