我在寫類別中的 array_walk 時遇到麻煩,因為要在類別中用到callback函數,這裡用arrayAddfix()為例:
錯誤寫法
array_walk( $chnnum, "$this->arrayAddfix"); //注意 Notice: Undefined property: Address::$arrayAddfix in ..
array_walk( $chnnum, "this::arrayAddfix"); //注意array_walk() expects parameter 2 to be a valid callback, class 'this' not found in ..
正確寫法
array_walk( $chnnum, "self::arrayAddfix"); //
array_walk( $chnnum, array($this, "arrayAddfix")); // 結果正確[1],建議寫法。
範例
下面這個範例,是把我的中國字數字陣例 $chnnum在字尾加上中文字'段',執行完畢後,$chnnum這個陣例的內容全部會改變,注意這個操作是全在類別之中。
類別
class Address{ var $chnnum = array("一","二","三","四","五","六","七"); private function arrayAddfix(&$v){ $v .="段"; } public function addSec(){ array_walk( $this->chnnum, "self::arrayAddfix"); // 一段 } }
第7行:這裡使用內建的 array_walk函數,此函數第二個參數需為callback function。我叫用類別中的arrayAddfix函驄,值得注意的是arrayAddfix()所代入的第一個參數是傳參參數,第3行:'&$v',array_walk會把 $chnnum的內容一個個代入到arrayAddfix()中直接修改
執行
$addr= new Address(); print_r($addr->chnnum); $addr->addSec(); print_r($addr->chnnum);
結果
Array
(
[0] => 一
[1] => 二
[2] => 三
[3] => 四
[4] => 五
[5] => 六
[6] => 七
)
Array
(
[0] => 一段
[1] => 二段
[2] => 三段
[3] => 四段
[4] => 五段
[5] => 六段
[6] => 七段
)
結論
推薦最後面的寫法:
延伸閱讀
[PHP] 如何寫callback function 召回函數(回呼函數)@精讚
參考資料
[1] http://stackoverflow.com/questions/3840294/how-do-i-use-a-class-method-as-a-callback-function
[2] array_walk()函數 http://www.w3school.com.cn/php/func_array_walk.asp
原文 2013-09-28 23:49:46 ,編修 2017-08-11