Code design discussie’tje

Op een website, waar ik regelmatig kom, stond een PHP script functie met volgende functie voorschrift:

array array_map_recursive (array $array, string $function [, string $function [, string $… ]]);

In de code bovenaan zijn functie stond het volgende:

$arguments   = func_get_args();

if (!is_array($arguments[0]) && is_array($arguments[1]))
{
$temporary    = $arguments[0];
$arguments[0] = $arguments[1];
$arguments[1] = $temporary;

unset($temporary);
}

Hij maakt het mogelijk om de eerste parameters om te draaien. Toen ik reageerde dat dit een serieus gat is in zijn design kwam deze reactie.

Verder is het omdraaien van de argumenten toegestaan omdat veel PHP functies dit ook doen

Nu blijkt het dat explode en implode dit doen (what the crap dacht ik ff) maar hij wilde backwards compatibiliteit verzekeren. Volgens mij verander je de volgorde van parameters niet zomaar tenzij je een situatie hebt waarin je de middelste parameter verwijdert of optioneel maakt en dus naar achteren schuift. Voor een beetje leven in de reacties had ik graag jou mening gelezen hierover. Mag je de gebruiker de volgorde van de parameters zelf laten kiezen of niet en waarom?

3 Responses to Code design discussie’tje

  1. Laurens zegt:

    Yow Stijn, hoe gaat het nog met u? Lang geleden, maar kheb je blog nog in mijn RSS feed. :)

    Ik vind het ook een beetje een vreemde discussie. Ja de code wordt meer flexibel, maar imho weegt dat voordeel niet op tegen de verwarring bij de gebruikers (en bij jezelf) die je er nodeloos bij creëert. Het lijkt me evident dat de programmeur één enkele standaard hanteert en dat de gebruikers zich daar aan aanpassen.

    Zijn argument lijkt me ook niet meteen geldig. Sinds wanneer is de implementatie van PHP de maatstaf voor goed ontwerp? :p

  2. avdg zegt:

    Ik zou van die variabelen af blijven, lijkt me redelijk slordig. Je doet dat toch ook niet met de POST en GET (ok ja, de reden ligt eigenlijk meer in de kant van de security en inputvalidatie).

    Ik zou zeker afraden voordat beginner mee beginnen volledig erop te vertrouwen, wat al totaal niet de bedoeling van is. Voor mij is dat ook een vanzelfsprekende good-practice.

  3. devkid zegt:

    Op de website van PHP.net:

    Although implode() can, for historical reasons, accept its parameters in either order, explode() cannot. You must ensure that the delimiter argument comes before the string argument.

    Om diezelfde reden (achterwaarts compatibel) mag een functie zijn argumenten verkrijgen in een andere volgorde. In elk ander geval moet de volgorde gerespecteerd worden.

Geef een reactie

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit / Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit / Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit / Bijwerken )

Google+ photo

Je reageert onder je Google+ account. Log uit / Bijwerken )

Verbinden met %s

%d bloggers op de volgende wijze: