kerstel: Vererbung

Hi,

ich habe eine Klasse in PHP geschrieben um mir bestimmte sachen zu vereinfachen. Nun will ich eine Funktion vererben um bestimmte dinge mehrmals wiederzugeben.

Folgenden Code hab ich:

<?

$a="BLA";

require("class.php");

class test extends test2 {
  function nochntest($x,$y) {
    $this->Print($x,$y,$a);
  }
}

$p = new test;
$p->nochntest(10,10);  // GEHT NICHT
$p->Print(10,10,$a);   // KLAPPT

?>

Es soll hiermit an der stelle x,y der text a ausgeben werden. $a wird aber nicht ausgedruckt. Wenn ich dir Funktion Print direkt aufrufe klappts, warum?

Danke und Gruß
Kerstel

  1. Huhu Kerstel

    Es soll hiermit an der stelle x,y der text a ausgeben werden. $a wird aber nicht ausgedruckt. Wenn ich dir Funktion Print direkt aufrufe klappts, warum?

    Innerhalb der Funktion nochntest ist $a undefiniert.

    Viele Grüße

    lulu

    1. Hi

      Innerhalb der Funktion nochntest ist $a undefiniert.

      Stimmt. Aber ich dachte innerhalb des Scriptes wären alle Variablen verfügbar. Wie mache ich die denn jetzt für die Funktion verfügbar?

      Gruß

      Kerstel

      1. _Hai_____________________>-<o__________Strand

        Stimmt. Aber ich dachte innerhalb des Scriptes wären alle Variablen verfügbar. Wie mache ich die denn jetzt für die Funktion verfügbar?

        Da gibt es verschiedene Möglichkeiten.
        Z.B. du übergibst den Wert von $a direkt beim Methodenaufruf oder
        Du benutzt eine weitere Methode um dem Objekt eine Eigenschaft mit dem Wert $a zuzuweisen. Das muss dann entsprechend vor dem Aufruf von "nochntest" erfolgen.
        Dann könntest Du z.B. innerhalb von "nochntest" darauf zugreifen.

        Also z.B.

        class test
        {
         var $value;

        function init($val)
         {
           $this->value = $val;
         }

        function print_it($x,$y)
         {
           echo "$x,$y ->".$this->value;
         }
        }

        $a ="Hello World";
        $o = new test;
        $o->init($a);
        $o->print_it(12,12);

        ich hoffe ich habe da jetzt nicht zu viele Fehler eingebaut ;-)

        sollte aber so ähnlich funktionieren

        Gute Nacht

        lulu

  2. Hi

    function nochntest($x,$y)
    {
        global $a;
        $this->Print($x,$y,$a);
    }

    Das hier sollte gehen, denke ich :)

    1. Moin

      Hi

      function nochntest($x,$y)
      {
          global $a;
          $this->Print($x,$y,$a);
      }

      Das hier sollte gehen, denke ich :)

      gehen tut das schon, aber es ist in diesem Zusammenhang (objektorientierung) wenig sinnvoll.

      Eine Klasse sollte ja unabhängig von dem sie verwendenden Skript sein. Daher macht eine Werteübergabe per global die Vorteile des OO-Ansatzes wieder zunichte.

      Viele Grüße

      lulu