PHP Class - finde meinen Fehler nicht !

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PHP Class - finde meinen Fehler nicht !

    servus community

    Ich habe eine Klasse erstellt und will sichergehen, dass diese IMMER in $MyVariable zu finden ist.
    Daher habe ich den Konstruktor so geschrieben, dass :

    Quellcode

    1. class MyClass
    2. {
    3. function MyClass($MyObject = NULL)
    4. {
    5. global $MyVariable [, $$MyObject];
    6. if(is_null($MyObject) || get_class($$MyObject) != 'MyClass')
    7. {
    8. $MyVariable = new MyClass('MyVariable');
    9. }
    10. else
    11. {
    12. $MyVariable->CallAnnotherFunction();
    13. }
    14. }
    15. }
    Alles anzeigen

    das [, $$MyObject] habe ich in meinem Code nicht drin, da $MyObject nur dann wichtig wäre, wenn 'MyVariable' drin steht, und dann ergibt $$MyObject das selbe wie $MyVariable.
    Wenn ich das ganze so schreibe bekomme ich einen loop. Bitte helft mir mal das offensichtliche, dass ich übersehe zu finden
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll
  • auch

    Quellcode

    1. class MyClass
    2. {
    3. function MyClass()
    4. {
    5. global $MyVariable;
    6. if(get_class($MyVariable)!='MyClass')
    7. {
    8. $MyVariable = new MyClass;
    9. }
    10. else
    11. {
    12. $MyClass->CallAnotherFunction();
    13. }
    14. }
    15. }
    Alles anzeigen


    ended auch in einem loop :(
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll
  • Hi und willkommen,
    ich verstehe zwar ungefähr, was dein Code machen soll. Aber was ist dein Ziel, was du wirklich erreichen willst?
    Globale Variablen sind allgemein immer der falsche Ansatz.

    Schau dir mal folgendes Konstrukt an - vielleicht ist es eher das was du erreichen willst. Nämlich, dass es von der Klasse nur eine Instanz geben kann, und du überall auf sie zugreifen kannst:

    Quellcode

    1. class MyClass {
    2. protected static $instance = null;
    3. // private constructor, typical for singletons
    4. private function MyClass() {
    5. }
    6. public static function getInstance() {
    7. if(self::$instance === null) {
    8. self::$instance = new self();
    9. }
    10. return self::$instance;
    11. }
    12. }
    Alles anzeigen


    Beispiel:

    Quellcode

    1. $x = MyClass::getInstance();
    2. $x->y = 5;
    3. $z = MyClass::getInstance();
    4. echo $z->y;


    Mehr Informationen zum Singleton findest du im Buch:
    Bzw in der Online Ausgabe davon: professionelle-softwareentwick…l-patterns.singleton.html
  • Es geht in etwa dahin wo ich hin möchte.

    erstmal vorweg ich arbeite in php4 *duck* aber auch da habe ich (google sei dank) eine singleton class/function gefunden.

    Nur die hilft mir nicht so wirklich weiter.
    Ich habe eine klasse (MyClass) aus dieser klasse heraus erstelle ich über eine function neue klassen

    Quellcode

    1. class MyClass
    2. {
    3. function newclass($filename)
    4. {
    5. require($filename.'php');
    6. global $filename;
    7. $filename = new $filename;
    8. $filename->IrgendeineFunction();
    9. }
    10. }

    wenn ich jetzt in dieser neuen Klasse auf bestimmte methoden oder eigenschaften der alten klasse zugreifen will mache ich das über

    Quellcode

    1. ...
    2. global $MyClass;
    3. $variable = $MyClass->DieseVariable;
    4. $MyClass->DieFunctionDieIchWill();
    5. ...

    leider habe ich dafür noch keine geeignete andere idee :(. damit das ganze aber auch funktioniert MUSS ich irgendwie sicherstellen, dass $MyClass auch die Instanz ist die ich haben will

    Quellcode

    1. $FalscheMyClass = new Myclass;
    2. $FalscheMyClass->newclass('filename');

    führt sonst unweigerlich zu FATAL error weil $MyClass kein gültiges (oder in meinem Falle nicht DAS gültige) Objekt ist.

    Aber ich denke mit etwas sauberem aber unschönen Code sollte ich das jetzt umgehen können.

    Alternativ könnte ich auch das Singelton mit einem static array anlegen und alle meine Klassen darin ablegen. dafür müsste ich in der singleton klasse nur methoden einbauen mit denen ich sicherstellen kann, dass die integrierten klassen in diesem singleton arbeiten um sowas zu umgehen.

    Quellcode

    1. $classa =& singleton::getinstance('klassenname');
    2. $classb = new singleton;
    3. $classb->getinstance('klassenname');


    ob und wie ich das ganze dann mit einer singletonklasse umsetzen kann muss ich noch rausfinden.

    ohne singleton habe ich das ganze mittlerweile so gelöst :

    Quellcode

    1. Class MyClass
    2. function MyFunction()
    3. {
    4. global $MyVariable;
    5. if(get_class($MyVariable) != 'MyClass')
    6. {
    7. $MyVariable= new MyClass();
    8. $MyVariable->MyFunction();
    9. return false;
    10. }
    11. else
    12. {
    13. ...
    14. }
    15. }
    16. }
    Alles anzeigen



    P.S.

    gibt es in php 4 /5 / 6 eine möglichkeit um herauszubekommen welche variable eine klasse enthält ?

    Quellcode

    1. $testvar = new Classname;
    2. $classvar = XXXXXXXXXXX($testvar);
    3. echo $classvar; // Ergebniss soll sein 'testvar'
    4. ...
    5. innerhalb der klasse
    6. ...
    7. $classvar = XXXXXXXXXXX($this);
    8. echo $classvar; // Ergebniss soll sein 'testvar'


    man o man ... viele viele fragen :)
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Tigerente ()

  • gibt es in php 4 /5 / 6 eine möglichkeit um herauszubekommen welche variable eine klasse enthält ?

    Eine Klasse oder eine Instanz?
    Um die Eigenschaften einer Klasse zu laden brauchst die Reflection API, die gibts aber erst ab PHP5.

    Aber es gibt es wirklich keinen Grund PHP4 zu verwenden oder in irgendeiner Form zu erlernen!

    Hier nochmal eine Registry mit Singletons Features wie man sie vermutlich auch in php4 verwenden kann:

    Quellcode

    1. class MyClass {
    2. static $instances = array();
    3. // private constructor, typical for singletons
    4. function MyClass() {
    5. }
    6. static function getInstance($filename) {
    7. if(!isset(self::$instances[$filename])) {
    8. require($filename.'php');
    9. self::$instances[$filename] = new $filename();
    10. self::$instances[$filename]->IrgendeineFunction();
    11. }
    12. return self::$instances[$filename];
    13. }
    14. }
    Alles anzeigen
  • ich meinte die variable in der das objekt ist ...

    $testvar = new myclass;

    also als ergebnis bräuchte ich "testvar" :)
    aber hat sich insofern erledigt, dass ich einen anderen weg gefunden habe.
    ich nutze jetzt eine singleton class mit der ich alle meine objekte anlege.
    dein ansatz für das php4 singleton ist gut, aber funzt net, da static in php4 nur in funktionen/methoden arbeitet.

    und php4 nutze ich deshalb, weil ich so sehr viel mehr über php lerne als wenn ich "nur" in php5 code.
    mir geht es halt darum mein projekt so zu coden, dass es (theoretisch) auf jeder php plattform ab 4.4 läuft.
    ich habe z.b. nur auf meinen localhosts die möglichkeit mit htaccess zu arbeiten, da mir mein (derzeitiger) isp htaccess und modrewrite nicht erlaubt.

    btw alle achtung zu easy-coding. ist ein echt gutes portal:) werde mich hier wohl häufiger mal aufhalten. evtl werde ich ja auch irgendwann mal eine richtig gute idee für eure projekte auspacken können und diese dann (in aktuellem php) umsetzen
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll
  • Hehe, danke fürs Lob.

    Aber nochmal zur Betonung:
    Es sind die BWLer die entscheiden Projekte in veralteten Programmiersprachen zu schreiben.
    Als Entwickler will man in der Regel immer das neuste haben.

    Und im Falle vom 7 Jahre alten PHP4 hat das auch durchaus seine Berechtigung.
    php4 hat nicht nur weniger Funktionen, sondern ist auch langsamer.
    Bist du abwärtskompatibel, bist du also langsam.

    Ich würde als gerade als Neueinsteiger keine Zeit mit PHP4 verschwenden.
  • mir geht es derzeit noch nicht so um performance. mir geht es auch nicht darum, das (btw vom beruf her falle ich echt in die schiene der bwl'er) ich unbedingt abwärtskompatibel sein muss.
    ich versuche derzeit erstmal über lerning by doing ein framework in php zu erstellen (erstmal halt php4 weil meine bücher alles php4 bücher sind - naja fast alle :) ... meine Bibel ist Grundlagen und Lösungen PHP (ganz alt und noch php3)). wenn ich mir ein eigenes (möglichst umständliches) framework erstellt habe fällt mir die umsetzung in php5 sehr viel leichter (auch wenn das oop in php5 teilweise anders funzt).

    wie bereits erwähnt mag ich halt erstmal das ganze in php4 :)

    nur am rande erwähnt ... in php4 läuft require_once nicht ganz reibungslos. und über die function die ich mir dafür erstellt habe (mein requireonce funzt man beachte den fehlenden _ ) fiel es mir leichter mich (wieder) in php einzufinden. ich probiere halt viel aus (sogar wenn was funzt versuche ich es zu optimieren) und dadurch lerne ich mit php wieder besser umzugehen :)

    naja heute abend wird erstmal mein dispatcher fertiggestellt (der ist übrigens "etwas" innovativ *denke ich*)

    über test.de/seite/category/untercategorie/diesebestimmteseite komme ich halt auf "diesebestimmteseite" ... aber auch über test.de/seite/diesebestimmteseite :)
    und sollte es mehrere seiten geben auf die die uri passt wird (später beabsichtigt) eine "search" innerhalb der seite mit der uri als suchbegriff aufgerufen. (das geht aber nur mit htaccess und das werde ich wohl auch erst in php5 realisieren wollen). Links innerhalb der seite sind natürlich dann eindeutig und SEO konform
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll
  • da sich die fragestellung vorerst erledigt hat marke ich das thema mal als erledigt
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll
  • Du solltest deine PHP4 und 3 8| Bücher lieber zum anfeuern deines Kamins oder zum füllen des Alpapierkontainers benutzen.

    Du scheinst dich ja sehr mit OOP auseinanderzusetzen und denn kann ich dir genau wie d0nut es getan hat den Tipp geben alles <php5 sofort zu vergessen.


    Zum Thema PHP3 ...
    Version 4.0 Beta 1 ->19-Jul-1999
    Quelle: php.net/ChangeLog-4.php

    ... und PHP4 ...
    Version 5.0.0 Beta 1 -> 29-Jun-2003
    Quelle: php.net/ChangeLog-5.php


    auch wenn das oop in php5 teilweise anders funzt


    Erst mit PHP5 wurde das Klassenkonzept einigermaßen vernünftig implementiert, so das "anders" sehr nett formuliert ist ;) de.wikipedia.org/wiki/Objektorientierte_Programmierung
    Alles andere versaut nur den Stil so, dass man meist viele Schwierigkeiten beim erlernen einer neuen Sprache hat. (siehe global)
  • naja heute abend wird erstmal mein dispatcher fertiggestellt (der ist übrigens "etwas" innovativ *denke ich*)


    Da ich ja hier bin um etwas dazuzulernen: Was ist ein Dispatcher, oder eher was meinst du damit? Das was ich unter dem Begriff verstehe ist nicht wirklich in einem PHP-Framework umsetzbar.
    Danke im Voraus
  • also kurz gefasst (hoffe das passt dann auch)

    ist ein URL-dispatcher ein (php)script welches anhand bestimmter werte (z.b die request uri) für eine aufgerufene Internetseite den entsprechenden controller (in einem mvc) ermittelt
    Bei aufruf der internetseite z.b.
    domain.com/
    domain.com/startseite/
    domain.com/news/2009/dezember/
    wird immer das script dispatch.php aufgerufen und ermittelt anhand der request_uri ('/' oder '/starseite/' oder '/news/2009/dezember/') welcher controller ausgeführt wird.
    der controller seinerseits ermittelt die nötigen templates und gibt diese an den browser aus.

    das verstehe ich unter einem dispatcher :)

    ein schönes tutorial für einen einfachen php dispatcher (english) kenne ich dazu dann auch noch :)
    samuelsjoberg.com/archive/2007/01/url-dispatcher

    hoffe das ganze ist einigermaßen richtig (ansonsten greift sicher der d0nut helfend ein) :)

    lg
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll
  • google doch mal nach "php url dispatcher" da findest du viel dazu (laso dem was ich unter einem dispatcher verstehe) :D
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll