PHP - заставить eval () запускаться в глобальной области [дубликат]

Преобразуйте список в набор, а затем найдите количество элементов в наборе. Если результат равен 1, он имеет одинаковые элементы, а если нет, то элементы в списке не идентичны.

list1 = [1,1,1]
len(set(list1)) 
>1

list1 = [1,2,3]
len(set(list1)
>3
2
задан user1643156 19 October 2012 в 15:20
поделиться

4 ответа

Вам нужно return массив.

Из docs :

eval() возвращает NULL, если только return вызывается в оцениваемом коде, и в этом случае возвращается значение, переданное в return.

Итак, вам нужно сделать:

$arr = eval("return array('foo'=>'bar');");
15
ответ дан Rocket Hazmat 18 August 2018 в 11:28
поделиться
  • 1
    понял, спасибо. Я не обращал особого внимания на Return Value, просто посмотрел на пример, который не использует return. – user1643156 19 October 2012 в 15:29
  • 2
    @ user1643156: Почему вы используете eval в первую очередь? Это медленно и небезопасно. Вероятно, есть лучший способ сделать то, что вы хотите. – Rocket Hazmat 19 October 2012 в 15:29

Прежде всего, eval сильно обескуражен, как описано в руководстве .

Кроме того, вы должны делать что-то вроде $arr = eval("return array('foo'=>'bar');");, т.е. инициализация $arr с помощью функции eval. См. Это в действии здесь

0
ответ дан Teena Thomas 18 August 2018 в 11:28
поделиться
  • 1
    спасибо, я знаю о злой части eval (). функция используется только мной (admin). – user1643156 19 October 2012 в 15:32

Вы имели в виду

eval("\$arr = array('foo'=>'bar');"); 

var_dump($arr);
1
ответ дан Touki 18 August 2018 в 11:28
поделиться
  • 1
    что дает syntax error, unexpected '=' – user1643156 19 October 2012 в 15:25
  • 2
    Вам нужно избежать $. Вы находитесь в двойных кавычках, поэтому PHP пытается интерполировать $arr, так как он не существует, вы завершаете eval ing " = array('foo'=>'bar');". – Rocket Hazmat 19 October 2012 в 15:28
  • 3
    Да, забыл об этом. Исправлено, спасибо. – Touki 19 October 2012 в 15:29

Функция eval выполняет заданный ему код php. Поскольку ваш код ничего не возвращает, он дает null. Вам нужно вернуть массив и сохранить его в переменной, например

$arr = eval("return array('foo'=>'bar');");
0
ответ дан TranQ 18 August 2018 в 11:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: