Какая разница?eval () или просто вызвать функцию напрямую? - PullRequest
0 голосов
/ 05 апреля 2010

Я не эксперт по PHP и не знаю, в чем разница (1) между a и b.

а.) eval('return "'.base64_decode("encoded_text").'";')

б.) base64_decode("encoded_text")

-Я ДУМАЮ, a это php код, а b это просто строка. И другой мой вопрос:

В чем разница (2) между c и d?

с.) eval('return "'.base64_decode("encoded_text").'";')

d.) eval(base64_decode("encoded_text"))

Итак, у меня есть 2 вопроса. Кто может ответить / помочь?

Спасибо.

Ответы [ 3 ]

1 голос
/ 05 апреля 2010

Забудьте о eval, на этом этапе старайтесь не использовать. Вы должны спросить, в чем разница между

$var = base64_decode("encoded_text")

и

return base64_decode("encoded_text");

Как писал Чад, старайся избегать eval! Он выполняет только код в переменной $. например,

$var = 'base64_decode("encoded_text")';
return eval($var);
1 голос
/ 05 апреля 2010

Давайте обозначим ваши 2 дела как Дело X (часть a и b) и Y (часть c и d).

Дело X

Для этого обе части не отличаются друг от друга. На самом деле, часть А имеет некоторую избыточность.

Если вы оцениваете их медленно, вы заметите, насколько это избыточно:

Часть а
В этой части разница заключается в том, что вы добавляете оператор eval с return в строке для оценки.

  1. echo eval('return "'.base64_decode("encoded_text").'";');
  2. echo eval('return "decoded_text";')'
  3. echo "decoded_text";

Часть b

  1. echo base64_decode("encoded_text");
  2. echo "decoded_text";

Дело Y

Для этого есть серьезная разница.

Часть c

  1. echo eval('return "'.base64_decode("encoded_text").'";');
  2. echo eval('return "decoded_text";')'
  3. echo "decoded_text";

Часть d

  1. echo eval(base64_decode("encoded_text"));
  2. echo eval("decoded_text"); - здесь может быть синтаксическая ошибка, потому что decoded_text может быть или не быть правильным PHP-кодом.
1 голос
/ 05 апреля 2010

Редактировать: упс, прочитать второй вопрос неправильно.

По первому вопросу: В одном случае eval() используется без причины.eval() необходим только в том случае, если вы по какой-то причине динамически встраиваете некоторый код PHP в строку, и его следует использовать очень, очень .Это, конечно, не обязательно в качестве альтернативы простому вызову функции напрямую.

Что касается второго вопроса, разница в том, какая строка оценивается.Случай (c) вернет результат декодирования base-64 «закодированный текст».То есть вернет декодированную версию.Case (d) сначала декодирует текст, , а затем пытается выполнить его как код PHP.Таким образом, (d) фактически выполняет результат декодирования, (c) нет, он просто возвращает декодированный текст.

...