<?php
/**
* Вызов preg_replace_callback в классе
* автор: Nc_Soft
* 11.06.09
*/
/* Рассмотрим на примере смайлов
условия: смайлов должно быть не более 3 в одном сообщении
смайлы вызываются как-то так :smile:
*/
class Smiles {
//счетчик смайлов
static $smc=0;
//список смайлов
static $smiles=array(
'smile', 'hi', 'yes', 'bad', //итд
);
//функция печатающая текст (обратите внимание на callback вызов)
static function pr($str) {
return preg_replace_callback('`:([^\s]+):`U', array('self', 'cbs'), $str);
}
//функция обратного вызова для регулярного выражения
//проверяет список смайлов и их количество
static function cbs($v) {
if (self::$smc<3) {
if (in_array(strtolower($v[1]), self::$smiles)) {
self::$smc++;
return '<img src="/smiles/'.$v[1].'.gif" alt="'.$v[1].'"/>';
}
}
return $v[0];
}
}
//пример
echo Smiles::pr('Тут текст со смайлами (неверный смайл :error: )
:smile: :hi: :yes: :bad: ');