[gelöst] PHP Autoload + GLOBAL

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [gelöst] PHP Autoload + GLOBAL

    Hallo,

    mir ist letztens ein Problem untergekommen, das anscheinend je nach PHP Konfiguration kommt oder nicht:

    Eine Datei/Klasse wird über __autoload geladen.

    Die Datei hat eine Switchanweisung, das je nach Einstellung eine von 2 Klassen lädt (die beide natürlich gleich heißen).

    Das Problem ist nun:
    Bei der Switchanweisung ist eine Variable, die bei __autoload nicht global ist --> müsste generell einen Fehler auswerfen!

    Bei einem Rechner tut es dies auch, nur bei dem anderen nicht.

    Hat jemand eine Idee, was das für eine Einstellung ist?

    error_reporting(E_ALL); <-- ist bei beidem so eingestellt.

  • #2
    Die Datei hat eine Switchanweisung, das je nach Einstellung eine von 2 Klassen lädt (die beide natürlich gleich heißen).
    Wozu soll das denn gut sein?
    Hört sich gar nicht sinnvoll an.
    Wir werden alle sterben

    Kommentar


    • #3
      Hat zwar nicht's mit dem Fehler zu tun, macht aber durchaus Sinn ;-)

      Wenn man eine Software mehrfach einsetzt und etwas ändert, das aber nicht jeder Kunde sofort haben soll/darf, dann kann man das so steuern.

      Gibt aber auch noch andere Anwendungsfälle, gibt dafür glaube ich sogar einen Design Pattern?!

      Kommentar


      • #4
        Zitat von ThaDafinser Beitrag anzeigen
        Hat zwar nicht's mit dem Fehler zu tun, macht aber durchaus Sinn ;-)

        Wenn man eine Software mehrfach einsetzt und etwas ändert, das aber nicht jeder Kunde sofort haben soll/darf, dann kann man das so steuern.
        Schon mal was von Branches gehört?

        Kommentar


        • #5
          Ich erwarte eigentlich eine Antwort auf meine eigentliche Frage und nicht auf Fragen ob ich etwas kenne.

          Aber für dich:
          JA!
          Und hast du schonmal was gehört, das man mehrere Kunden auf einer Software laufen lassen kann, d.h. auf einem Branch?
          Stichwort: Mandanten?

          Kommentar


          • #6
            Bei den Einstellungen hat sich seit 10(?) Jahren nix geändert.
            PHP-Code:
            error_reporting(-1);
            ini_set('display_errors'TRUE);

            echo 
            $test// wirft Meldung 
            Wir werden alle sterben

            Kommentar


            • #7
              Hallo,

              Zitat von ThaDafinser Beitrag anzeigen
              Bei der Switchanweisung ist eine Variable, die bei __autoload nicht global ist --> müsste generell einen Fehler auswerfen!

              Bei einem Rechner tut es dies auch, nur bei dem anderen nicht.
              mal abgesehen von Fehlermeldung oder nicht - wenn die Variable nicht als global deklariert ist, steht sie in der __autoload-Funktion in beiden Fällen nicht zur Verfügung, also dürfte es gar nicht funktionieren.

              Warum deklarierst du sie nicht als global oder findest einen saubereren Weg, diese Entscheidung im Code zu treffen?

              Kannst du den __autoload-Code mal posten, damit man eine konkretere Vorstellung bekommt?

              Gruß,

              Amica
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                PHP-Code:
                function __autoload($class) {
                    global 
                $config$applMessage;
                    
                    
                $pathClass explode '_'$class );
                    if (
                sizeof $pathClass ) > 1) {
                        
                $pathClass implode('/',$pathClass);
                        require_once(
                $pathClass.'.php');
                    } else {
                        require_once (
                SYF_PATH_CLASS '/' $class '.php');
                    }
                    
                    
                // Check to see if the include declared the class
                    
                if (! class_exists $classfalse )) {
                        
                $applMessage->err "Unable to load class: $class);
                        
                trigger_error "Unable to load class: $class"E_USER_WARNING );
                    }

                Ruft dies auf:
                PHP-Code:
                global $a;
                if ((isset ( 
                $config->newListObjekt ) && $config->newListObjekt == true) || $a->getUsername()=='blubb)
                    require_once ('
                Classe1.php');
                else
                    require_once ('
                Classe2.php'); 

                Kommentar


                • #9
                  Wie passen die beiden Schnipsel zusammen? Haben die überhaupt etwas miteinander zu tun?

                  $config wird in __autoload() gar nicht verwendet und wenn du schon mit trigger_error() arbeitest, dann brauchst du $applMessage auch nicht unbedingt bzw. kannst es als error_handler setzen.

                  Btw: Entweder newListObject oder neuesListenObjekt.
                  Zuletzt geändert von onemorenerd; 02.11.2009, 17:04.

                  Kommentar


                  • #10
                    Ja die passen zusammen....nur den ganze Programmablauf posten, würde alles ein wenig sprengen.....

                    Irgendwo ruft man die Klasse auf --> __autoload und die geht zum nächsten Schnipsel.

                    $config wird beim zweiten Schnipsel gebraucht, müsste von dem her auch dort sein.

                    Deutsch/Englisch mischung sorry ;-)


                    Nun aber zurück zu meiner Frage:
                    Was ist die passende PHP Einstellung zu meinem Problem?

                    Ich hätte jetzt gern mal dazu eine Antwort nicht zu allem anderen ;-)

                    Kommentar


                    • #11
                      Wie lautet denn die genaue Fehlermeldung? Da das fehlende global lediglich eine E_NOTICE verursachen dürfte, die in beiden Fällen kommen müsste, wenn - wie du sagst - das Error-Reporting bei beiden auf E_ALL steht, kann ich den Unterschied nicht nachvollziehen. Hast du nur in der php.ini nachgesehen oder auch mal mittels phpinfo? Vielleicht sind die php.ini-Einstellungen in beiden Fällen gleich, aber nicht die lokalen?

                      Wenn deine Frage bisher nicht beantwortete wurde, liegt das allein daran, dass dieses Verhalten sich mit den gegebenen Informationen nicht nachvollziehen lässt.
                      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                      Super, danke!
                      [/COLOR]

                      Kommentar


                      • #12
                        Wenn dein zweiter Schnipsel $a importiert, kann er sich auch $config selbst besorgen.

                        Das gesamte Konzept ist wirklich sehr schräg. Wenn du nicht mit Branches arbeiten kannst, wie wäre es dann mit einer Factory?

                        Kommentar


                        • #13
                          :-/

                          ja das mit $a und $config ist klar!
                          $config wird beim zweiten Schnipsel gebraucht, müsste von dem her auch dort sein.
                          Wir arbeiten mit Branches...nur kann es sein, wie geschrieben das auf einer Software dann 2 Kunden mit 2 verschiedenen Anforderungen arbeiten!

                          @AmicaNotris:
                          Undefined use of Variable

                          Kommentar


                          • #14
                            Zitat von AmicaNoctis Beitrag anzeigen
                            Wie lautet denn die genaue Fehlermeldung?
                            Zitat von ThaDafinser Beitrag anzeigen
                            Undefined use of Variable
                            Sowas gibt es nicht. Ist es so schwer, mal eine Fehlermeldung komplett zu kopieren?

                            Trotzdem sind da definitiv die Error-Reporting-Einstellungen der beiden Server unterschiedlich. Der eine ignoriert E_NOTICE, der andere nicht.

                            Zitat von ThaDafinser
                            Ich erwarte eigentlich eine Antwort auf meine eigentliche Frage
                            Dann solltest du aber auch mal die gestellten Fragen beantworten, sonst kann das nichts werden.
                            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                            Super, danke!
                            [/COLOR]

                            Kommentar


                            • #15
                              Zitat von ThaDafinser Beitrag anzeigen
                              Wir arbeiten mit Branches...nur kann es sein, wie geschrieben das auf einer Software dann 2 Kunden mit 2 verschiedenen Anforderungen arbeiten!
                              Genau das ist der Grund zum Branchen. Wenn ich eine Software habe und dann ein Kunde spezielle Anpassungen bekommen soll, mache ich einen Branch/Fork des ganzen Projekts. Du machst den Branch zur Laufzeit. Ich will mir gar nicht ausmalen wie sich dein Code entwickelt, wenn dein Kundenstamm wächst oder wie deine Unit Tests aussehen. Aber wenn du meinst das ist schon in Ordnung so, dann mach halt weiter wie gehabt.

                              Kommentar

                              Lädt...
                              X