zencd
@zencd

Почему PHP не находит класс вынесенный в отдельный файл?

В рамках Laravel-проекта есть phpunit-тест, который отлично работает.

<?php

class FooBar { }

class ExampleTest extends TestCase {
  ...
  new FooBar();


Но стоит мне вынести "FooBar" в отдельный соседний файл "FooBar.php", как этот класс перестаёт находиться интерпретатором PHP: "Class 'FooBar' not found". Добавление конструкции "use FooBar;" ничего не меняет.

Как правильно вынести класс в отдельный файл?

Тест запускаю через "phpunit tests\ExampleTest.php". Никаких namespaces в тестах нет.

>ls tests
ExampleTest.php  FooBar.php


Laravel 5.x, PHP 7.1, phpunit ~5.0
  • Вопрос задан
  • 1794 просмотра
Решения вопроса 1
@pudovMaxim
web-developer
Чтобы заработали use и namespacЫ, нужно файлик с классом сначала загрузить в проект. Можно руками через require/include, либо композером-полуавтоматом через его autoload.

Скорей всего надо будет правильно кинуть этот файлик в папку исходников(src) и сделать composer dump-autoload. Затем проверить, что при phpunit тесте подгружается композерский файл-загрузчик
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Quieteroks
php программист
А вы подключить файл с классом не пробовали (include 'FooBar.php')?
Ответ написан
@Result007
P|-|P
А вы в файле класса прописали namespace ?
Ответ написан
Используйте такую автозагрузку:
spl_autoload_register(function ($class) {
    $file = str_replace('\\', '/', SITE_ROOT.'/classes/' .$class) . '.php';
    if(file_exists($file)) {
        require_once $file;
    } 
});


SITE_ROOT.'/classes/' . - это основная папка с классами
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы