Вызов preg_replace_callback в классе

<?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: ');