GANCHIKU.com

array_walk part3 クラスからの使用

2005年12月13日

array_walkの三回目。

今度は、array_walkのcallbackをクラスのメソッドにしてみる。プログラムのネタはこの間と一緒。
最初私は、array_walkのcallbackでは、クラスを呼ぶことできないんじゃ。。。と思っていました。まぁ、調べていたらちゃんとありますよ。そんな野暮な設計ではないですよね。
PHP: array_walk – Manual
なんかPHPのマニュアルでは、コメントが付いているマニュアルと付いていないマニュアルがあって、断然コメントが付いてあるマニュアルの方がいい。英語だけども、読んでみると結構使えるネタがあったりするから。
で、そこを見れば、私がブログでメモをすることなんて必要ないのだけど。。。。まぁ、自分用のメモのため、と言ってみるテスト。
で、今回のソースはこれ。

$uminosachi = array("tako", "ika", "uni", "kani", "ebi");
/** そのまま出力 */
print_r($uminosachi);

class Quotation {
    function quote() {
        $uminosachi = array("tako", "ika", "uni", "kani", "ebi");
        array_walk($uminosachi, array($this, "add_quote"), "'");
        print_r($uminosachi);
    }
    /**
     * @param $item  array_walkの最初の引数である配列の値
     * @param $key   array_walkの最初の引数である配列のキー
     * @param $quote 囲うもの
     */
    function add_quote(&$value, $key, $quote_char = """) {
        $value = $quote_char . $value . $quote_char;
    }
}

$uminosachi = array("tako", "ika", "uni", "kani", "ebi");
/** Quotationクラスのadd_quoteをarray_walkで使う。 */
$quotation = new Quotation();
array_walk($uminosachi, array($quotation, "add_quote"));
print_r($uminosachi);

/** Quotationクラスのadd_quoteをquotationクラスの中の関数から使う。 */
$quotation->quote();

で、結果がこれ。

Array
(
    [0] => tako
    [1] => ika
    [2] => uni
    [3] => kani
    [4] => ebi
)
Array
(
    [0] => "tako"
    [1] => "ika"
    [2] => "uni"
    [3] => "kani"
    [4] => "ebi"
)
Array
(
    [0] => 'tako'
    [1] => 'ika'
    [2] => 'uni'
    [3] => 'kani'
    [4] => 'ebi'
)

まぁ、呼び出せるのですよ。
インスタンスからarray_walkを使用してメソッドを呼び出したり、クラスの中でそのメソッドを呼び出したり、と。これかなり便利。でも本当は、再帰的にやりたいよね。。。PHP5では、array_walk_recursiveって関数があって、array_walkファンの私としては、PHP5に速く乗り換えたい。いつまで世の中PHP4で行くのかな。

Shin Ohno 2003-2012