Ankündigung

Einklappen
Keine Ankündigung bisher.

Linux-sicherer Autoloader

Einklappen

Neue Werbung 2019

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

  • #16
    Ist auch ein etwas spezieller Anwendungsfall, würde ich sagen. Ich kann mich nicht erinnern, jemals irgendwo spl_autoload() in Verwendung gesehen zu haben.

    Und eine simple Variante ohne Composer wäre zum Beispiel:

    Code:
    spl_autoload_register(function ($className) {
        include __DIR__ . '/src/' . str_replace('\\', '/', $className) . '.php';
    });
    
    // Versucht, "src/Foo/Bar.php" einzubinden
    new Foo\Bar();
    Das wird es auch tun, wenn keine externen Komponenten oder dergleichen genutzt werden. Composer kann aber nie schaden.

    Kommentar


    • #17
      Eine kleine Frage dazu: Weiss jemand eine Möglichkeit wie ich, dass, wenn eine Klasse aus irgendeinem Grund z.B. falscher Pfad angegeben, nicht geladen werden kann, eine Exception oder eigene Fehlermeldung ausgeben kann, anstatt vom fatal error: class not found... heimgesucht zu werden.

      Kommentar


      • #18
        Unmöglich. Außer, du nutzt einen einzigen (eigenen) Autoloader, wobei ich selbst da nicht weiß ob die Exception durchgereicht wird da das Autoloading nativ die Autoloader abklappert bis die Klasse existiert (oder eben nicht). Und was da nativ mit der Exception passiert weiß ich nicht, müsstest du ausprobieren.
        [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

        Kommentar


        • #19
          Kann mir noch jemand helfen?

          Kommentar


          • #20
            Wobei?
            [COLOR="#F5F5FF"]--[/COLOR]
            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
            [COLOR="#F5F5FF"]
            --[/COLOR]

            Kommentar


            • #21
              Sorry, bin noch beim Exception Handling im Autoloader. Er meinte mit einem eigens definierten könnte es gehen, bin aber noch auf dem Holzweg.

              Kommentar


              • #22
                PHP-Code:
                <?php
                class ClassNotFoundException extends Exception{}
                spl_autoload_register(function($name){throw new ClassNotFoundException("Could not load class '" $name "'");});
                try{
                    new 
                does\not\exist;
                }catch(
                ClassNotFoundException $e){
                    echo 
                $e->getMessage();
                }
                Scheint zu funktionieren. Frage mich nur wozu das ganze. Wenn du vergisst Klassen/Dateien hochzuladen kannst du mit PHP auch nicht mehr viel machen.
                [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                Kommentar


                • #23
                  Er meinte mit einem eigens definierten könnte es gehen, bin aber noch auf dem Holzweg.
                  Die Betonung lag auf
                  du nutzt einen einzigen
                  Das Wesen der unabhängigen Autoloader ist ja, dass sie als Stack aufgebaut sind und findet ein Handler die angeforderte Klasse nicht, wird der nächste bemüht. Folgerichtig kann ein Autoloader gar nicht wissen, ob eine Klasse „registriert“ ist. Es sei denn er verwaltet alle Autoloadings. Was dem Fortschritt der SPL gegenüber dem alten _autoload()-Prinzip widerspricht.
                  [COLOR="#F5F5FF"]--[/COLOR]
                  [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                  [COLOR="#F5F5FF"]
                  --[/COLOR]

                  Kommentar


                  • #24
                    So gesehen hätte ich den Autoloader-Code in #16 so schreiben müssen, damit er bei Misserfolg des Includes keine Notice verursacht.

                    PHP-Code:
                    spl_autoload_register(function ($className) {
                        
                    $path __DIR__ '/src/' str_replace('\\''/'$className) . '.php';

                        if (
                    is_readable($path)) {
                            include 
                    $path;
                        }
                    }); 
                    So wäre der sauber stackbar. PHP geht halt so vor: „Wenn eine Klasse nicht existiert, rufe solange registrierte Autoloader-Callbacks auf, bis die Klasse existiert.“ Kann ein Callback mit einem Klassennamen nichts anfangen, sollte es den einfach weiter durchrutschen lassen – also gar nichts tun.

                    Ich hatte mir das in #16 geschenkt, weil ich eben in jedem Fall, der nicht völlig trivial ist, auf Composer setzen würde.

                    Kommentar

                    Lädt...
                    X