Функция и класс в одном файле: неопределенная функция
У меня есть файл с определением класса и функции, в соответствии с определениями 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).
Вы также найдете это в следующем материале вопросов и ответов здесь на сайте:
- Автозагрузчик для функций - 19 января '11
- функции автозагрузки в php - 16 ноября 2010 г.
- Работает ли функция автозагрузчика PHP со статическими вызовами методов? - 11 января 2010 г.
Ваша функция b(); должно быть тело, измените его на
function b(){};