2011-04-19 26 views
12

這是一類,我在PHP的簡化版本:調用函數array_walk_recursive

class someClass { 
    public function edit_array($array) { 
     array_walk_recursive($array, 'edit_value'); 
    } 
    public function edit_value(&$value) { 
     //edit the value 
    } 
} 

現在從類明顯array_walk_recursive行不通內發送函數的名稱。然而,除了使用循環重新創建array_walk_recursive之外,還有其他方法可以解決這個問題嗎?提前致謝!

回答

19

功能需要被staticly引用。我用這個代碼成功:

<?php 

class someClass { 
    public function edit_array($array) { 
     array_walk_recursive($array, 'someClass::edit_value'); 
    } 
    public static function edit_value(&$value) { 
     echo $value; 
    } 
} 

$obj = new SomeClass(); 

$obj->edit_array(array(1,2,3,4,5,6,7)); 
6

嘗試:

class someClass { 
    static public function edit_array($array) { 
     array_walk_recursive($array, array(__CLASS__,'edit_value')); 
    } 
    static public function edit_value(&$value) { 
     //edit the value 
    } 
} 

注:我用__CLASS__,以便更改類名稱並不妨礙執行。您也可以使用"someClass"

還是以實例的情況下:

class someClass { 
    public function edit_array($array) { 
     array_walk_recursive($array, array($this,'edit_value')); 
    } 
    public function edit_value(&$value) { 
     //edit the value 
    } 
} 
+0

__CLASS__只需要如果你想靜態調用它。 – Zimzat 2011-04-19 21:02:10

16

你的方法沒有被定義爲靜態的,所以我假設你正在實例化。在這種情況下,你可以通過$this

public function edit_array($array) { 
    array_walk_recursive($array, array($this, 'edit_value')); 
} 
+0

這是更好的答案。接受的答案並沒有真正回答這個問題,只是爲靜態類提供了一種替代方法,有時這是不可取的。 – OMA 2017-07-07 20:37:12

0

你也可以做它內嵌..

array_walk_recursive($myArray, function (&$item){ 
    $item = mb_convert_encoding($item, 'UTF-8'); 
});