Оценить конкатонированный оператор с числами

Я борюсь с небольшим фрагментом кода, который не хочет оценивать сам себя:

$t = 5;
$s = "<=";
$r = 6;

var_dump($t.$s.$r);

Здесь возвращаемое var_dump "5<=6" что имеет смысл, но я просто хочу сказать мне если 5 уступает или равно 6 с логическим значением.

Я хотел знать, есть ли другой способ получить это логическое значение с помощью eval() или переключатель через всех возможных операторов

Заранее спасибо.

0

Решение

Если вам нужно безопасное и гибкое решение, это позволяет вам определить метод, который выполняется в зависимости от оператора, совпадающего с ключом в массиве, он работает только с двумя операндами, но последний в примерах # просто умножает первое значение на 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)

Это немного запутанно, но также расширяемо и безопасно.

1

Другие решения

в то время как, как правило, не рекомендуется использовать код usch (оценивающий код как открытый текст), для этого есть функция: eval(),

eval() делает то, что вы ожидаете, что PHP будет делать естественным образом: оценивать допустимый код, хранящийся в строке

eval("var_dump(".$t.$s.$r.");"); выполнит эту работу — однако, поскольку любой код внутри этих переменных выполняется без вопросов, это может быть угрозой безопасности или, по крайней мере, привести к возникновению трудных для отладки ошибок.
(дополнительная цитата и ; необходимы для того, чтобы код внутри eval был действительным кодом PHP)

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector