Door
Ozzie PHP
op 13-06-2014 01:39
gewijzigd op 13-06-2014 01:40
1.101 views
Ola,
Stel ik heb een FileLoader class met daarin een method die, je raadt het al, bestanden laadt.
FileLoader::load($file);
Zoals je kunt zien gebruik ik hier de method-naam "load" wat in mijn oren heel logisch klinkt. Ik zou ook hiervoor kunnen kiezen:
FileLoader::loadFile($file);
Dit vind ik persoonlijk een beetje dubbelop. Volgens mij zegt load($file) voldoende omdat de method sowieso al in een FileLoader class staat. Dus hier lijkt load($file) de juiste keuze.
Nu heb ik echter een autoloader class met daarin, jawel... een (private) loadClass method:
Autoloader::loadClass($class);
Omdat de class zelf Autoloader heet (en niet Classloader) heb ik bij de naam van de load method het woordje "class" toegevoegd, dus loadClass($class).
En nu betrap ik mezelf er dus op dat ik in het ene geval load($file) gebruik en in het andere geval loadClass($class). Vinden jullie de naam loadClass($class) correct? Of vinden jullie dat dat ook load($class) moet zijn?
En om de vraag nog een beetje breder te trekken, moet de naam van een method aangeven wat voor input er wordt verwacht? Of is die taak weggelegd voor de naam van de parameter?
Een voorbeeld. Stel ik heb een container waaraan je services kunt toevoegen. Wat is dan gebruikelijker?
Vergeef me bij deze als ik je punt niet helemaal snap maar toch ga ik proberen antwoord te geven op wat mij logisch lijkt. ( ook om de tijd de doden tijdens me werk.. )
Fileloader gebruikt de method load, maar je zou ook loadFile kunnen geven als deze dus alleen bestanden ( files) inlaadt.
Je autoloader heeft de method loadClass omdat deze ( jawel ) classes inlaadt.
En om even antwoordt te geven op wat is gebruikelijker ?
Geen idee maar ik zou voor optie 2 gaan. ( want dan weet je wat je toevoegt..{add(kan van alles zijn.)} )
Hopelijk vind je dit redelijk behulpzaam!
Gr wouter. ( leuk nachtdienst draaien ...)
In GUI's kennen we een noun/verb selection (File > Save) en een verb/noun selection (Save File). Consistentie is daarbij het belangrijkste: je krijgt een onlogisch soepzooitje en verhoogt de kans op fouten als je beide vormen door elkaar gebruikt.
Je kunt dus zeker wel noun/verb gebruiken voor de objecten die dingen kunnen doen (BalPakker / FileLoader) naast verb/noun voor de handelingen, activiteiten en gebeurtenissen (pakDeBal / loadFile). Die splitsing is heel logisch, zolang je maar consistent bent.
Dat laatste is zeker niet dubbelop, want een autoloader moet ook interfaces kunnen laden.
Het verschil tussen
FileLoader::loadFile($file);
en
FileLoader::load($file);
lijkt mij verwaarloosbaar, tenzij die FileLoader meerdere gelijksoortige methoden heeft, bijvoorbeeld een loadImageFile() en een loadXmlFile() naast de allround loadFile().
>> Dat laatste is zeker niet dubbelop, want een autoloader moet ook interfaces kunnen laden.
Euh... dat gebeurt toch gewoon door dezelfde method? Een interface wordt ook gezien als class toch?
>> FileLoader::load($file);
lijkt mij verwaarloosbaar, tenzij die FileLoader meerdere gelijksoortige methoden heeft, bijvoorbeeld een loadImageFile() en een loadXmlFile() naast de allround loadFile().
Dus zou je dan voorzichtig kunnen stellen dat wanneer je een FooDoener class hebt je bij de method DoeFoo die Foo achterwege kunt laten?
Precies, maar je kunt je dus afvragen of je wel loadClass() moet gebruiken wanneer dat tevens loadInterface() betekent. Dan is gewoon load() beter, voor de purist.
>> Dus zou je dan voorzichtig kunnen stellen dat wanneer je een FooDoener class hebt je bij de method DoeFoo die Foo achterwege kunt laten?
>> Precies, maar je kunt je dus afvragen of je wel loadClass() moet gebruiken wanneer dat tevens loadInterface() betekent. Dan is gewoon load() beter, voor de purist.
Goed punt waarbij ik zelf nooit eerder heb stilgestaan. Simpelweg load() is dan inderdaad beter... wat mij brengt bij de volgende vraag... hoe noem je dan de parameter, hahaha...
load($class_or_interface_or_trait)
Haha... wat zou een goede naam zijn? Is er één naam die zowel aangeeft dat het om een class, interface of trait gaat?
In dit geval zou ik $class of $class_name gebruiken om een andere reden. De autoloader is een implementatie van __autoload() met $class en de standaardimplementatie daarvan is spl_autoload() met $class_name:
Met andere woorden: in dergelijke gevallen kun je besluiten het dicht bij huis te houden. Of niet opnieuw het wiel uitvinden, zo kun je het ook zeggen.