Ola,

Ik zoek een (Engelse) naam voor een functie.

De functie kijkt of een directory bestaat. Zo niet, dan maakt hij de directory aan.

Dus eigelijk geef je die functie dus een directory als argument, en na het uitvoeren weet je zeker dat die directory bestaat.

Ik dacht zelf aan de namen "confirmDirectory" of "assureDirectory", maar misschien weet iemand iets beters?
De coding standards van drupal hebben hier ook een mening over.
Misschien kan het ook een richtlijn zijn waar je iets aan hebt.

Zelfgeschreven functies komen voor in (zelfgeschreven) modules.
Elk van die functie hoort met die module te beginnen.

Dan volgt meestal dit stramien:

een zelfstandig naamwoord, dan een werkwoord (wat je met dat zelfstandig naamwoord doet).

function module_noun_verb

Dus, bv. in de module shoutbox:

function shoutbox_form_alter
function shoutbox_comments_approve
...


Dus ja; in die geest zou ik misschien dit doen:
directoryExists en directoryCreate.

(camel caps / underscore is dan weer een discussie op zich)
Kris Peeters op 02/01/2014 11:21:30
Dan volgt meestal dit stramien:

een zelfstandig naamwoord, dan een werkwoord (wat je met dat zelfstandig naamwoord doet).
Dat is een goede, Kris, want dezelfde noun/verb selection wordt gebruikt in de GUI-richtlijnen voor Windows én Mac OS: Bestand > Openen, File > Print, enzovoort.

Ik zou verder ook eens ruimer kijken naar de gehele signature:

<?php
public function copy($file, $destination) {
  ensureDirectory(dirname($file));
  copy($file, $destination);
}
?>

Je gebruikt hier namelijk een custom functie copy() die gedeeltelijk de PHP-functie copy() implementeert: dat is dubbelzinnig, want ze doen niet hetzelfde. Daarnaast gebruik je een parameter $file waar $filename meer op zijn plaats is.

Sterker nog, de huidige implementatie is een recursieve functie zonder doel en zonder eindpunt. Dat gaat resulteren in "Memory overflow", "Execution time exceeded" en "maximum function nesting level" errors.
@Ward:

>> Je gebruikt hier namelijk een custom functie copy() die gedeeltelijk de PHP-functie copy() implementeert: dat is dubbelzinnig,

Dat doe ik bewust. Ik voeg namelijk exceptions toe en maak het mogelijk dat mijn functie ook nieuwe directories kan aanmaken. Bovendien bouw ik een beveiliging in dat een bestaand bestand (by default) niet kan worden overschreven. Mijn versie is dus een verbeterde versie van de php functie.

@Wouter:

Da's een interessante. Ik heb (omdat een ander stukje van mijn code even uit elkaar ligt) het nog niet kunnen testen. Die copy binnen de functie zelf dat moet de native functie van php zijn. Maar hij verwijst daar nu toch ook naar? Anders had er toch $this->copy() moeten staan? Of zie ik dat verkeerd? Graag je reactie!



[size=xsmall]Toevoeging op 02/01/2014 14:36:05:[/size]

@Kris:

De functie staat in een class... dus lijkt het me niet nodig om de naam van de module/class er nog eens voor te zetten... In de praktijk zou je dus zoiets krijgen $this->filesystem->ensureDirectory($dir). Als ik dat zou doen volgens jouw voorbeeld zou je zoiets krijgen $this->filesystem->filesystem_directory_ensure($dir). Dan vind ik m'n eigen oplossing toch wat prettiger...
Ja, drupal is heel erg procedureel.
Binnen een class zit de noun meestal al in de claasnaam.

[offtopic]
De manier waarop je in drupal communiceert is met hook functies.
die functies zijn callbacks. Ze worden dus opgeroepen, door drupal core, op basis van events.
Een beetje zoals we gewoon zijn in javascript.
[/offtopic]

... Wat niet wegneemt dat het misschien, af en toe, toch nog handig kan zijn.
Uiteraard niet de classname herhalen in functienamen.
Hook functies? Ik snap niet echt wat je daarmee bedoelt... :(
Dat zijn gewoon event listeners. Je registreert dat bepaalde functies worden aangeroepen wanneer een bepaald event gebeurd. Stel je registreert dat JouwModule::onFooter wordt aangeroepen tijdens de footer hook (event). Dan zal die worden aangeroepen wanneer je drupal_footer() aanroept.

PS: Merk op dat Drupal8 heel erg van dat procedurele gaat afstappen.
Ah oke... kun je mijn vraag nog even beantwoorden wat betreft jouw opmerking over memory overflow?
dat was mijn fout, ik dacht dat je een functie copy had... Ben nog een beetje moe denk ik :)
okeej, no problemo ;)

Reageren