4

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

2 に答える 2

1

PHP オートローディングは関数をサポートしていません。ただし、静的クラス メソッドでは機能します。

namespace Foo;

abstract class Util
{
    static function doSomething() {

    }
}

次にuse、他のファイルの現在の名前空間でそのクラスを呼び出し、静的メソッドを呼び出すことができます。

use Foo\Util;

Util::doSomething();

これはクラスメソッドであり、オートロードはクラス用であるため、これは機能します。

名前空間/クラス内でメソッドをグループ化するより正しい方法は、おそらくfinalDocsにすることですが、PHPはそれをサポートしていないことに注意してください(最終的な抽象クラスを作成できないPHPの悲しみ #41 を参照してください)

これは、サイトの次の Q&A 資料でも概説されています。

于 2013-03-09T06:49:34.970 に答える
0

あなたの関数 b(); body が必要です。

function b(){};

于 2013-03-09T00:28:49.130 に答える