Почему функции, указанные в качестве значений, вызываются сами по себе?

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

bugargen

Местный житель
Регистрация
24 Апр 2008
Сообщения
234
Реакции
20
Например, мне нужно загнать в два массива значения, которые в последствии будут использоваться в preg_replace.

PHP:
$m1 = array ( '/One/', '/Two/', '/Three/' );

$m2 = array ( func('Один'), func('Два'), func('Три') );

. . . . .

$str = preg_replace ( $m1, $m2, $str );

В итоге, функция func() будет вызваться сама-собой, даже если никаких совпадений в preg_replace не обнаружено.

Почему?
 
PHP:
$m2 = array ( func('Один'), func('Два'), func('Три') );

В этой строке стоят 3 вызова этой функции, почему же сама собой, если ты её намеренно вызываешь?)
 
PHP:
$m2 = array ( func('Один'), func('Два'), func('Три') );
В этой строке стоят 3 вызова этой функции, почему же сама собой, если ты её намеренно вызываешь?)
А как же тогда поступить для достижения вышеуказанной цели?

Кстати, код вида:
PHP:
$str = preg_replace ( '/One/', func('Один'), $str );
тоже вызовет функцию, вне зависимости от выполнения условия..
 
А как же тогда поступить для достижения вышеуказанной цели?
Кстати, код вида:
PHP:
$str = preg_replace ( '/One/', func('Один'), $str );
тоже вызовет функцию, вне зависимости от выполнения условия..
Что-то я не пойму, чего ты хочешь?
Вызывая
PHP:
$str = preg_replace ( '/One/', func('Один'), $str );
ты передаешь в параметр не функцию, а значение, которое она возвращает, чтобы значение получить и передать, необходимо ф-ю вызвать, вот она и вызывается, а потом только проверяется preg_replace. Так и в первом примере она 3 раза вызывается.
Поясни точнее. чего хочешь добиться, может есть нормальные способы.
 
PHP:
$m1 = array ( '/One/', '/Two/', '/Three/' );
$m2 = array ( '/Один/', '/Два/', '/Три/' );
$str = "One Three Two Two";

$str2 = preg_replace ( $m1, $m2, $str ); 
preg_replace_callback( $m2, "func", $str2);

function func($t){
    echo $t[0];
}
 
Млин, всё гениальное - оказалось простым :ay:
Есть такой волшебный модификатор e! Я знал про это, но смысла, заложенного в него, не догонял.. Теперь разобрался и на седьмом небе от счастья :D

Вот полностью правильный и рабочий код, без всяких preg_replace_callback:
PHP:
$m1 = array ( '/One/e', '/Two/e' );

$m2 = array ( "func('Один')", "func('Два')" );

function func ( $q ) {

    if ( $q == 'Один' ) return '1';
    if ( $q == 'Два'  ) return '2';

}

$str = 'Тут идёт цифра One, а тут Two. Пожалуй, добавим ещё одну Two и одну One! Конец примера...';

$str = preg_replace ( $m1, $m2, $str );
Я в чём-то не прав?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху