Оценить конкатонированный оператор с числами - PullRequest
0 голосов
/ 23 ноября 2018

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

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

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

0 голосов
/ 23 ноября 2018

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

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

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

...