namespaces
Mijn vraag is nu... moet mijn autoloader dat ook kunnen? Heb jij dat wel eens nodig gehad? Of heb je altijd kunnen volstaan met uitsluitend de Vendor Naam?
Daarnaast heb ik nog een andere vraag. Mag één autoloader verantwoordelijk zijn voor meerdere libraries? Bijv.
Ozzie PHP op 14/11/2013 13:07:11:
Mijn vraag is nu... moet mijn autoloader dat ook kunnen? Heb jij dat wel eens nodig gehad? Of heb je altijd kunnen volstaan met uitsluitend de Vendor Naam?
Dat hangt ervan af. In productie gebruik je liefst nooit iets dat niet gereed is voor productie. Een package heeft dan meestal wel een of andere vorm van class loading aan boord (met of zonder namespaces) waarmee het de eigen klassen kan laden.
Je kunt dan de meest exotische oplossingen aantreffen. PHP-ontwikkelaars houden er nogal eens een eigenzinnige interpretatie van "handig" op na.
Maar soms moet je toch iets herschrijven en dan kun je ook de autoloader aanpassen. Het heeft er, op dit moment, ook erg mee te maken dat we in een overgangsfase zitten. Veel PHP-code gebruikt nog geen namespaces, hetzij omdat het oudere code is, hetzij omdat de code compatibel moet zijn met oudere versies van PHP.
Ozzie PHP op 14/11/2013 13:07:11:
Daarnaast heb ik nog een andere vraag. Mag één autoloader verantwoordelijk zijn voor meerdere libraries?
Eigenlijk hetzelfde antwoord: ja. Het draait er immers om dat je via de SPL-stack laat weten waar de gebruikte namespaces en hun klassen te halen zijn. Dat doe je vaak pas op applicatieniveau. Bijvoorbeeld geen PDF nodig? Dan ook geen PDF-framework laden.
Ik zou in jouw geval twee autoloaders gebruiken. Een kleine en snelle die je heel dicht op je framework kunt programmeren (liefst zelfs met absolute paden: véél sneller) en een meer algemene zoals de SplClassLoader voor de rest:
- ../lib/SplClassLoader.php kan alles in /lib/ laden;
- ../lib/Ozzie/AutoLoader.php kan de Ozzie-namespace laden.
>> - ../lib/SplClassLoader.php kan alles in /lib/ laden;
Geef jij dan niet aan welke namespace waar staat, maar ga je gewoon uit van 1 grote library als het ware?
Dus als de namespace PosstNl is dan kijkt ie automatisch in /lib/PostNl. Bedoel je dat?