mkzero: Fatal error: Method name must be a string

habe folgendes problem:

beim versuch nen einfachen taschenrechner zu programmieren(2 eingabezeilen, 1 fürs ergebnis, auswahl welche rechenoperation)

kommt bei mir immer der fehler

Fatal error: Method name must be a string in C:\xampp\htdocs\rechner.php on line 22

also bei

$ergebnis=$task->$op($zahla,$zahlb);

ich denke mal das da der parser das problem hat mit der $op-variable umzugehen. gibts ne möglichkeit das zu umgehen? also das $op auch wirklich den richtigen operanden aus der klasse entnimmt?

danke schon mal im vorraus

<?php  
  
include "math.php";  
  
$task= new math;  
$zahla=$_GET[zahla];  
$zahlb=$_GET[zahlb];  
$op=$_GET[op];  
$ergebnis=$_GET[ergebnis];  
$zwischen=$_GET[zwischen];  
  
  
if(empty($zahla))  
{  
  $zahla=0;  
}  
if(empty($zahlb))  
{  
  $zahlb=0;  
}  
  
$ergebnis=$task->$op($zahla,$zahlb);  
  
  
  
echo"  
  
 <table bgcolor=#6988AE border=1>  
  
  <tr>  
  <td>  
<form action=\"rechner.php\">  
   <table border=0 cellspacing=0 cellpadding=0>  
  <tr>  
   <td bgcolor=#FFFFFF colspan=4 align=right></td>  
      <p>Zahl&nbsp&nbsp&nbsp&nbsp A:<br><input name=\"zahla\" type=\"text\" size=\"20\" maxlength=\"10\"></p>  
      <p>Zahl&nbsp&nbsp&nbsp&nbsp B:<br><input name=\"zahlb\" type=\"text\" size=\"20\" maxlength=\"10\"></p>  
      <p>Ergebnis:<br><input name=\"ergebnis\" type=\"text\" size=\"20\" maxlength=\"10\" value=\"$ergebnis\" readonly></p>  
  
  </tr>  
 <tr>  
    <select name=\"op\" size=\"1\">  
      <option value=add>Addition        </option>  
      <option value=sub>Subtraktion     </option>  
      <option value=mul>Multiplikation  </option>  
      <option value=div>Division        </option>  
      <option value=sqrt>Wurzel          </option>  
      <option value=sqr>Quadrat         </option>  
      <option value=neg>Kehrwert        </option>  
      <option value=dec_bin>Dezimal->Bin&auml;r</option>  
      <option value=bin_dec>Bin&auml;r->Dezimal</option>  
      <option value=euryen>Euro-Yen</option>  
      <option value=yeneur>Yen-Euro</option>  
      <option value=eurdol>Euro-Dollar</option>  
      <option value=doleur>Dollar-Euro</option>  
      <option value=eurrub>Euro-Rubel</optionen>  
      <option value=rubeur>Rubel-Euro</optionen>  
    </select>  
       <td colspan=2 align=center width=30>&nbsp;</td>  
       <td colspan=2 align=center><input type=\"submit\" ></td>  
  </tr>  
  
  </table>  
  
  </td>  
  </tr>  
</form>  
 </table>";  
?>
  1. Hi!

    habe folgendes problem:

    Du hast es gut;)

    Fatal error: Method name must be a string in C:\xampp\htdocs\rechner.php on line 22

    $ergebnis=$task->$op($zahla,$zahlb);

    Was fällt Dir bei '$op' auf?

    Richtig, das ist eine (wahrscheinlich nicht definierte) Variable!

    Kill the Dollar(sign)!

    --
    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
    1. das dollar zeichen wegzunehmen bringts auch wenn die $op variable eine variable funktion der klasse hervorbringen soll..

      dein tipp bringt also etwa genausoviel wie dein spruch das ichs gut hätte *augenroll*

      1. Hi!

        Sorry!
        Mein Fehler!

        off:PP

        --
        "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
        1. Ok, hab das problem jetzt gelöst. hab einfach die Operandenvariable mit ner funktion aus math ersetzt.^^

    2. echo $begrüßung;

      Fatal error: Method name must be a string in C:\xampp\htdocs\rechner.php on line 22
      $ergebnis=$task->$op($zahla,$zahlb);
      Was fällt Dir bei '$op' auf?
      Richtig, das ist eine (wahrscheinlich nicht definierte) Variable!

      Falsch, hat er doch weiter oben angelegt. (Wenngleich das auch überflüssig war, existiert doch mit $_GET['op'] bereits eine.) Es steht sicher nur kein gültiger Wert drin.

      Kill the Dollar(sign)!

      Warum? Es ist nicht die Methode op() gefragt sondern die, deren Name (hoffentlich) in $op steht. Siehe Variable Functions.

      echo "$verabschiedung $name";

      1. Hi!

        Es ist nicht die Methode op() gefragt sondern die, deren Name (hoffentlich) in $op steht.

        Ja - du hast recht: ich habe nicht genau genug gelesen.

        off:PP

        --
        "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
  2. echo $begrüßung;

    Fatal error: Method name must be a string in C:\xampp\htdocs\rechner.php on line 22
    also bei
    $ergebnis=$task->$op($zahla,$zahlb);

    Was steht in $op drin?

    ich denke mal das da der parser das problem hat mit der $op-variable umzugehen. gibts ne möglichkeit das zu umgehen? also das $op auch wirklich den richtigen operanden aus der klasse entnimmt?

    Ja, prüfe den dir übergebenen Wert gegen eine Liste der erlaubten Werte, sonst kann dir jemand sonstwas übergeben und ausführen (wenn es eine math-Methode ist).

    danke schon mal im vorraus

    Wieso raus?

    $zahla=$_GET[zahla];
    $zahlb=$_GET[zahlb];
    $op=$_GET[op];
    $ergebnis=$_GET[ergebnis];
    $zwischen=$_GET[zwischen];

    Warum kopierst du das alles nochmal? Mehr Variablen machen ein Script nicht einfacher. Außerdem: Why is $foo[bar] wrong?

    $ergebnis=$task->$op($zahla,$zahlb);

    $task->{$_GET['op']} wäre die Notation, wenn du auf das unnötige Umkopieren verzichtest.

    echo "$verabschiedung $name";