2011-05-08 96 views
4

我想知道,如果它確定,如果我存儲一組功能集成到這樣陣列的功能

$f = array(
    'functions1' => 
    array(
     'somefunction', 
     array($this, 'someclassfunction'), 
     array($this, 'someotherfunction'), 
    ), 
    'functions2' => 
    array(
     'somefunction', 
     array($this, 'someclassfunction'), 
     array($this, 'someotherfunction'), 
    ), 

    ... 

); 

一個陣列,後來喜歡稱他們爲:

foreach($f as $key => $func) 
    call_user_func($func)... 

如果我做了print_r($f)我從所有這些函數中獲得大量的變量。這是否會以某種方式影響性能?

+0

請停止在標題中寫標籤。 – 2011-05-09 10:49:20

回答

2

如果$f真的很大,它會消耗你的RAM。 print_r實際上也會打印對象屬性。我可以看到你多次使用$,這可能就是你的輸出很大的原因。 PHP文檔讀取:

的print_r()的var_dump()和var_export() 還將展示保護與PHP 5的對象的私人 性能 靜態類成員將不會顯示 。

$這隻在內存中表示一次,即性能開銷很低。

call_user_func本身並不像直接調用函數那麼快。

2

你可以做到。但對於試圖通過代碼工作的其他人來說,它並不是特別易讀。如果您需要將參數傳遞給這些函數並處理返回值(以及潛在的錯誤條件),那也更加尷尬。我不會因爲這些原因而推薦它。

+0

恭敬地,我不同意。就此而言,我會說你不會因爲這些原因而推薦它。 ;) – Madbreaks 2013-07-18 21:53:34

+0

不同意可讀性?或者與傳遞的參數,返回值和潛在的異常? – 2013-07-18 21:58:06

+0

我收回了我以前的評論。通過更多的思考,我必須同意你的看法。 +1 – Madbreaks 2013-07-18 23:18:54

2

通常沒問題。這可能取決於數組是如何填充的 - 如果它是硬編碼的,那麼在實踐中不能使其「太大」。如果它是動態生成的,則可能需要檢查它可以獲得多大,並且如果大小成爲問題,則切換到增量處理方法。

通過在腳本中調用memory_get_usage兩次(分配數組之前和之後)並計算差異,可以很好地估計數組佔用多少內存。

當然我在談論這種方法的可行性,而不是它的可取性,因爲你的問題沒有詢問或提供任何相關信息。