naampje voor functie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

01/01/2014 18:13:13
Quote Anchor link
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?
 
PHP hulp

PHP hulp

28/11/2024 16:50:24
 
Wouter J

Wouter J

01/01/2014 18:16:58
Quote Anchor link
dan heeft die functie dus 2 verantwoordelijkheden... :)

directoryExists en createDirectory.

En als je het echt in 1 functie wilt: assureDirectoryExists
 
Ozzie PHP

Ozzie PHP

01/01/2014 18:20:45
Quote Anchor link
>> dan heeft die functie dus 2 verantwoordelijkheden... :)

Ja klopt, ik moet deze controle in een paar verschillende functies implementeren en daar gebruik ik dan weer liever 1 functie voor :)

>> En als je het echt in 1 functie wilt: assureDirectoryExists

Oké... jij zou dus voor assure kiezen. Wordt wel een lang naampje, hmmm... misschien dan zonder Exists?
 
Wouter J

Wouter J

01/01/2014 18:55:43
Quote Anchor link
assureDirectory is niks naar mijn mening. Er moet nog iets zijn waarmee we aangeven wat we verzekeren, namelijk dat hij bestaat.

En vind je assureDirectoryExists echt al te lang? Dan kun je er assureDirExists ofzo van maken. Maar echt lang is ie nog niet...
Denk maar eens aan mysql_real_escape_string, data_interval_create_from_string, array_change_key_case en vele andere core functies...
 
Willem vp

Willem vp

01/01/2014 19:47:00
Quote Anchor link
Waarom niet gewoon makeDir() ?

Als ik je omschrijving goed begrijp, is het doel van de functie om een directory te maken. Het kijken of die directory al bestaat is daarin bijzaak.

Eventueel zou je met een return value kunnen aangeven of de aan te maken directory al bestond (dus bijvoorbeeld 0 = niet gelukt, 1 = aangemaakt, 2 = bestond al)
 
Ozzie PHP

Ozzie PHP

01/01/2014 19:47:31
Quote Anchor link
Wat noem je lang? Ik probeer zelf m'n namen zo kort, maar wel zo duidelijk mogelijk te maken.

Ik ben er inmiddels achter dat assure eigenlijk ensure moet zijn, dus dan is het ensureDirectory. Maar waarom wil jij er exists bij?

Je garandeert een directory. Dan denk ik dat het duidelijk is dat je garandeert dat die directory bestaat. Veel meer dan dat kan een directory niet doen. Als ik tegen jou zeg "Wouter, ik garandeer jou een huis." dan gaat het om een huis dat bestaat. Ik kan ook zeggen "Wouter, ik garandeer jou een huis dat bestaat." Komt op hetzelfde neer alleen is wat langer.

Toevoeging op 01/01/2014 19:49:17:

>> Als ik je omschrijving goed begrijp, is het doel van de functie om een directory te maken. Het kijken of die directory al bestaat is daarin bijzaak.

Nee niet helemaal. Bij een makeDir functie maak je altijd een nieuwe directory. In mijn geval kan het zijn dat de directory al bestaat, dan moet er dus juist geen directory gemaakt worden.
 
Willem vp

Willem vp

01/01/2014 19:50:49
Quote Anchor link
Wouter J op 01/01/2014 18:55:43:
En vind je assureDirectoryExists echt al te lang? Dan kun je er assureDirExists ofzo van maken. Maar echt lang is ie nog niet...
Denk maar eens aan mysql_real_escape_string, data_interval_create_from_string, array_change_key_case en vele andere core functies...

Dat is een beetje een omgekeerde argumentatie: omdat er al zoveel lange functienamen zijn is het dus geen probleem om een lange functienaam aan te maken?

Een van de nadelen van PHP is juist dat de gemiddelde naam van de core-functies zo lang is...
 
Wouter J

Wouter J

01/01/2014 19:53:23
Quote Anchor link
Ozzie, er is een verschil tussen het gebruik in het engels en nederlands. In het engels moet er iets achter komen dat verteld wat je garandeert.

En omdat je me anders niet geloofd :)

Quote:
Ensure means "to make sure or certain" and must be followed by a direct object.
Bron: http://www.elearnenglishlanguage.com/difficulties/assureensure.html

Quote:
ensure
[with object]
make certain that (something) will occur or be the case: the client must ensure that accurate records are kept

[no object] (ensure against) make sure that (a problem) does not occur: only by researching stocks thoroughly can a client ensure against being misled
Bron: http://www.oxforddictionaries.com/definition/english/ensure


Offtopic:
Nee, willem. Ik wou alleen aangeven dat het wel mee viel met de lengte, aangezien je als PHP programmeur dat toch al gewent bent. PHP heeft immers geen functies als to_a (wat voor de meeste mensen compleet nikszeggends zal zijn).
Gewijzigd op 01/01/2014 19:54:25 door Wouter J
 
