Функция и класс в одном файле: неопределенная функция

У меня есть файл с определением класса и функции, в соответствии с определениями 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 ответа

Решение

Автозагрузка PHP не поддерживает функции. Однако это работает для статических методов класса:

namespace Foo;

abstract class Util
{
    static function doSomething() {

    }
}

Вы можете тогда use этот класс в некоторых других файлах использует текущее пространство имен и вызывает статический метод:

use Foo\Util;

Util::doSomething();

Так как это метод класса, а автозагрузка для классов, тогда это работает.

Позаботьтесь о том, чтобы более правильный способ группировки методов внутри пространства имен / класса, вероятно, сделал это final Документы также, однако, PHP не поддерживает это (см. Невозможно создать окончательный абстрактный классPHP Sadness # 41).

Вы также найдете это в следующем материале вопросов и ответов здесь на сайте:

Ваша функция b(); должно быть тело, измените его на

function b(){};

Другие вопросы по тегам