|
|
|
| Забыл как ей пользоваться :(
Допустим у меня есть следующий массив
<?php
$var = array("\$var1", "\$var2", "\$var3");
?>
|
И мне нужно сделать примерно следующее
<?php
for ($i=0; $i<count($res[0]);$i++)
{
$sres = str_replace($res[0][$i], [b]eval($var[$i])[/b], $sres);
}
?>
|
Но здесь где-то ошибка. Вопрос, где? Что я делаю не так? | |
|
|
|
|
|
|
|
для: ddhvvn
(07.01.2007 в 17:45)
| |
"[b]".eval($var[$i])."[/ b]"
|
Только что это за изврат? | |
|
|
|
|
|
|
|
для: Sergey89
(07.01.2007 в 18:08)
| | [b][/b] - это я просто хотел здесь выделить :), но почему то между |code||/code|, это не работает :( | |
|
|
|
|
|
|
|
для: ddhvvn
(07.01.2007 в 18:13)
| | а сразу
$var = array($var1, $var2, $var3);
написать? Без eval-а всегда можно обойтись | |
|
|
|
|
|
|
|
для: isset
(07.01.2007 в 18:17)
| | это я написал для примера
на самом деле на месте var1, var2, var3 могут быть совсем другие имена переменных, т.е. заранее я не знаю что будет внутри "$var[$i]"
Куда же Хеопс пропал? Он мне точно может :)) | |
|
|
|
|
|
|
|
для: ddhvvn
(07.01.2007 в 18:24)
| | Примерно так:
<?php
for($i = 0; $i < count($res[0]); $i++)
{
eval("\$tmp = ".$var[$i].";");
$sres = str_replace($res[0][$i], $tmp, $sres)
}
?>
|
| |
|
|
|
|
|
|
|
для: Евгений Петров
(07.01.2007 в 18:31)
| | Вот это другое дело. :))
Спасибо! | |
|
|
|
|
|
|
|
для: ddhvvn
(07.01.2007 в 18:45)
| | и всё равно тебе это не нужно. | |
|
|
|
|
|
|
|
для: isset
(07.01.2007 в 19:27)
| | А если бы исходные данные были скажем такими?
<?php
$var = array("(\$x+\$y)*2", "\$var2-5", "\$var3");
?>
|
| |
|
|
|
|
|
|
|
для: Евгений Петров
(07.01.2007 в 19:37)
| | и?
$var = array($x+$y*2); | |
|
|
|
|
|
|
|
для: isset
(07.01.2007 в 20:20)
| | Хм, ну хорошо :) А если так?
<?php
$var = array("(\$i+\$i)*2", "\$i-5", "\$i");
?>
|
| |
|
|
|
|
|
|
|
для: Евгений Петров
(07.01.2007 в 23:19)
| | $var = array($i+$i*2, $i-5, $i); | |
|
|
|
|
|
|
|
для: isset
(07.01.2007 в 23:34)
| | Нееее :)) Вот тут я Вас и поймал :) $i меняется в цикле :) | |
|
|
|
|
|
|
|
для: Евгений Петров
(07.01.2007 в 23:37)
| | дану, там ниже $result[] = $var;
:) | |
|
|
|
|
|
|
|
для: isset
(07.01.2007 в 23:38)
| | Эээ где ниже? | |
|
|
|
|
|
|
|
для: Евгений Петров
(07.01.2007 в 23:40)
| | ну а что мешает приписать его туда? | |
|
|
|
|
|
|
|
для: isset
(07.01.2007 в 23:42)
| | Ладно, простой пример:
<?
$array = array("\$i", "\$i*\$i", "\$i*\$i*\$i");
$c = 0;
for($i = 0; $i < 3; $i++)
{
eval("\$tmp = ".$array[$i].";");
$c += $tmp;
}
echo $c;
?>
|
перепишите его так, как считаете нужным. | |
|
|
|
|
|
|
|
для: Евгений Петров
(07.01.2007 в 23:48)
| | к примеру реальную задачу, которую решает этот код... | |
|
|
|
|
|
|
|
для: isset
(07.01.2007 в 23:55)
| | Ну этот код для примера. А реальных задач масса: Например интерпретатор формул. Можно конечно погрузится в дискретную математику и теорию построения трансляторов, написать свой автомат, который будет интерпретировать формулы. Но это будет глупо.
Smarty очень много использует eval. | |
|
|
|
|
|
|
|
для: Евгений Петров
(07.01.2007 в 23:58)
| | И пишут свой... Глупо юзать eval для этого.
Очень? По-моему только для include_php, который вообще редко приходится использовать в проектах... | |
|
|
|
|
|
|
|
для: isset
(08.01.2007 в 00:08)
| | Ответ на пример:
<?php
$c = 0;
for($i = 0; $i < 3; $i++)
{
$tmp = pow($i, $i + 1);
$c += $tmp;
}
echo $c;
?>
|
| |
|
|
|
|
|
|
|
для: isset
(08.01.2007 в 00:11)
| | Да нет. В {if }{/if} применяется eval, условие передается через eval {assign} работает через eval. Да и много чего ещё. Это только то что вспомнил. В вашем примере если я уберу закономерность в формулах то написать вы не сможете.
Но в любом случае я с Вами полностью согласен. eval стоит применять только в крайних случаях. | |
|
|
|
|
|
|
|
для: Евгений Петров
(08.01.2007 в 00:15)
| | посмотрел еще раз исходники smarty, встречается конечно eval в , include_php, {eval}, {math}
но не в {if} и {assign} | |
|
|
|
|
|
|
|
для: Евгений Петров
(07.01.2007 в 23:37)
| | А вообще че мы спорим? Я если честно сам eval недолюбливаю. Точнее просто не использую его. Человек просил помоч вспомнить как он работает. Я ему напомнил. | |
|
|
|
|
|
|
|
для: Евгений Петров
(07.01.2007 в 23:39)
| | Имхо хороший программист должен забыть как оно вообще работает.. | |
|
|
|
|
|
|
|
для: isset
(07.01.2007 в 23:41)
| | +1 | |
|
|
|
|
|
|
|
для: cheops
(08.01.2007 в 01:49)
| | Ну вы даёте :D
Точно +1 ;) | |
|
|
|
|
|
|
|
для: cheops
(08.01.2007 в 01:49)
| | Т.е я плохой программист, да ? :))))
я и не говорю, что я мастер лучше Хеопса (не дай Бог :))), но все же...
P.S.: и все-таки Вы так и не поняли суть проблемы, когда так резво обсуждали eval :))) Я же сказал потом, я НЕ ЗНАЮ, как будут выглядеть имена переменных и даже незнаю, сколько их будет вообще :))) | |
|
|
|
|
|
|
|
для: ddhvvn
(08.01.2007 в 10:19)
| | >Т.е я плохой программист, да ? :))))
Нет, лучше сказать неосторожный. Ситуацию с динамическими именами переменных в любом случае следует избегать - если вы прибегаете в eval() раз в год - ничего страшного, если вы видете функцию раз месяц или чаще - лучше менять тактику в кодировании - добром это не обернётся, либо сами запутаетесь, либо ваш код будет невозможно сопровождать стороннему разработчику. | |
|
|
|
|
|
|
|
для: ddhvvn
(08.01.2007 в 10:19)
| | >Я же сказал потом, я НЕ ЗНАЮ, как будут выглядеть имена переменных и даже незнаю, сколько
>их будет вообще :)))
Эта ситуация однозначно для eval() или динамических переменных $$, однако лучше, если бы такая ситуация не возникала вообще или возникала очень редко. | |
|
|
|
|
|
|
|
для: cheops
(08.01.2007 в 14:25)
| | Хеопс, как всегда на высоте :)), спасибо! | |
|
|
|