spl_autoload
am 27.11.2006 18:58:17 von Thomas Mlynarczyk
Hallo,
Ich habe mal ein bißchen mit den spl_autoload-Funktionen experimentiert, und
bin auf einige Fragen gestoßen:
1) In welcher Reihenfolge probiert spl_autoload() eigentlich die einzelnen
Pfad-/Erweiterungskombinationen durch? Laut meinen Tests wird "myclass.php"
stets vor "myclass.mod.php" gefunden - unabhängig von der bei include_path
oder den extensions angegebenen Reihenfolge. Wieso?
2) Welche Funktionen versuchen überhaupt, Klassen per Autoload zu laden?
spl_autoload macht es z.B. für is_subclass_of (beide(!) Argumente),
wohingegen ich gelesen habe, daß __autoload es nicht mehr für is_subclass_of
macht.
3) spl_autoload schmeißt eine LogicException, wenn die Klasse nicht gefunden
wird, was ich z.B. bei class_exists() unsinnig finde. Kann ich dieses
Verhalten irgendwie beeinflussen?
4) Ist __autoload dank spl_autoload nunmehr überflüssig geworden?
Gruß,
Thomas
Re: spl_autoload
am 28.11.2006 21:56:20 von Frank Schenk
Thomas Mlynarczyk schrieb:
> Hallo,
>
> Ich habe mal ein bißchen mit den spl_autoload-Funktionen experimentiert, und
> bin auf einige Fragen gestoßen:
http://www.php.net/manual/en/ref.spl.php
http://www.php.net/~helly/php/ext/spl/
gruß, Frank
Re: spl_autoload
am 29.11.2006 12:12:10 von Thomas Mlynarczyk
Also sprach Frank Schenk:
[1) Reihenfolge des Durchprobierens bei spl_autoload]
[2) Funktionen, die Autoloading "bewirken"]
[3) Unterdrücken der LogicException bei class_exists() u.a.]
[4) __autoload dank spl_* überflüssig?]
> http://www.php.net/manual/en/ref.spl.php
Habe ich vor meinem Posting gelesen. Ich habe dort aber leider keine
Antworten auf meine oben gestellten Fragen gefunden.
> http://www.php.net/~helly/php/ext/spl/
Hier wird bzgl. Punkt 3) lediglich die Existenz eines zweiten Parameters
("throw") für spl_autoload_register() erwähnt, mit dem man - angeblich -
zwischen LogicException und Error wählen kann. Ich habe das mal getestet,
aber keinen Unterschied festgestellt - ich bekomme in jedem Fall eine
LogicException. Davon abgesehen, will ich bei class_exists() aber auch
keinen Error haben - sondern einfach nur ein schlichtes "false" als
Rückgabewert.
Gruß,
Thomas