2013-03-09 61 views
5

我有一个类和函数定义的文件,根据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(); 
    } 
} 

似乎没有任何工作。我怎样称呼那个功能?

+4

您是否包含包含'b'和'Bar'的文件?这可能是因为在使用该类之前,您已经有了一些自动加载,它们不会包含带有“Bar”的文件。 – Halcyon 2013-03-09 00:26:55

+0

你想通过'testSomething()' 'b()来实现什么? Foo \ b(); \ b();' – 2013-03-09 00:28:23

+0

@FritsvanCampen我使用自动加载信息编辑了问题。 – 2013-03-09 00:29:02

回答

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月19日'11

  • autoload functions in php -

  • 0

    Your function b();必须有身体,将其更改为

    function b(){};

    +0

    其实它有一个身体。这是一个错字。 – 2013-03-09 00:29:30

    +0

    请看这个@drgomesp http://codepad.viper-7.com/e5Momf – 2013-03-09 00:35:05

    +0

    事情是,我想从外部调用'b()'函数,并且在该类的对象内部没有包装方法。 – 2013-03-09 00:36:18

    相关问题