У меня есть класс с именем Service_B
который расширяет пользовательский класс сервиса.
Для этого пользовательского класса службы требуется один объект с именем Reader
в его __construct()
для правильного создания экземпляра.
Родительская служба определяется следующим образом.
namespace Vendor\Services;
abstract class Service{
function __construct(Vendor\Services\Reader $reader){
}
}
Service_B
определяется следующим образом:
namespace Vendor\Services;
class Service_B extends Service{
function __construct(){
parent::__construct(new \Vendor\Services\Reader());
}
}
Reader
есть следующая строка вверху файла:
use Vendor\Services;
Файлы классов организованы следующим образом:
Vendor/Services/Service_B.php
Vendor/Services/Reader.php
Вопрос: Когда я создаю экземпляр Service_B, появляется следующее сообщение об ошибке:
Fatal error: Class 'Vendor\Services\Reader' not found
Я не понимаю, почему я получаю эту ошибку, так как я думаю, что я использую правильные объявления пространств имен. спасибо
В дополнение к классу вашего Reader
:
//This will declare the Reader class in this namespace
namespace Vendor\Services;
и удалите:
//THIS IS A WRONG DIRECTIVE: you're telling PHP to use the Vendor\Services class but it doesn't even exist
use Vendor\Services;
Затем измените класс Service_B
следующим образом:
namespace Vendor\Services;
//i think this should extend Service, as it calling the parent constructor
class Service_B extends Service
{
function __construct(){
parent::__construct( new Reader() );
}
}
Таким образом, все ваши 3 класса будут находиться в одном пространстве имен, а класс Reader
должен быть найден без явного префикса пространства имен