Php 同一文件上的函数和类:未定义函数
我有一个带有类和函数定义的文件,根据定义(自动加载): 我对该类进行了测试,放在同一名称空间中:Php 同一文件上的函数和类:未定义函数,php,namespaces,psr-0,Php,Namespaces,Psr 0,我有一个带有类和函数定义的文件,根据定义(自动加载): 我对该类进行了测试,放在同一名称空间中: namespace Foo; class BarTest {} 当我试图访问test类中的b()函数时,我得到一个未定义函数错误: namespace Foo; class BarTest extends PHPUnit_Framework_TestCase { public function testSomething() { b(); Foo
namespace Foo;
class BarTest {}
当我试图访问test类中的b()
函数时,我得到一个未定义函数
错误:
namespace Foo;
class BarTest extends PHPUnit_Framework_TestCase
{
public function testSomething()
{
b();
Foo\b();
\b();
}
}
似乎什么都不管用。如何调用该函数?您的函数b();必须有身体,把它换成
函数b(){}代码>PHP自动加载不支持函数。但是,它确实适用于静态类方法:
namespace Foo;
abstract class Util
{
static function doSomething() {
}
}
然后,您可以在当前命名空间中的其他一些文件中使用该类,并调用静态方法:
use Foo\Util;
Util::doSomething();
因为这是一个类方法,而自动加载是针对类的,所以它确实可以工作
请注意,在名称空间/类中对方法进行分组的更正确的方法可能也是这样,但是PHP不支持这一点(请参阅)
您可以在网站上的以下问答材料中找到这一点:
- -2011年1月19日
- -11月16日'10
- -2010年1月11日
是否包含包含b
和条的文件?这可能是因为在使用该类之前,您的一些自动加载不会包含带有Bar
的文件。您希望通过testSomething()
b()实现什么;Foo\b()\b()代码>@FritsvanCampen我用自动加载信息编辑了这个问题。那么?在b
之前尝试调用new Bar()
,这样行吗?@FritsvanCampen如果我先实例化对象,它就行了。实际上它确实有一个主体。这是一个输入错误。请看这个@drgomesp问题是,我想从外部调用b()
函数,而不是在该类的对象中使用包装器方法。嗯,有趣的问题,我想我已经理解了这个问题。。除非我不想在类本身内部使用b()
函数,但总是在类外部使用。我只想在名称空间和特定文件中声明类。
use Foo\Util;
Util::doSomething();