PHP - если условие внутри строки - PullRequest
0 голосов
/ 07 июля 2010

Простой вопрос, надеюсь, не глупый.

$var=0;
$condition="$var!=0";
if($condition) {
    # do something #
}
else {
    # do something else #
}

Очевидно, что код там не работает, как задумано. Есть хороший способ получить условие if из строки? Или я должен разобрать строку каким-то тревожным образом?

EDIT Я не очень хорошо себя объяснил. Дело в том, что строка может содержать любое возможное условие, которое вы можете представить себе:

  • $ var> 0
  • $ var <0 </li>
  • $ var == 0
  • и т.д.

Я прочитал это условие из XML-файла в виде строки, поэтому не знаю, что найду.

Ответы [ 5 ]

4 голосов
/ 07 июля 2010

Только потому, что никто еще не опубликовал это.Спросите себя, какие сравнения нужно сделать.Если они выполняют простые математические операции, возможно, вы захотите добавить в схему что-то подобное.

<conditions>
  <notEqual var="var" value="0" />
</conditions>

Это позволит вам иметь несколько условий, должно быть относительно простым для анализа и преобразования в php-код..

4 голосов
/ 07 июля 2010

Функция eval() является простым выходом. E.g.:

if(eval($condition)) {
    # do something #
}
else {
    # do something else #
}

Следует подчеркнуть, что eval() это зло. С помощью eval() очень просто сделать сайт крайне небезопасным, даже если вы действительно знаете, что делаете. В частности, даже если вы уверены, что код безопасен сейчас , это может быть не так после добавления нескольких функций в совершенно разные части кода.

При этом eval() находит свое применение, особенно в быстрых и грязных одноразовых скриптах, таких как скрипты миграции.

Если вы пишете веб-сайт, ориентированный на весь мир, вам необходимо соблюдать * крайний * осторожность при использовании eval(). Очень часто необходимая помощь оказывается сложнее, чем реализация не eval() решения.

1 голос
/ 07 июля 2010

почему бы просто не сделать:

$var = 0;
if ($var != 0){
    # do something #
}
else {
    # do something else #
}

РЕДАКТИРОВАТЬ: Или даже

$var = 0;
$condition = 0
if ($var != $condition){
    # do something #
}
else {
    # do something else #
}
0 голосов
/ 07 июля 2010

Хорошо, вы можете использовать злого Эвала. Но если ваше условие на самом деле так просто, как вы предлагаете, вы можете просто использовать регулярное выражение для проверки условия ... Никаких оценок не требуется.

0 голосов
/ 07 июля 2010
  1. Содержимое вашего $condition не $var!=0, а 0=0 (из-за $ не удалось избежать (\$) в двойных кавычках.

  2. Вы можете сделать это с помощью функции eval.

  3. Однако eval - это зло. Спросите себя, действительно ли вам нужно это сделать. Если есть какой-то другой путь, возьми его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...