Open Source Web Development Tutorials - Dev Shed
preg_replace_callback()関数を使いこなす!
(2009/02/05公開)
クラスにpreg_replace_callback()を使う
次は、クラスを使いたがるオブジェクト指向諸氏のための解説です。さて、前述の例の場合、OOP(オブジェクト指向プログラミング)の手法でコードを作成すると、以下のようになります。
<?php
$str = "
list 1
<ol>
<li>item A</li>
<li>item B</li>
<li>item C</li>
</ol>
list 2
<ol>
<li>item D</li>
<li>item E</li>
<li>item F</li>
<li>item G</li>
</ol>
list 3
<ol>
<li>item H</li>
<li>item I</li>
<li>item J</li>
<li>item K</li>
<li>item L</li>
</ol>
";
$app = new ProcessList();
echo preg_replace_callback('%<ol>(.*?)</ol>%si', array(&$app, 'process_list'), $str);
class ProcessList {
function process_list($matches) {
global $sno;
$sno = 0;
return preg_replace_callback("/<li>(.*?)</li>/i", array(&$this, 'process_item'), trim($matches[1]));
}
function process_item($matches) {
global $sno;
++$sno;
return "$sno. $matches[1]";
}
}
?>
array(&$app, 'process_list')とarray(&$this, 'process_item')を使って、コールバック関数を指定しています。最初のパラメータはオブジェクトを指すポインター、2番目のポインターはそのオブジェクトにおけるコールバック変数のメソッド名です。
最後に
今回はこれで終了です。preg_replace_callback()関数がpreg_replace()関数とまったく同じように動作することがお分かりいただけたでしょうか?唯一の違いは、置換文字列に代わり、コールバック関数を指定することです。コールバック関数を使えば、多様に、かつ非常に便利に、思い通りの文字列を生成することができます。
解説した例を参考に、preg_replace_callback()関数をどんどん活用してください!
Copyright © 2008 Ziff Davis Enterprise, Inc.
Originally appearing in the U.S. Edition of Dev Shed. All Rights Reserved.








