[OOP] autoloading, ontbrekende classes
Ola mensen,
Ik zit me iets af te vragen. Op dit moment heb ik geen beveiliging in mijn autoloader zitten. Ik ga niet met is_file() testen of het bestand bestaat, maar ik require het bestand direct.
In feite moet een class(bestand) altijd bestaan, maar zoals hier op het forum al eens eerder is gezegd, kan het zijn dat er (door de hostingpartij) een back-up wordt teruggeplaatst waardoor een bestand ineens "verdwijnt".
Dus nu ben ik wel nieuwsgierig hoe ik hier mee moet omgaan. Ik zat dus te denken om te testen of 'require' een true of false oplevert en als het false is een exception te gooien, maar tot mijn verbazing geeft require niks terug. Hoe moet ik dan weten of het requiren van het bestand is gelukt?
Hoe gaan jullie hier mee om?
Ik zit me iets af te vragen. Op dit moment heb ik geen beveiliging in mijn autoloader zitten. Ik ga niet met is_file() testen of het bestand bestaat, maar ik require het bestand direct.
In feite moet een class(bestand) altijd bestaan, maar zoals hier op het forum al eens eerder is gezegd, kan het zijn dat er (door de hostingpartij) een back-up wordt teruggeplaatst waardoor een bestand ineens "verdwijnt".
Dus nu ben ik wel nieuwsgierig hoe ik hier mee moet omgaan. Ik zat dus te denken om te testen of 'require' een true of false oplevert en als het false is een exception te gooien, maar tot mijn verbazing geeft require niks terug. Hoe moet ik dan weten of het requiren van het bestand is gelukt?
Hoe gaan jullie hier mee om?
require resulteert in een fatal error als het bestand niet bestaat
Ja correct. Maar, correct me if I'm wrong, dat betekent dus dat als ik GEEN controle uitvoer, en het bestand niet bestaat het script simpelweg stopt. Toch? Dit betekent dus ook dat de fout niet wordt gelogd (tenminste niet door mijn eigen logger) en dat mijn website dus dagenlang plat kan liggen zonder dat ik dit zelf in de gaten heb. Correct?
Als bovenstaande juist is, wat is dan de handigste manier om de controle uit te voeren vraag ik me af? Ik kan wel alles gaan testen met is_file() maar dan zit je tientallen keren zo'n controle uit te voeren die in 99,999% van de gevallen overbodig is omdat deze altijd zal resulteren in true. Is er nog een andere manier om te controleren, of is dit de enige optie?
Als bovenstaande juist is, wat is dan de handigste manier om de controle uit te voeren vraag ik me af? Ik kan wel alles gaan testen met is_file() maar dan zit je tientallen keren zo'n controle uit te voeren die in 99,999% van de gevallen overbodig is omdat deze altijd zal resulteren in true. Is er nog een andere manier om te controleren, of is dit de enige optie?
Volgens mij wordt een catchable fatal error weergegeven.
En daarnaast zou ik altijd de check erin bouwen. Misschien gebruik je wel een 3rd party library met zijn eigen autoloader, dat jouw autoloader het niet kan vinden hoeft nog niet te betekenen dat de 3rd party autoloader het niet kan vinden..
En daarnaast zou ik altijd de check erin bouwen. Misschien gebruik je wel een 3rd party library met zijn eigen autoloader, dat jouw autoloader het niet kan vinden hoeft nog niet te betekenen dat de 3rd party autoloader het niet kan vinden..
Wouter, goed punt. Maar wat voor check gebruik je dan?
Ik heb een psr autoloader, en een "eigen" autoloader. Op basis van de fully qualified name wordt de juiste autoloader gebruikt. Dus als aan de voorwaarden wordt voldaan dan wordt het bestand (nu nog zonder controle) gerequired.
Maar hoe voer ik nu een juiste controle uit? Ik kan wel een is_file gebruiken, maar stel nu dat ik 2 autoload-functies heb geregistreerd en deze kunnen beiden het bestand niet vinden, dan zal ik alsnog een error krijgen omdat de class niet kan worden geladen. Dat schiet dus niet op.
>> Volgens mij wordt een catchable fatal error weergegeven.
Require geeft volgens de documentatie geen catchable fatal error. Of bedoel je dat niet?
Ik heb een psr autoloader, en een "eigen" autoloader. Op basis van de fully qualified name wordt de juiste autoloader gebruikt. Dus als aan de voorwaarden wordt voldaan dan wordt het bestand (nu nog zonder controle) gerequired.
Maar hoe voer ik nu een juiste controle uit? Ik kan wel een is_file gebruiken, maar stel nu dat ik 2 autoload-functies heb geregistreerd en deze kunnen beiden het bestand niet vinden, dan zal ik alsnog een error krijgen omdat de class niet kan worden geladen. Dat schiet dus niet op.
>> Volgens mij wordt een catchable fatal error weergegeven.
Require geeft volgens de documentatie geen catchable fatal error. Of bedoel je dat niet?
>> Require geeft volgens de documentatie geen catchable fatal error. Of bedoel je dat niet?
Dat komt omdat je bij require aangeeft dat het bestand echt aanwezig moet zijn. Als je het wil catchen moet je include gebruiken.
>> Maar hoe voer ik nu een juiste controle uit? Ik kan wel een is_file gebruiken, maar stel nu dat ik 2 autoload-functies heb geregistreerd en deze kunnen beiden het bestand niet vinden, dan zal ik alsnog een error krijgen omdat de class niet kan worden geladen. Dat schiet dus niet op.
Behalve dat je in dit geval *beide* autoloaders hebt aangeroepen en in het geval van werken als een kip zonder kop je maar 1 autoloader aanriep.
>> Ik heb een psr autoloader, en een "eigen" autoloader. Op basis van de fully qualified name wordt de juiste autoloader gebruikt. Dus als aan de voorwaarden wordt voldaan dan wordt het bestand (nu nog zonder controle) gerequired.
Een autoloader die bepaalt welke autoloader er wordt aangeroepen?
Dat komt omdat je bij require aangeeft dat het bestand echt aanwezig moet zijn. Als je het wil catchen moet je include gebruiken.
>> Maar hoe voer ik nu een juiste controle uit? Ik kan wel een is_file gebruiken, maar stel nu dat ik 2 autoload-functies heb geregistreerd en deze kunnen beiden het bestand niet vinden, dan zal ik alsnog een error krijgen omdat de class niet kan worden geladen. Dat schiet dus niet op.
Behalve dat je in dit geval *beide* autoloaders hebt aangeroepen en in het geval van werken als een kip zonder kop je maar 1 autoloader aanriep.
>> Ik heb een psr autoloader, en een "eigen" autoloader. Op basis van de fully qualified name wordt de juiste autoloader gebruikt. Dus als aan de voorwaarden wordt voldaan dan wordt het bestand (nu nog zonder controle) gerequired.
Een autoloader die bepaalt welke autoloader er wordt aangeroepen?
Het lijkt erop dat je mij verkeerd begrijpt.
Als autoloader 1 het bestand niet vindt, wordt toch automatisch de volgende autoloader aangeroepen. Niks raars aan toch?
>> Een autoloader die bepaalt welke autoloader er wordt aangeroepen?
Nee dus. Gewoon het normale principe. Autoloader 1 kan de file niet laden, dus wordt vervolgens autoloader 2 aangesproken.
Wat snap je niet of wat is er onduidelijk?
Als autoloader 1 het bestand niet vindt, wordt toch automatisch de volgende autoloader aangeroepen. Niks raars aan toch?
>> Een autoloader die bepaalt welke autoloader er wordt aangeroepen?
Nee dus. Gewoon het normale principe. Autoloader 1 kan de file niet laden, dus wordt vervolgens autoloader 2 aangesproken.
Wat snap je niet of wat is er onduidelijk?




