[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: preg_replace_callback в средине класса
Romms
вопрос маленький...
Как в preg_replace_callback указать функцию в средине класса?
я делаю так:
class className {
...
function func($m) {
return "<i>".$m[1]."</m>";
}

function f() {
$txt = preg_replace_callback("/<b>(.*?)</b>/i", "func", $txt);
}
...
}

но выдает ошибку:
Цитата
Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, 'func', to be a valid callback in ...

я знаю что в средине класса надо вызывать функции так $this->func... но как сдесь сделать я незнаю...



Спустя 51 минута, 51 секунда (25.11.2009 - 19:38) Romms написал(а):
на php.net сказано что нужно делать так:
 $txt = preg_replace_callback("/<b>(.*?)</b>/i", 'self::func', $txt);

но так всёравно ошибка:
Цитата
Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, 'self::func', to be a valid callback in

Спустя 2 часа, 14 минут, 33 секунды (25.11.2009 - 21:52) kirik написал(а):
Во-первых там ошибка в регулярке, должно быть так:
/<b>(.*?)<\/b>/i

Во-вторых ты вполне можешь обойтись одним preg_replace используя его так:
$txt = preg_replace('/<b>(.*?)<\/b>/i', '<i>\\1</i>', $txt);

где в \\1 будет содержаться то, что попадет сюда (.*?)

Спустя 27 минут, 45 секунд (25.11.2009 - 22:20) Romms написал(а):
да... но я спростил условия, не буду я выкладывать 100 строк кода wink.gif
(и на регулярки не посмотрел)
Цитата
где в \\1 будет содержаться то, что попадет сюда (.*?)

а вот это я незнал... спасибо!

Но всё таки вопрос не решён...

Спустя 20 минут, 55 секунд (25.11.2009 - 22:41) glock18 написал(а):
"func" => array($this, 'func')

Спустя 4 минуты, 22 секунды (25.11.2009 - 22:46) Romms написал(а):
это я уже пробовал... sad.gif пишет:
Цитата
Fatal error: Call to undefined function f() in ...

Спустя 9 минут, 41 секунда (25.11.2009 - 22:55) glock18 написал(а):
не верю, код покажи. код, который должен получится, никак не может такую ошибку показывать.

Спустя 12 минут, 24 секунды (25.11.2009 - 23:08) Romms написал(а):
По сути работает(новый клас создавал для тестирования)... но наверно я не так как надо вставил... буду дуплится. Всем спасибо!

это уже отдельная история rolleyes.gif

Спустя 4 минуты, 9 секунд (25.11.2009 - 23:12) kirik написал(а):
Цитата (Romms @ 25.11.2009 - 14:20)
но я спростил условия

Сути дела не меняет, можно так:
Свернутый текст
class className {
// ...
static function func($m) {
return '<i>' . $m . '</i>';
}

function f($txt) {
$txt = preg_replace('/<b>(.*?)<\/b>/ie', 'self::func("\\1")', $txt);
return $txt;
}
// ...
}

$test = new className();
echo $test->f('Here <b>we</b> go!');


А вот как glock18 предложил:
Свернутый текст
class className {
// ...
function func($m) {
return '<i>' . $m[1] . '</i>';
}

function f($txt) {
$txt = preg_replace_callback('/<b>(.*?)<\/b>/i', array($this, 'func'), $txt);
return $txt;
}
// ...
}

$test = new className();
echo $test->f('Here <b>we</b> go!');

Спустя 9 часов, 21 минута, 51 секунда (26.11.2009 - 08:34) Romms написал(а):
kirik, спасибо! Буду пробовать...

Спустя 12 часов, 37 минут, 16 секунд (26.11.2009 - 21:11) Romms написал(а):
и всё таки не разобрался в чём ошибка... вот код:
class ClassName{
function fina($match) {
$mata=asd($match[1]); // ошибка сдесь
return $match[1];
}

function asd($txt) {
$txa = preg_replace_callback("/<b>(.*?)<\/b>/i", array($this, 'fina'), $txt);
return $txa;
}

function display() {
$texta="<%[0]<b></b>%>";
echo $this->asd($texta);
}
}


$class=new ClassName();
$class->display();

текст ошибки:
Цитата
Fatal error: Call to undefined function asd() in Y:\home\2list.phpforum.ru\www\t\t\t\test\T\list-functions.php on line 4

прошу помощи... почему ошибка? dry.gif

Спустя 5 минут, 45 секунд (26.11.2009 - 21:17) kirik написал(а):
Цитата (Romms @ 26.11.2009 - 13:11)
прошу помощи... почему ошибка?

А регулярки-то тут причем? smile.gif У тебя функция asd() к класу ClassName относится? А где $this->?

Спустя 5 минут, 18 секунд (26.11.2009 - 21:22) Romms написал(а):
laugh.gif laugh.gif laugh.gif laugh.gif laugh.gif laugh.gif
Вот это ошибка.... мой рекорд по сложности решения ошибки!!! biggrin.gif
kirik, большое спасибо... за день запарился, голова кипит...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.