Antwort an „Rolf B“ verfassen

Hallo Bastian,

bitte pass mit den Begrifflichkeiten auf. Was Du außerhalb der OOP "Variable" und "Funktion" nennst, wird in einer Klasse zu "Eigenschaft" und "Methode". Man nennt das anders, weil Eigenschaften und Methoden an ein Objekt gebunden sind, und Variablen nicht. Eine Variable in PHP kann sein:

  • Superglobal (z.B. $_GET) - die Variable ist überall sichtbar
  • Global - die Variable existiet so lange wie das Script läuft, ist aber innerhalb von Funktionen oder Methoden nur sichtbar, wenn Du das mit dem global Befehl anforderst
  • Lokal - die Variable existiert im Ausführungskontext einer Funktion oder Methode und ist auch nur dort sichtbar. Endet die Funktion/Methode, verschwindet die Variable.

Eigenschaften und Methoden kannst Du nur ansprechen, wenn Du das Objekt davor schreibst. Entweder in Form der Variablen, in der Du das Objekt gespeichert hast ($pdf->Cell(...)) oder, wenn Du innerhalb einer Methode des gleichen Objekts bist, mit $this. In $this steht immer das Objekt, in dessen Kontext Du gerade unterwegs bist (oder null, wenn dein Code nicht Teil einer Methode ist)

Das ist in einem Forenbeitrag ziemlich aufwändig zu beschreiben. Eigentlich erklärt das PHP Handbuch eine ganze Menge dazu. Man braucht nur etwas Geduld beim Lesen 😉.

Eine Objekteigenschaft bekommt ihren Inhalt durch eine Wertzuweisung.

Ohne Konstruktor:

class PDF_Table_Header extends PDF_MC_Table_WA 
{
   public $id;       // Eigenschaften!
   public $dings;
   public $bums;

   function Header()
   {
      // $blub ist eine Variable, die lokal in der Header-Methode gilt
      $blub = $this->dings . $this->bums;

      // Cell ist eine Methode (die PDF_Table_Header von FPDF erbt)
      $this->Cell(12,34, $this->id, $blub);
   }
}

// Objekt erzeugen. PHP verwendet den Konstruktor, den 
// PDF_Table_Header von PDF_MC_Table_WA (oder deren Superklasse)
// erbt.
$pdf = new PDF_Table_Header('P','mm',$seitenformat);

// Nach dem new setzt Du die eigenen Eigenschaften im Objekt
$pdf->id = 42;
$pdf->dings = "Hallo";
$pdf->bums = "Welt";
// Ab jetzt kann die Header- und Footer-Methode darauf zugreifen.

Mit Konstruktor - ich weiß nicht genau, was das für Parameter sind, denen Du "P" und "mm" übergibst, darum hab ich sie einfach mal $p und $mm genannt. Da Du jetzt deinen eigenen Konstruktor hast, musst Du den Konstruktor der Superklasse selbst aufrufen, damit "P", "mm" und $seitenformat dorthin gelangen.

class PDF_Table_Header extends PDF_MC_Table_WA 
{
   public $id;
   public $dings;
   public $bums;

   function __construct($p, $mm, $seitenformat, $id, $dings, $bums)
   {
      // Konstruktor der Elternklasse aufrufen, weil Du ihn jetzt nicht
      // mehr erbst, sondern selbst einen schreibst.

      parent::__construct($p, $mm, $seitenformat);

      // jetzt die eigenen Eigenschaften initialisieren. Wir sind im
      // Konstruktor, deshalb mit $this zugreifen

      $this->id = $id;
      $this->dings = $dings;
      $this->bums = $bums;
   }

   function Header()
   {
      do_something($this->id, $this->dings . $this->bums);
   }
}

$pdf = new Foo('P','mm',$seitenformat, 42, "Hallo", "Welt");
//           +--------------------+  +-----------------+
//           Bisherige Parameter     Werte für Deine
//                                   Eigenschaften

Wenn Du 17 Werte setzen musst, sind das eine Menge Parameter. Da kann es dann lesbarer werden, sie nicht über den Konstruktor zu setzen.

Rolf

--
sumpsi - posui - obstruxi
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen