Когда я расширяю класс, который живет на одном уровне с каталогом, он отлично работает, но когда расширяющийся класс живет на уровне подкаталога, он этого не делает. Все пространство имен. Ниже приведена моя структура 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.
Любое понимание очень ценится.
У вас есть конструктор по Sublvl1Controller? Если это так, вы вызываете 'parent :: __ construct()'? –
Это сделал трюк, спасибо. Да был конструктор, но он не вызывал parent :: __ construct. Почему нет необходимости в классе Xyz в том же каталоге? – Bluesail20
Было бы необходимо, если бы у него был конструктор, я предполагаю, что это не так. Его причуда PHP, что конструкторы дочерних классов автоматически не вызывают родительский конструктор. Если у дочернего класса нет конструктора, то создание нового объекта неявно вызовет вернувшийся родительский :: __ конструкт –