Tom2: Was heisst das?

Beitrag lesen

Hi Noob

Da ich auch gerade PHP lerne und die Doku von php.net verwende, kann ich dir vielleicht weiterhelfen. Zuerst etwas Begriffsdefinition:
Als 'initialisieren' bezeichnet man nur die erste Wertzuweisung für eine Variable, damit diese keinen Undefinierten Wert hat. PHP tut dies automatisch, wenn du das nicht tust.
Du hast das in deinen Postings z.T. mit dem Deklarieren von Variablen verwechselt. Deklarieren bedeutet, dass du eine Variable im Programm bekannt macht, was in PHP (leider) nicht zwingend notwendig ist. Leider sind meine C-Kenntnisse nicht mehr ganz frisch, wesshalb ich nicht all zu genau darauf eingehen kann. Ein Blick in eine gute C-Referenz zu diesem Thema lohnt sich auf jeden Fall.

Ein kleines Beispiel dazu:

var $a;     // $a wird deklariert
$a = 0;     // $a wird nun von uns initialisiert
var $b = 3; // $b wird deklariert und initialisiert

Hm, so ganz verstehe ich dieses Beispiel aber nicht:

<?php
/* Keine wird in PHP 4 funktionieren */
class Cart
{
   var $todays_date = date("Y-m-d");
   var $name = $firstname;
   var $owner = 'Fred ' . 'Jones';
   var $items = array("VCR", "TV");
}

Dies funktioniert in PHP4 nicht, da der Wert von $todays_date (beispielsweise) nicht konstant ist. Jedes mal wenn du diese Klasse instanzierst, d.h. ein Objekt von ihr ableitest, wird der Variablen ein anderer Wert, nämlich das aktuelle Datum, zugewiesen. Wenn du eine Variable verwendest, die zu Beginn immer denselben Wert hat, zum Beispiel eine Counter-Variable für eine Schleife, dann kannst du diese auch in PHP4 mit 'var $counter = 0;' initialisieren, weil 0 ein konstanter Wert ist.

/* So sollte es gemacht werden */
class Cart
{
   var $todays_date;
   var $name;
   var $owner;
   var $items;

function Cart()
   {
       $this->todays_date = date("Y-m-d");
       $this->name = $GLOBALS['firstname'];
       /* etc. . . */
   }
}
?>

Die Initialisierung verlagerst du jetzt einfach in den sogenannten Konsturktor. Der Konstruktor ist eine Funktion, die denselben Namen wie die Klasse trägt und beim Instanzieren der Klasse automatisch aufgerufen wird. Der Konstuktor kann auch Parameter enthalten, womit du Variablen deines Objektes mit Werten von Ausserhalb initialisieren kannst. Das Sprachreferenz-Kapitel der PHP-Doku hilft dir auch dazu weiter.

Sind da die Variablen $today_date, $name, ... etwa einfach so in der Funktion Cart() verfügbar?

Ja, klar, denn sie sind in demselben Gültigkeitsbereich. Dazu findest du auch Infos im Sprachreferenz-Kapitel der PHP-Doku.

Oder ist das $this->today_date etwas anderes? Was ist überhaupt $this?

$this verweist immer auf sich selbst, d.h. innerhalb einer Klasse auf die aktuelle Instanz eines Objektes. Lies am besten das gesammte Sprachreferenz-Kapitel der PHP-Doku durch und probiere alles aus und frage nach, bis du es verstanden hast. Der Aufwand scheint gross, jedoch verstehst du dann PHP richtig und dir unterlaufen keine dummen Anfänger-Fehler. Es lohnt sich wirklich, zumindest IMHO. Du lernst auch Dinge kenne, die du warscheinlich noch nie gesehen hast und in einem normalen Tutorial oder Einsteiger-Buch nicht findest.

In diesem Sinne:

var $msg = <<<HDS
FG & HTH

Tom2
HDS;

echo $msg;

PS: Die Zuweisungsmethode für den $msg-String nennt sich übrigens Heredoc-Methode.

--
SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
ss:| zu:) ls:& fo:) de:] va:) ch:] sh:( n4:& rl:° br:> js:| ie:% fl:( mo:}