2012-07-20 87 views
0

首先的 - 我的英語不好,所以我希望您能理解。我有問題涉及嵌套對象結構的方法鏈接。OOP在PHP方法鏈

我試圖創造某種與動態創建本身的對象和子列表列表。到目前爲止,我有這樣的代碼:

interface IData {} 


class root { 
    public function __construct(root $proxy = null) { 
     $this->proxy = $proxy; 
    } 
    public function __destruct() { 
     if(!is_null($this->proxy)) { 
      unset($this->proxy); 
     } 
    } 
    public function OpenList() { 
     $list = new field_list($this); 
     $this->data[] = $list; 
     return $list; 
    } 

    public function CloseList() { 
     return $this->proxy; 
    } 

    public function Add() { 
     $this->data[] = new field(); 
     return $this; 
    } 


    private $proxy = null; 
    private $data = array(); 
} 

class field_list extends root implements IData { 
    public function __construct(root $proxy) { 
     parent::__construct($proxy); 
    } 
    public function __destruct() { 
     parent::__destruct(); 
    } 
} 

class field implements IData {} 

我用我的代碼如下:

$root = new root(); 
$root->OpenList()->Add()->CloseList()->OpenList()->Add()->Add()->Add()->OpenList()->Add(); 

我可以追加到$根字段對象(class field),而且還打開一個新的列表(class field_list)並將字段對象追加到最後打開的列表中。

不知對象引用我創建($proxy)會導致內存泄漏問題,而且如果有與此代碼的任何性能問題。 (編輯:)當我print_r($root);我越來越遞歸輸出,我不知道這是否是某種類型的用我的對象結構的問題。

root Object(
[proxy:root:private] => 
[data:root:private] => Array 
    (
     [0] => field_list Object 
      (
       [proxy:root:private] => root Object 
    *RECURSION* 
       [data:root:private] => Array 
        (
         [0] => field Object 
          (
          ) 

        ) 

      ) 

     [1] => field_list Object 
      (
       [proxy:root:private] => root Object 
    *RECURSION* 
       [data:root:private] => Array 
        (
         ........ 
        ) 

      ) 

    ) 

) 

謝謝

+0

你的腳本工作了多久?爲什麼它會導致泄漏? – zerkms 2012-07-20 02:51:52

+0

@zerkms我編輯了我的問題。希望你能解釋* RECURSION *問題。謝謝 – 2012-07-20 16:06:53

+4

從英文角度來看這篇文章最糟糕的部分是你的第一句話。 「我的英文不好」是不正確的用法。其次,如果你比英語母語者使用英語更好,並且說「我的英語不好」,那麼它就會變得居高臨下,令人反感。我不知道爲什麼這麼多非母語的人堅持使用這句話。 – 2012-07-20 16:10:04

回答

2

我見過的鏈接方法之前調用,我不認爲我一生中遇到的任何問題。就內存泄漏而言,我懷疑是不是有問題,因爲與C++或Java等語言不同,您不必處理內存。你已經注意寫一個析構函數,所以我懷疑會有問題。

因爲要創建只有1個實例,應該僅指財產$代理的1個實例,所以我想這可能是確定。