Was heisst das?
noob
- php
0 Andavos0 Martin0 Thomas Luethi
Hi
ich habe in der PHP Doku unter Klassen gerade folgendes entdeckt:
"Anmerkung: In PHP 4 sind nur konstante Initialisierungen für var Variablen erlaubt. Um Variablen mit nicht konstanten Werten zu initialisieren, benötigen Sie eine Funktion zur Initialisierung, welche beim Erstellen eines Objektes automatisch von der Klasse aufgerufen wird. Eine solche Funktion wird Konstruktor genannt (siehe unten)."
Das ganze kommt von dieser Seite: http://www.php.net/manual/de/language.oop.php
Was soll das bitte heissen?
Und muss ich wikrlich jede neue Variable mit var $bla initialisieren? zb auch in if Anweisungen?
Hallo,
nein das ist nur bei class { ...}
Bei normalen PHP Code musst du das nicht machen
MFG
Andavos
nein das ist nur bei class { ...}
Bei normalen PHP Code musst du das nicht machen
Ich lerne aber gerade Klassen. Also bei Klassen muss ich alle Variablen mit var initialisieren und es dürfen keine dynamischen sein? Die müssen dann in einer Funktion erstellt werden?
Irgendwie verstehe ich die Logik dabei nicht ganz.
nim am besten am anfang des scripts:
global $variable1, $variable2;
Hallo,
schau dir doch die Beispiele auf der Seite an, dort sieht man if anweisungen etc.
MFG
Andavos
nim am besten am anfang des scripts:
global $variable1, $variable2;
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");
}
/* 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. . . */
}
}
?>
Sind da die Variablen $today_date, $name, ... etwa einfach so in der Funktion Cart() verfügbar? Oder ist das $this->today_date etwas anderes? Was ist überhaupt $this?
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.
Hallo,
$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...
oder mal was in Java lesen, da ist das nämlich besser erklärt. In PHP ist die OOP noch etwas stiefmütterlich behandelt.
Gruß, Andreas
Moin!
nim am besten am anfang des scripts:
global $variable1, $variable2;
Ein Programmierstil mit "global" ist vermutlich das Schlimmste, was man sich antun kann. Erst recht bei Verwendung von Klassen, um die es hier geht, und die so ziemlich das entgegengesetzteste Gegenteil sein dürften.
- Sven Rautenberg
Wenn in der Php.ini vom Provider register_globals=on steht, nicht
Moin!
Wenn in der Php.ini vom Provider register_globals=on steht, nicht
Du verbreitest unzutreffende Informationen.
- Sven Rautenberg
Hallo,
Und muss ich wikrlich jede neue Variable mit var $bla initialisieren? zb auch in if Anweisungen?
Die von Dir genannte Stelle steht im Kapitel zu OOP/Klassen.
Das ist ein Sonderfall. Wenn Du nichts mit Klassen
programmierst, ist diese Seite fuer Dich nicht relevant.
Normalerweise musst Du keine Variablen initialisieren.
Aber bevor Du sie verwendest, z.B. mit
echo $meinevariable;
solltest Du sicher sein, dass sie etwas enthalten.
Z.B. indem Du mit
if isset($meinevariable)
nachpruefst.
Das gilt besonders fuer Variablen/Parameter,
die von aussen kommen:
$_POST, $_GET, $_REQUEST, $_COOKIE
Undefinierte Variablen fuehren je nach Situation
und Konfiguration zu Warnungen, Fehlermeldungen
oder Skript-Abstuerzen...
Gruesse,
Thomas
Hallo,
Sorry, unsorfaeltige Formulierung:
solltest Du sicher sein, dass sie etwas enthalten.
Z.B. indem Du mit
if isset($meinevariable)
nachpruefst.
Du solltest pruefen, ob die Variable "existiert"
bzw. "_gesetzt_ ist".
(Sie kann auch leer sein.)
http://www.php.net/manual/de/function.isset.php
mfg, Thomas