2017-10-26 3 views
0

// Prozedurale Arbeiten !!Kann mir jemand sagen, warum in der Welt der prozedurale Code für die Lösung dieser Codefolge funktioniert, aber die Funktion fehlschlägt?

$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; 
    } 

} 

// Funktion schlägt auf e2 WARUM ????? Ich bin fertig damit, meinen Kopf gegen die Wand zu schlagen. Ich habe eval recherchiert, aber ich weiß nicht, warum e2 nicht ....

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 funktioniert nicht e2 und wenn e2 funktioniert nicht, die ganze Funktion ist sinnlos.

+0

Definieren Sie "funktioniert" und "fehlschlägt". – cHao

Antwort

0

Wenn Sie sagen,

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

diese Werte berechnet werden immer dann und dort, nicht in der Funktion. Sie müssen sie umbrechen, entweder in Anführungszeichen, um an eval (ick) oder in einer anonymen Funktion übergeben.

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

Sobald sie lambdas sind, brauchen Sie nicht zu eval alles - und in der Tat, ich bin nicht sicher, dass Sie auch können. So loswerden die eval s.

nun innerhalb der Schleife in eSolver, kann man sagen, wie

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

sie zu bewerten.

+0

Danke. Ich hatte funktionierende Kodierung in Javascript gesehen, aber ich hatte nie daran gedacht es zu implementieren oder wusste ich wie in PHP. Es ist wirklich nicht anders als Javascript anonyme Funktionen. Ich werde anonyme Funktionen anstelle von eval() implementieren Sie haben Recht. Sie können die Verwendung von eval nicht implementieren. Ich blieb letzte Nacht stundenlang wach, bis ich ins Bett musste. Nochmals vielen Dank! –

+0

Sie können es mit 'eval' implementieren, aber es ist ein falscher Ansatz. Wenn Sie wissen, was Sie berechnen möchten, ist es besser als eine Funktion als eine Zeichenfolge. – cHao

+0

Nur fertig, den Code zu testen, musste die Rückgabebefehlsanweisung an die Bedingung 'if true' verschieben, aber es funktionierte, funktionierte sogar besser als prozedurale, und das ist großartig. Funktionale Codierung, Baby, ein ganz neues Level für mich. Ihr habt die Blindheit der Ignoranz aufgehoben: D –

Verwandte Themen