Я борюсь с небольшим фрагментом кода, который не хочет оценивать сам себя:
$t = 5;
$s = "<=";
$r = 6;
var_dump($t.$s.$r);
Здесь возвращаемое var_dump "5<=6"
что имеет смысл, но я просто хочу сказать мне если 5 уступает или равно 6 с логическим значением.
Я хотел знать, есть ли другой способ получить это логическое значение с помощью eval()
или переключатель через всех возможных операторов
Заранее спасибо.
Если вам нужно безопасное и гибкое решение, это позволяет вам определить метод, который выполняется в зависимости от оператора, совпадающего с ключом в массиве, он работает только с двумя операндами, но последний в примерах #
просто умножает первое значение на 4 и возвращает значение …
$operators = [ "<=" => function ($a, $b) { return $a <= $b;},
"<" => function ($a, $b) { return $a < $b;},
">=" => function ($a, $b) { return $a >= $b;},
">" => function ($a, $b) { return $a > $b;},
"#" => function ($a) { return $a * 4; }];
$t = 5;
$s = "<=";
$r = 6;
var_dump($operators[$s]($t,$r));
$s = "<";
var_dump($operators[$s]($t,$r));
$s = ">=";
var_dump($operators[$s]($t,$r));
$s = ">";
var_dump($operators[$s]($t,$r));
$s = "#";
var_dump($operators[$s]($t,$r));
дает …
/home/nigel/workspace2/Test/t1.php:14:
bool(true)
/home/nigel/workspace2/Test/t1.php:17:
bool(true)
/home/nigel/workspace2/Test/t1.php:20:
bool(false)
/home/nigel/workspace2/Test/t1.php:23:
bool(false)
/home/nigel/workspace2/Test/t1.php:26:
int(20)
Это немного запутанно, но также расширяемо и безопасно.
в то время как, как правило, не рекомендуется использовать код usch (оценивающий код как открытый текст), для этого есть функция: eval()
,
eval()
делает то, что вы ожидаете, что PHP будет делать естественным образом: оценивать допустимый код, хранящийся в строке
eval("var_dump(".$t.$s.$r.");");
выполнит эту работу — однако, поскольку любой код внутри этих переменных выполняется без вопросов, это может быть угрозой безопасности или, по крайней мере, привести к возникновению трудных для отладки ошибок.
(дополнительная цитата и ;
необходимы для того, чтобы код внутри eval был действительным кодом PHP)