函数和类在同一个文件中:未定义的函数

时间:2013-03-09 00:24:53

标签: php namespaces psr-0

根据PSR-0定义(带自动加载),我有一个包含类和函数定义的文件:

namespace Foo;

function b() {};

class Bar {}

我对该类进行了测试,放在同一名称空间中:

namespace Foo;

class BarTest {}

当我尝试访问测试类中的b()函数时,出现undefined function错误:

namespace Foo;

class BarTest extends PHPUnit_Framework_TestCase
{
    public function testSomething()
    {
        b();
        Foo\b();
        \b();
    }
}

似乎没什么用。我怎么称呼这个功能?

2 个答案:

答案 0 :(得分:1)

PHP自动加载不支持函数。但它确实适用于静态类方法:

namespace Foo;

abstract class Util
{
    static function doSomething() {

    }
}

然后你可以use在其他一些文件当前命名空间中的那个类并调用静态方法:

use Foo\Util;

Util::doSomething();

由于这是一个类方法,并且自动加载适用于类,所以这确实有效。

请注意,在命名空间/类中对方法进行分组的更正确方法可能也是finalDocs,但是PHP不支持(参见Cannot create a final abstract class­PHP Sadness #41)。

您可以在网站上的以下Q& A材料中找到此内容:

答案 1 :(得分:0)

你的功能b();必须有身体,将其改为

function b(){};