samengestelde namen
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?
$container->add($services);
of
$container->addServices($services);
Hoe doen jullie dat meestal?
Gewijzigd op 13/06/2014 01:40:19 door Ozzie PHP
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 ...)
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.
Kies je dan:
FileLoader::loadFile($file);
of kies je:
FileLoader::load($file);
?
Als ik jou goed begrijp Ward, dan zeg jij dat die laatste optie prima is omdat het een object is dat iets doet. Correct?
>> Fileloader gebruikt de method load, maar je zou ook loadFile kunnen geven als deze dus alleen bestanden ( files) inlaadt.
Het is een FILE loader. Is het dan niet logisch dat ie files laadt?
>> Je autoloader heeft de method loadClass omdat deze ( jawel ) classes inlaadt.
Ja, dat begrijp ik... maar in code ziet dat er ongeveer zo uit:
Autoloader::load('MyClass')
of
Autoloader::loadClass('MyClass')
Is dat laatste niet dubbelop?
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().
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?
Dus:
ArticleReader::read($article) // ipv ArticleReader::readArticle($article)
FileCacher::cache($file) // ipv FileCacher::cacheFile($file)
EggCooker::cook($egg) // ipv EggCooker::cookEgg($egg)
Gewijzigd op 13/06/2014 10:46:07 door Ozzie PHP
>> Dus zou je dan voorzichtig kunnen stellen dat wanneer je een FooDoener class hebt je bij de method DoeFoo die Foo achterwege kunt laten?
Ja.
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?
void __autoload ( string $class )
void spl_autoload ( string $class_name [, string $file_extensions = spl_autoload_extensions() ] )
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.
Ook trouwens lekker, die incosistentie tussen $class en $class_name :-s