2014-01-09 26 views
1

当我扩展一个处于相同目录级别的类时,它可以很好地工作,但是当扩展类生活在横向子目录级别时,它不会。一切都是命名空间。下面是我的dir结构和相关的代码。Laravel4/PHP:在不同命名空间级别内扩展一个类

导演的结构:

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

composer.json:

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

,我想在不同的地方扩展基类: \程序\ LIB \的Myproj \美国广播公司\ AbcBaseController.php :

​​3210

应用程序\ LIB \的Myproj \美国广播公司\ XyzController.php:

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

应用程序\ LIB \的Myproj \美国广播公司\ Sublvl1 \ Sublvl1Controller.php:

<?php namespace MyProj\Abc\Sublvl1; 

use MyProj\Abc\AbcBaseController; 

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

时的Myproj \美国广播公司\ Sublvl1命名空间里,不应用AbcBaseController,即使我将其导入“使用“声明。但是,AbcBaseController 当在MyProj \ Abc命名空间中时应用。

任何有识之士非常感谢。

+0

你对Sublvl1Controller构造?如果是这样,你是否调用'parent :: __ construct()'? –

+0

这样做,谢谢。是的构造函数在那里,但它没有调用parent :: __构造。为什么在同一个目录中不需要Xyz类? – Bluesail20

+0

这将是必要的,如果它有一个构造函数,我的猜测是它没有。它的一个奇怪的PHP子类构造函数不会自动调用父构造函数。如果一个子类没有构造函数,那么创建一个新对象会隐式地再次调用parent :: __构造 –

回答

1

它看起来像你的孩子上课不调用父类的构造:

class Sublvl1Controller extends AbcBaseController 
{ 

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

    //... 
相关问题