Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 同一文件上的函数和类:未定义函数_Php_Namespaces_Psr 0 - Fatal编程技术网

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();