2013-03-09 40 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