PHP Klassen Problem
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
attribut
aufruf
ausgabe
beitrag
error
faktisch
fehler
ideologie
inhalt
klasse
laufzeit
main
methode
nochmal
schuppen
sofer
statischen attributen
test
verstehe
zeile
-
Hi,
Ich habe folgendes Problem, welches ich schon seit Stunden versuche zu beseitigen:
Ich habe die Klasse MAIN in der Datei main.class.php
und die Klasse USER in user.class.php, wobei USER die child-class von MAIN ist.
Methoden werden vererbt. Bei den Attributen gibt es allerdings Probleme: Sie werden zwar vererbt, allerdings ohne Inhalt.
MAIN-Klasse (Anfang) :
<?php class MAIN extends MYSQL { public static $dateTime = array(); public static $dbConfig; function controlMain() { $this->loadConfigFromMySQLDatabase(); $this->setDefines(); $this->makeCurrentDateAndTimeStrings(); } public function loadConfigFromMySQLDatabase() { $this->dbConfig = parent::mysqlQuery('SELECT * FROM config', 'mysqlFetchArray'); if (empty($this->dbConfig)) { header('LOCATION:../error.php?error=no_db_config'); } } ?>
USER-Klasse (anfang):
<?php class USER extends MAIN { public static $countVisiter = false, $userCountryOfOrigin, $userLanguage2, $userReferer, $userResolution, $userPixelDepth; public static $userPlugins, $userAgent, $userOS, $userBrowser, $userBrowserVersion, $userRobot, $userRobotVersion, $userSiteNow; public static $userSiteNowName, $userIP, $userHost, $userID, $userGroupID, $userGroupName, $userLogInName, $userPassword, $autoLoginID, $autoLoginTime; public static $userLastLoginTime, $userFirstName, $userFamilyName, $userStreet, $userHouseNumber, $userCity, $userZIP, $userCountry; public static $userState, $userBirthdayDay, $userBirthdayMonth, $userBirthdayYear, $userLanguage = 'de', $userAvatar, $userSignature; public static $userStandardDateFormat, $userStandardTimeFormat; function controlUser() { print_r(parent::$dbConfig); $this->checkLastVisit(); $this->collectUserInforamtion(); $this->checkUserStatus(); $this->makeCurrentDateAndTimeStrings(); } ?>
Die Zeile print_r(parent::$dbConfig); in USER liefert beispielsweise keine Ergebnisse, w?hrend ein Methodenaufruf Ergebnisse liefert. An was liegt das?
Danke -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Mhh, ich habe zwar nicht so genau verstanden, wo dein Problem liegt, aber vllt hilft folgendes :
Die Klasse musst du initialisieren, damit du Attribute benutzten kannst.
Also
$class = class (); $class -> attribut = $class -> function ();
MfG Lucas -
Nochmals:
Die Klasse USER erbt die Atribute und Methoden (sofern public) von der Klasse MAIN. Das Problem bestht nun darin, dass ich in der Klasse USER Methoden der Elternklasse MAIN aufrufen kann, die dann auch funktionieren, Attribute allerdings nicht! Das hei?t, das Attribut wird zwar deklariert, da PHP in der Klasse USER keinen Fehler ausgibt, es hat allerdings auch keinen Inhalt. -
Mhh, ich habe zwar nicht so genau verstanden, wo dein Problem liegt, aber vllt hilft folgendes :
Die Klasse musst du initialisieren, damit du Attribute benutzten kannst.
Also
$class = class (); $class -> attribut = $class -> function ();
MfG Lucas
Mag sein, aber bei statischen Attributen ist das nicht notwendig.
@danielkuhner:
Beim Aufruf der statischen Attribute aus der Elternklasse muss "parent::" nicht mit angegeben werden.
Probiere es mal mit "print_r(USER::$dbConfig)".
?dit:
Ack... Hm. Das Attribut wird ja in einer Methode der abgeleiteten Klasse ben?tigt... Ist das Attribut denn ?berhaupt initialisiert, hat es einen Wert?!
GrEetz, Olliander
Beitrag ge?ndert am 27.08.2006 16:54 von olliander
Olliander war schneller...
@Olliander: Ne MAIN::... bringt ebenflass nichts. Das komische ist halt, dass das Attribut vererbt wird, nur st?ndig ohne Inhalt. -
Nochmals:
Die Klasse USER erbt die Atribute und Methoden (sofern public) von der Klasse MAIN. Das Problem bestht nun darin, dass ich in der Klasse USER Methoden der Elternklasse MAIN aufrufen kann, die dann auch funktionieren, Attribute allerdings nicht! Das hei?t, das Attribut wird zwar deklariert, da PHP in der Klasse USER keinen Fehler ausgibt, es hat allerdings auch keinen Inhalt.
Ja, ich habe mich eben verlesen. Arg verlesen...
Ich habe mal testweise eine ?hnliche Situation konstruiert...
class test { public static $test = 'Test'; } class test2 extends test { function ausgabe() { print_r(parent::$test); } } $test2 = new test2(); $test2->ausgabe();
Bei mir funktioniert das Ganze.
Ordnest Du den Attributen eigentlich Werte zu?
GrEetz, Olliander
Beitrag ge?ndert am 27.08.2006 17:08 von olliander -
Ja Werte werden zugeordnet. Wenn ich in der Klass MAIN mittles $this->dbConfig das Array ausgeben lasse, wird es auch ausgegeben. Das wirklich komische ist nur, dass die Konfigurationsdaten nicht vererbt werden (nebenbei: die von $dateTime auch nicht). Baue ich allerdings ein kleines Testscript (so ?hnlich wie deines Olliander) funktionierts)
-
Ich glaube, dass es ein logisches Problem ist.
Die Klasse USER erbt alles von der Klasse MAIN, dass heisst aber nicht, dass sich die Werte der Atrribute von USER ?ndern, wenn du die Werte der Attribute von MAIN ?nderst(w?hrend der Laufzeit des Scriptes).
Also mein Vorschlag, kopier deine Klasse und schmeiss alles raus, was nicht notwendig ist und poste dann nochmal den Code, denn ich habe keine Lust 60 Zeilen Code durchzugehen und nachzuvollziehen(siehe Avatar *gg).
[...]
Mag sein, aber bei statischen Attributen ist das nicht notwendig.
[...]
Dann m?ssen die Attribute aber bereits im Kopfteil initialisiert werden. Des weiteren kann man deren Werte nicht ver?ndern.
Beitrag ge?ndert am 27.08.2006 17:20 von lucas9991 -
Ja Werte werden zugeordnet. Wenn ich in der Klass MAIN mittles $this->dbConfig das Array ausgeben lasse, wird es auch ausgegeben. Das wirklich komische ist nur, dass die Konfigurationsdaten nicht vererbt werden (nebenbei: die von $dateTime auch nicht). Baue ich allerdings ein kleines Testscript (so ?hnlich wie deines Olliander) funktionierts)
Eben habe ich nochmal Deine Codeschnipsel ?berflogen, und da fiel es mir wie Schuppen von den Augen... ^^
Ein statisches Attribut besitzt keinen Objektkontext.
public static $dbConfig; [...] $this->dbConfig = parent::mysqlQuery('SELECT * FROM config', 'mysqlFetchArray');
Das kann also faktisch nicht funktionieren, der $this->Zeiger ist wirkungslos. Wie lucas9991 schon anmerkte... Statische Attribute sind ja sch?n und gut, aber sie haben einen bestimmten Zweck. F?r das, was Du erreichen willst, reichen normale Attribute v?llig aus.
GrEetz, Olliander
Beitrag ge?ndert am 27.08.2006 17:23 von olliander -
Oh... verdammt stimmt^^ Da sitzt man stundenlang da und sucht nach dem Fehler... Danke
Allerdings verstehe ich dann doch nicht, weshalb man die Attribute innerhalb der klass MAIN mit $this aufrufen kann (inkl. Inhalt)
Gru?
Daniel
Beitrag ge?ndert am 27.08.2006 17:25 von danielkuhner -
Oh... verdammt stimmt^^ Da sitzt man stundenlang da und sucht nach dem Fehler... Danke
Allerdings verstehe ich dann doch nicht, weshalb man die Attribute innerhalb der klass MAIN mit $this aufrufen kann (inkl. Inhalt)
Gru?
Daniel
Beitrag ge?ndert am 27.08.2006 17:25 von danielkuhner
Kann man das? W?re mir neu...
class test { public static $test = 'Test'; function static_print() { print_r($this->test); } } class test2 extends test { function ausgabe() { print_r(parent::$test); } } $test = new test(); $test->static_print(); $test2 = new test2(); $test2->ausgabe();
$test->static_print() gibt nichts aus...
GrEetz, Olliander -
Ach ja was solls, die Hauptsache ist, dass es jetzt geht^^
-
Wenn du auf Statische INhalte innerhalb deiner Klasse zugreifen willst, musst du das ?ber $self machen. $this ist wie schon gesagt nur innerhalb des Klassenkontext g?ltig.
Allerdings ist das Design einer rein Statischen Klass alles andere als OOP geeignet. Statische Elemente entsprechen nicht der OOP Ideologie und sollten nur f?r wirklich wichtige Dinge die sich NIE ?ndern sollen benutzt werden. Zb. ein Sigleton oder eine Factory. Beides ist aber in PHP wegen seiner einmaligen Ausf?hrung ?u?erst fragw?rdig.
Meiner Meinung nach eignet sich das PHP Class/OOP Model objektiv gesehen lediglich f?r Datenobjekte die man sp?ter serialisiert.
Beitrag ge?ndert am 28.08.2006 11:10 von evil-devil -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage