2012-08-23 59 views
0

使用一個回調函數我有使用回調函數問題,而在PHP

Class My_Class { 

    public function my_function() { 

      $pad = function($value) { 
      return str_pad($value, 2, '0', STR_PAD_LEFT); 
      }; 

      function pad_function($value) { 
       return str_pad($value, 2, '0', STR_PAD_LEFT); 
      } 

      array_map($pad, range(0,100)); //This fails with an exception "Invalid opcode 153/1/8." 
      array_map("pad_function", range(0,100)); //This works ok 
     } 



} 

我使用的PHP版本5.3.3-7這個問題。

爲什麼會發生這種情況的任何想法?

在此先感謝!

+0

定義了$ pad嗎? –

+0

有一個明顯的語法錯誤... – jeremy

+0

請首先修復語法錯誤。 – xdazz

回答

1

最後的問題是與eAccelerator在。

執行代碼時,eaccelerator版本1.0-dev崩潰。 eaccelerator的版本0.9.6.1不會與代碼崩潰。

0

錯別字,$pad永遠不會被定義。

然後array_map不會叫你$my_pad_function lambda表達式,因爲你通過了my_pad_function字符串作爲第一個參數,告訴PHP去尋找一個名爲功能my_pad_function:這是從調用存儲在$my_pad_function拉姆達不同。

無論如何,我建議你不要調用所有的「my_function」,「myPrettyFunction」,「myPointlessNameVar」:即使在操場代碼中給出有意義的名字,你的目標會更清晰。

最後一兩件事:

lambdas : PHP = lipstick : pig 
+0

感謝您的建議,將它們稱爲My_Whatever的原因是因爲我不想複製和粘貼我自己的代碼(因爲它包含更多變量等等),這也是造成這麼多錯誤的原因: )。 –