методы — Как я могу преобразовать массив в оператор php?

У меня есть такой массив …

[Summary] => Array
(
[0] => yearManufactured
[1] => &&
[2] => make
[3] => ||
[4] => model
)

Как я могу преобразовать этот массив в вызовы функций и операторов, а затем использовать его для сравнения, например, превратить его в это …

if( $this->yearManufactured() && $this->make() || $this->model() ) {
// do something
} else {
// do something else
}

Методы в классе ..

public function yearManufactured() {
return true;
}

public function make() {
return false;
}

public function model() {
return true;
}

0

Решение

Это похоже на то, что на самом деле может быть полезным для eval, Вы можете проверить, что каждый элемент массива является либо оператором, либо допустимым именем метода, и преобразовать результат вызова метода в логическую строку. Соединение этих вещей должно привести к появлению строки, которую вы можете безопасно оценить, не беспокоясь о том, что это может сделать что-то неприятное, кроме, возможно, вызывающего ошибку разбора, которая может быть перехвачена в PHP 7.

Если вы обнаружите в массиве что-то, чего не должно быть, или выражение не будет проанализировано, вы можете вернуть null или выбросить исключение, как бы вы ни хотели его обработать.

public function evaluateExpressionArray(array $expression) {

// build the expression
$expr = '$result =';
foreach ($expression as $part) {
if ($part == '||' || $part == '&&') {
$expr .= " $part ";
} elseif (method_exists($this, $part)) {
$expr .= $this->$part() ? 'true' : 'false';
} else {
return null;
}
}

// try to evaluate it
try {
eval("$expr;");
} catch (ParseError $e) {
return null;
}

return $result;
}

Будьте очень осторожны с eval, хоть. Никогда ничего не вкладывайте в это, если вы точно не знаете, что это такое.

Вот пример, с которым можно связываться.

0

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

Других решений пока нет …

По вопросам рекламы [email protected]