2014-01-09 1 views
1

Когда я расширяю класс, который живет на одном уровне с каталогом, он отлично работает, но когда расширяющийся класс живет на уровне подкаталога, он этого не делает. Все пространство имен. Ниже приведена моя структура dir и соответствующий код.Laravel4/PHP: расширение класса на разных уровнях с именами

Dir Struct:

myproj\app\lib\Myproj\ 
        |- ... 
        |- Abc\ 
         |- Sublvl1\ 
           |- Sublvl1Controller.php 
         |- AbcBaseController.php 
         |- XyzController.php 

composer.json:

"psr-0": { 
    MyProj\\": "app/lib" 
} 

Базовый класс, который я хочу, чтобы проходить в различных местах: \ приложение \ Lib \ MYPROJ \ Abc \ AbcBaseController.php :

<?php namespace MyProj\Abc; 

class AbcBaseController extends \BaseController 
{ 
    public function __construct() 
    { dd('inside AbcBaseController'); // testing that the class is being applied when extended... 

приложение \ Lib \ MYPROJ \ Abc \ XyzController.php:

<?php namespace MyProj\Abc; 
class XyzController extends AbcBaseController // works fine 
{ 

приложение \ Lib \ MYPROJ \ Abc \ Sublvl1 \ Sublvl1Controller.php:

<?php namespace MyProj\Abc\Sublvl1; 

use MyProj\Abc\AbcBaseController; 

class Sublvl1Controller extends AbcBaseController // does not work 
{ 
    ... 

AbcBaseController не применяется, когда внутри пространства имен MYPROJ \ Abc \ Sublvl1, даже если я импортировать его с " использовать ". Тем не менее, AbcBaseController имеет значение, применяемое в пространстве имен MyProj \ Abc.

Любое понимание очень ценится.

+0

У вас есть конструктор по Sublvl1Controller? Если это так, вы вызываете 'parent :: __ construct()'? –

+0

Это сделал трюк, спасибо. Да был конструктор, но он не вызывал parent :: __ construct. Почему нет необходимости в классе Xyz в том же каталоге? – Bluesail20

+0

Было бы необходимо, если бы у него был конструктор, я предполагаю, что это не так. Его причуда PHP, что конструкторы дочерних классов автоматически не вызывают родительский конструктор. Если у дочернего класса нет конструктора, то создание нового объекта неявно вызовет вернувшийся родительский :: __ конструкт –

ответ

1

Похоже, ваш класс ребенок не вызывая конструктор родителя:

class Sublvl1Controller extends AbcBaseController 
{ 

    public function __construct() 
    { 
     parent::__construct(); // You need this 

    //... 

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

  • Нет связанных вопросов^_^