Ozzie PHP

Ozzie PHP

01/01/2014 20:01:49
Quote Anchor link
Euh Wouter, ik snap nog niet helemaal waar je op doelt.

>> Ensure means "to make sure or certain" and must be followed by a direct object.

Een direcotry is toch een object?

In de link die jij geeft staat ook:

"His loyalty will ensure your safety."

In jouw optiek zou dit dan moeten zijn "His loyalty will ensure that your safety exists."
 
Willem vp

Willem vp

01/01/2014 20:16:32
Quote Anchor link
Ozzie PHP op 01/01/2014 19:47:31:
>> Als ik je omschrijving goed begrijp, is het doel van de functie om een directory te maken. Het kijken of die directory al bestaat is daarin bijzaak.

Nee niet helemaal. Bij een makeDir functie maak je altijd een nieuwe directory.

In welke wet staat dat beschreven? ;-)

Er zijn twee manieren om naar een functie te kijken: actiegericht en resultaatgericht. Jij kijkt er actiegericht naar. Maken is maken, en checken is checken. Ik kijk resultaatgericht: aan het eind van de procedure moet er een directory zijn. Bestaat 'ie al? Mooi zo, dan hoef ik niets te doen.

Je zou zelfs helemaal over the top kunnen gaan door een parameter mee te geven waarmee je bepaalt of het al bestaan van de target directory een fout oplevert of niet.

Wanneer je je functie ensureDir of zo gaat noemen, introduceer je naar mijn mening juist onzekerheid over wat de functie doet. De term "ensure" suggereert namelijk dat de functie ervoor zorgt dat de opgegeven target altijd een directory is. Stel nu dat je de functie aanroept met de naam van een al bestaande file: ensureDir('readme.txt'); dan zou dat suggereren dat aan het eind van de functie de file readme.txt is verwijderd en er een directory readme.txt is aangemaakt. Een naam als makeDir vind ik dan juist beter beschrijven wat de functie doet.
 
Ozzie PHP

Ozzie PHP

01/01/2014 20:26:18
Quote Anchor link
Ik snap wel enigszins wat je bedoelt, maar PHP heeft wat rare fratsen. Stel bijv. ik wil een bestand kopiëren van map A naar map B. Dan wil ik kunnen zeggen copy('/pad/A/file.php', '/pad/B/file.php');

Nu is het vervelende dat die copy functie geen directories kan aanmaken. Oké. Dan kan ik gaan controleren of directory B bestaat, en zo niet maak dan eerst directory B aan. Dat vind ik niet handig.

Ik wil mijn copy functie dus zo maken dat ie, indien nodig, een directory kan aanmaken. Stel nu dat ik makeDir zou gebruiken, dan krijg je zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

public function copy($file, $destination) {
  makeDir(dirname($file));
  copy($file, $destination);
}


?>

Als ik deze functie zou zien, dan zou ik dan interpreteren alsof er altijd een directory wordt aangemaakt, maar dat is niet zo, want dat is niet altijd nodig. Dit lijkt mij dan duidelijker:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

public function copy($file, $destination) {
  ensureDirectory(dirname($file));
  copy($file, $destination);
}


?>
 
Kris Peeters

Kris Peeters

02/01/2014 11:21:30
Quote Anchor link
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)
Gewijzigd op 02/01/2014 11:25:05 door Kris Peeters
 
Ward van der Put
Moderator

Ward van der Put

02/01/2014 11:48:59
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?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.
 
Wouter J

Wouter J

02/01/2014 11:55:11
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

02/01/2014 14:26:46
Quote Anchor link
@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!



Toevoeging op 02/01/2014 14:36:05:

@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...
 
Kris Peeters

Kris Peeters

02/01/2014 16:06:16
Quote Anchor link
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.


... Wat niet wegneemt dat het misschien, af en toe, toch nog handig kan zijn.
Uiteraard niet de classname herhalen in functienamen.
Gewijzigd op 02/01/2014 16:08:11 door Kris Peeters
 
Ozzie PHP

Ozzie PHP

02/01/2014 17:21:22
Quote Anchor link
Hook functies? Ik snap niet echt wat je daarmee bedoelt... :(
 
Wouter J

Wouter J

02/01/2014 21:23:23
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

02/01/2014 21:29:05
Quote Anchor link
Ah oke... kun je mijn vraag nog even beantwoorden wat betreft jouw opmerking over memory overflow?
 
Wouter J

Wouter J

02/01/2014 21:38:31
Quote Anchor link
dat was mijn fout, ik dacht dat je een functie copy had... Ben nog een beetje moe denk ik :)
 
Ozzie PHP

Ozzie PHP

02/01/2014 21:41:25
Quote Anchor link
okeej, no problemo ;)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.