Почему процедурный код работает для решения этой кодовой последовательности, но функция не работает?

// Процедурные Работы !!

$x=0;

$e1=$x/450+1/2; $e2=$x==0?false:6300/$x;

while($e1 !== $e2){

++$x;

$e1=$x/450+1/2; $e2=$x==0?false:6300/$x;

if($e1 == $e2){
echo "x Solution:  ". $x . "<br>y Solution:  ".$e1;
exit;
}

}

// Сбой функции на e2 ПОЧЕМУ ????? Я закончил стучать головой об стену на этом. Я исследовал Eval, но я не знаю, почему E2 не удается ….

function eSolver($eq1,$eq2){

$x=0;

$e1=eval("return $eq1;"); $e2=eval("return $eq2;");
/*
while($e1 !== $e2){

++$x;

$e1=$eq1; $e2=$eq2;

if($e1 == $e2){
$ePoint= "x Solution:  ". $x . "<br>y Solution:  ".$e1;
exit;
}

}
*/
return $e2;
}

$supply=$x/450+1/2; $demand=$x==0?false:6300/$x;

echo eSolver($supply,$demand);

// e1 работает не e2 и если e2 не работает, вся функция бессмысленна.

0

Решение

Когда ты сказал

$supply=$x/450+1/2; $demand=$x==0?false:6300/$x;

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

$supply = function($x) { return $x/450 + 1/2; };
$demand = function($x) { return ($x == 0) ? false : 6300/$x; };

Как только они лямбда, вам не нужно eval что угодно — и на самом деле, я не уверен, что ты даже можешь. Так что избавься от evals.

Теперь в вашем цикле eSolverможно сказать как

$e1 = $eq1($x); $e2 = $eq2($x);

оценить их.

0

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

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

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