2014-01-09 35 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 

    //... 
相關問題