2011-11-18 81 views
0

好的,所以我試圖在Controller,Model和View之上創建一個Call類。但是,當我將該類設置爲Call類中的數組時,它似乎將數組堆疊在一起(按調用的順序),而不是逐個放置它們。PHP數組堆棧調用類?

這裏就是我的意思是:

array(1) { 
    ["Controller"]=> 
    object(Controller)#2 (1) { 
    ["classes"]=> 
    array(1) { 
     ["Controller_Pages"]=> 
     object(Controller_Pages)#3 (1) { 
     ["classes"]=> 
     array(1) { 
      ["View"]=> 
      object(View)#4 (2) { 
      ["params"]=> 
      array(2) { 
       ["Testing"]=> 
       string(7) "a test." 
       ["lolni"]=> 
       string(7) "a test." 
      } 
      ["classes"]=> 
      array(0) { 
      } 
      } 
     } 
     } 
    } 
    } 
} 

看來在,我打電話給他們的順序來堆放它們。

這裏的呼叫類:

<?php 

class Call { 

    public $classes = Array(); 

    public function __call($name, $args) { 

     if(!is_object($this->classes[$name])) { 

      require_once 'Slave/' . str_replace('_', '/', $name) . '.php'; 

      $this->classes[$name] = new $name(); 

      // to confirm that they are being stacked in the order they are being called 

      echo $name . "\n\n"; 

     } 

     return $this->classes[$name]; 

    } 

    public function dump() { 

     var_dump($this->classes); 

    } 

} 

因此控制器內部,例如,你會打電話像這樣一類:

<?php 

// Class -> Function 

$this->Model()->query(); 

這裏的來源,如果你想看看:

http://joshfoskett.com/View/Call_Issue

因此問題是,我將如何獲得數組看起來像這樣?

array(3) { 
    ["Controller"]=> 
    object(Controller)#1 (1) { 
    ["classes"]=> 
    array(0) { 
    } 
    } 
    [0]=> 
    object(Controller_Pages)#2 (1) { 
    ["classes"]=> 
    array(0) { 
    } 
    } 
    ["View"]=> 
    object(View)#3 (2) { 
    ["params"]=> 
    NULL 
    ["classes"]=> 
    array(0) { 
    } 
    } 
} 

回答

-2

稍後將某人引用,這是我爲解決問題所做的。

我基本上設置$classesstatic,並引用的類與self::

<?php 

class Call { 

    public static $classes = Array(); 

    public function __call($name, $args) { 

     if(!is_object(self::$classes[$name])) { 

      require_once 'Slave/' . str_replace('_', '/', $name) . '.php'; 

      self::$classes[$name] = new $name(); 

     } 

     return self::$classes[$name]; 

    } 

    public function dump() { 

     var_dump(self::$classes); 

    } 

} 

這種方式,延伸到Call沒有使用它自己$this->classes類。

1

在我看來,確實沒有問題。

這裏發生了什麼很簡單,Controller延伸CallController_Pages也是如此。 因此,當您在ControllerController_Pages中執行$this->class();時,該方法的行爲就好像它來自控制器,因此使用$this->classes就好像它是從Controller一樣。

我真的沒有看到這種情況發生,只要代碼是性感和高效的,對我來說沒問題。