2015-12-10 2 views
1

У меня есть класс с именем 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 

Я не понимаю, почему я получаю эту ошибку, так как я думаю, что я использую правильные пространства имен деклараций. Спасибо вам

ответ

3

На верхней части 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's calling the parent constructor 
class Service_B extends Service 
{ 
    function __construct(){ 
     parent::__construct(new Reader()); 
    } 
} 

Таким образом, все ваши 3 класса будут находиться в одном и том же пространстве имен, аКлассдолжен быть найден без явного префикса пространства имен

+0

Да Service_B extends Service Я сохранил исправленное исправленное сообщение – Vincent

+1

Спасибо, заменив 'use' на 'namespace' исправленной проблемой. – Vincent

Смежные вопросы