2010-12-10 61 views
0

我想知道如果有一種方法來自動創建對象,如果一個屬性被調用。舉例:當屬性被調用時自動創建對象

<?php 
    echo $myObj->myProperty 
?> 

這段代碼當然會失敗,因爲在讀取屬性之前我沒有啓動$ myObj。 即時通訊尋找的是一種基於「myObj」自動啓動$ myObj的方法。

喜歡的東西:

<?php 
class myObj { 
    public myProperty = 'BlaBla'; 
} 
echo $myObj->myProperty; //outputs BlaBla instead of failing 
?> 

我知道__autoload($類名),但啓動classcode與即一個包括(),這樣以後是不是什麼即時通訊,只有作品。

+2

我想不出這種事情的任何合法用途。爲什麼不能在訪問道具之前初始化對象? (我假設你有一些特定的需求,它是一個實例,而不是一個靜態訪問器) – 2010-12-10 17:14:32

+0

因爲我有一個腳本,將eval()從數據庫中的一些內容。此內容可能包括對尚未創建的對象的調用。我可以創建*可能需要的所有對象,但是爲什麼要這樣做呢?它只會佔用CPU的時間和內存 – sunebrodersen 2010-12-13 14:27:31

回答

0

就關閉這個問題,這是我落得這樣做:

preg_match_all("/\\\$(.*?)->/si", $code, $matches); 

我環槽我從數據庫中得到的代碼尋找任何對象的引用,如

$xxxx-> 

然後我循環槽的引用和創建對象

  foreach($matches[1] as $key=>$value) { 
      $$value = Connector::loadConnector($value); 
     } 

凡「loadConnector是:

public function loadConnector($connector, $params = NULL) { 
    require_once $connector. ".php"; 
    $c_name = $connector; 
    return new $c_name($params);  
} 

當然,這是基於我的文件結構,它也需要一定的ErrorHandling中,但到目前爲止,它看起來像它解決了我的問題:)

BR/Sune

相關問題