Ankündigung

Einklappen
Keine Ankündigung bisher.

Objekt instantiieren im Konstruktor vs. Methode

Einklappen

Neue Werbung 2019

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

  • Objekt instantiieren im Konstruktor vs. Methode

    Hi

    wieso geht das:

    PHP-Code:
    private $DBC;
        
        public function 
    __construct($file_path) {
        
    $this->DBC = new APP_MYSQLI_CONNECTOR('full_rights'); 
    aber nicht

    PHP-Code:
    public function irgendwas() {
    $this->DBC = new APP_MYSQLI_CONNECTOR('full_rights');

    wenn die Klasse per autoload aus einem per absoluten Pfad beschriebenen Verzeichnis geladen werden soll.

    Fehlermeldung: class bla not found

  • #2
    Blöde Frage:
    mich machen die großen Buchstaben irre. APP_MYSQLI_CONNECTOR ist also keine Konstante (da nutzt man meist große Buchstaben) sondern ein realer Klassenbezeichner und das Klassenscript heißt dann APP_MYSQLI_CONNECTOR.php?

    Kommentar


    • #3
      per autoload aus einem per absoluten Pfad beschriebenen Verzeichnis geladen werden soll.

      Kommentar


      • #4
        Zitat von meikel Beitrag anzeigen
        Blöde Frage:
        mich machen die großen Buchstaben irre. APP_MYSQLI_CONNECTOR ist also keine Konstante (da nutzt man meist große Buchstaben) sondern ein realer Klassenbezeichner und das Klassenscript heißt dann APP_MYSQLI_CONNECTOR.php?
        Ich benutze die Großbuchstaben für Konstanten, Klassen und Objekte.

        Deine Schlussfolgerungen sind aber soweit richtig!

        Kommentar


        • #5
          und das Klassenscript heißt dann APP_MYSQLI_CONNECTOR.php?
          Das könnte schon ein Problem sein beim php5-Autloader (spl).

          file_extensions

          By default it checks all include paths to contain filenames built up by the lowercase class name appended by the filename extensions .inc and .php.

          Kommentar


          • #6
            Zitat von nikosch Beitrag anzeigen
            Das könnte schon ein Problem sein beim php5-Autloader (spl).
            O.K., die Instanzierung klappt im Konstruktor, aber nicht in einer normalen Methode. Jetzt deutest Du an, dass das wohl irgendwie an der Schreibweise liegt, oder was?

            Im php.net autoload manual habe ich hierzu nichts gefunden.

            Kannst Du da evtl. hinreichend konkret werden?

            Kommentar


            • #7
              nikosch müsste den richtigen Hinweis gegeben haben. Wieso registrierst du nicht eine eigene autoload-Funktion?

              Kommentar


              • #8
                O.K., die Instanzierung klappt im Konstruktor, aber nicht in einer normalen Methode.
                Kann ich ehrlich gesagt nicht glauben

                Kommentar


                • #9
                  Fehlermeldung: class bla not found
                  das hilft nicht wirklich weiter.
                  poste mal bitte den fehlertext bzw. fehlercode

                  Kommentar


                  • #10
                    Zitat von nikosch Beitrag anzeigen
                    Kann ich ehrlich gesagt nicht glauben
                    Das ist aber genau das Thema. Siehe #1.

                    Habe es gerade nochmal nachvollzogen. Schiebe ich die Instanzierung in den Konstruktor, wird die Klasse(ndatei) gefunden, packe ich sie in die Methode, die eigentlich mit der Instanz arbeiten soll, heißt es
                    Fatal error: Class 'APP_MYSQLI_CONNECTOR' not found

                    Kommentar


                    • #11
                      Zitat von drsoong Beitrag anzeigen
                      Das ist aber genau das Thema. Siehe #1.
                      Da muß es eine (simple) andere Ursache geben. Ginge das, was bei Dir nicht funktioniert, generell nicht, würden 80% meiner Scripte nicht mehr funktionieren.

                      Kommentar


                      • #12
                        Probier mal

                        a) irgendwas() aus dem Konstruktor aufzurufen.
                        b) irgendwas() public zu setzen und direkt nach Instanziierung aufzurufen
                        c) irgendwas() public zu setzen

                        [edit] Streich c) , ist ja schon

                        Kommentar


                        • #13
                          Zitat von nikosch Beitrag anzeigen
                          Probier mal

                          a) irgendwas() aus dem Konstruktor aufzurufen.
                          b) irgendwas() public zu setzen und direkt nach Instanziierung aufzurufen
                          c) irgendwas() public zu setzen

                          [edit] Streich c) , ist ja schon
                          a) Klappt!
                          b) Gleiche Fehlermeldung!
                          c) gestrichen

                          Und nu?

                          Kommentar


                          • #14
                            Zitat von drsoong Beitrag anzeigen
                            a) Klappt!
                            b) Gleiche Fehlermeldung!
                            c) gestrichen

                            Und nu?
                            Genauere Analyse bitte.
                            http://mod.php.developer.vc/test/25/

                            PHP-Code:
                            <?php

                            class test1 {

                            }

                            class 
                            test2 {

                            }

                            class 
                            test {
                                protected 
                            $test1 null;
                                protected 
                            $test2 null;

                                public function 
                            __construct(){
                                
                            $this->test1 = new test1;
                                echo 
                            'constructor'BR;
                                }

                                public function 
                            testMethode(){
                                
                            $this->test2 = new test2;
                                echo 
                            'testMethode';
                                }
                            }

                            $iTest = new test;
                            $iTest->testMethode();

                            ?>
                            Ausgabe:
                            Code:
                            constructor
                            testMethode
                            Klappert.

                            D. Also liefere Deinen Autoloader, der ja offensichtlich für Dein Problem zuständig ist.

                            btw: nutze in dem vhost PHP 5.3.9 SAPI: apache2handler

                            Kommentar


                            • #15
                              Also liefere Deinen Autoloader, der ja offensichtlich für Dein Problem zuständig ist.
                              PHP-Code:
                              function __autoload($classname) {
                                  
                                  
                              $class_file strtoupper(substr($classname,0,3)) == "APP" APP_CLASSES_FOLDER.$classname.".php" FW_CLASSES_FOLDER.$classname.".php";
                                  
                                  if (
                              file_exists($class_file)) {
                                      require_once 
                              $class_file;
                                  } else {
                                     
                              //finalise later e. g. with error_log entry
                                     
                                    
                              }
                                  
                               } 

                              Kommentar

                              Lädt...
                              X