preg_replace_callback

Статус
В этой теме нельзя размещать новые ответы.

LEXAlForpostl

Мой дом здесь!
Регистрация
21 Май 2008
Сообщения
766
Реакции
228
Здравствуйте.
Подскажите пожалуйста, как в
PHP:
preg_replace_callback ($regex, "funct" ,$string);
Как в функцию funct передать переменную $a?
 
Вариант 1: простой
PHP:
function funct($matches){
	global $a;
	return '';
}
preg_replace_callback($regex, "funct", $string);
Вариант 2: правильный
PHP:
class MyClass{
	private $a;
	public function setA($a){
		$this->a = $a;
	}
	public function funct($matches){
		$this->a; // то самое значение
		return '';
	}
}
$cb = new MyClass;
$cb->setA($a); // передаём значение
preg_replace_callback($regex, array($cb, 'funct'), $string);
 
PHP:
function funct ()
{
return $str;
}
for ($i=1;$i<=5;$i++){
$a="a$i";
global $a;
preg_replace_callback($regex, "funct", $string);

Один раз отрабатывает нормально, а затем не хочет добавлять +1 в переменную "а" и эта переменная вообще пустая потом становится.
 
global вне функции смысла не имеет. Что требуется от этого кода тоже совсем не понятно ))
 
Необходимо передать переменную $i из основного кода, в функцию.
Перменная $i участвует в цикле фор, т.е. необходимо пять раз передать перменную $i.
 
Может всё-таки перенести оператор global в функцию, как в моём примере?)
 
В данном примере не вижу причин использовать preg_replace_callback, хватит обычного preg_replace.
PHP:
function funct($str) {
    return $str;
}

for($i=1; $i<=5; $i++) {
$a= 'a'.$i;
$string = preg_replace($regex, funct($a), $string);
}
 
Не знаю, актуально или нет, но нашёл такую инфу:

При передаче функции в виде array(class, method) PHP создает копию этого класса. Так что, если не хотите наступать на эти грабли, то используйте ссылку на класс. Т.е. array(&$class, 'method').
 
В данном примере не вижу причин использовать preg_replace_callback, хватит обычного preg_replace.
PHP:
function funct($str) {
    return $str;
}
 
for($i=1; $i<=5; $i++) {
$a= 'a'.$i;
$string = preg_replace($regex, funct($a), $string);
}
Почти правильно:D Не, ошибок нет, и под ТЗ попадает, но ты уверен что человеку нужно именно то, что ты написал ?
Скорее всего нужен модификатор е: подробнее в хелпе
PHP:
preg_replace("/(\w+)/e", 
              "FUNCTION('$a', '\\1')", 
              $html_body);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху