Het is voornamelijk een kwestie van stijl, maar ik ben toch wel benieuwd wat jullie doen als een parameter een lange waarde heeft. Stop je die waarde eerst in een variabele en geef je die variabele dan door aan de functie? Of stop je de lange parameter rechtstreeks in de functie?
Voorbeeld:
Stel een of andere functie (bijv. processMessage) vraagt om 3 parameters, $message (string), $show (boolean) en $code (int).
Stel nu dat de waarde van $message een vrij lange zin is, maak je hier dan een aparte variabele voor aan, of stop je de message rechtstreeks in de functie, maar laat je de parameters op de volgende regel doorlopen.
Voorbeeldje:
Doe jij dit (situatie A, je maakt een variabele $message aan en die stop je in de functie):
<?php
$who = 'jullie allemaal';
if ($status === true) {
$message = 'Dit is best een vrij lange voorbeeldzin zoals ' . $who . ' denk ik wel kunnen zien.';
$this->processMessage($message, true, 1);
}
?>
Of doe jij dit (situatie B, je stopt de lange waarde meteen in de functie)?
<?php
$who = 'jullie allemaal';
if ($status === true) {
$this->processMessage('Dit is best een vrij lange voorbeeldzin zoals ' . $who . ' denk ik wel
kunnen zien.', true, 1);
}
?>
Eddy, we gaan even er vanuit dat we $message niet meer nodig hebben.
>> En hier doe je het helemaal onzinnig.
In welk opzicht?
>> Er wordt vaak gewaarschuwd voor het (onnodig) kopieren van variabelen (denk aan $naam = $_POST['naam']).
Klopt, helemaal mee eens. En vandaar ook mijn vraag.
Vanuit performance-oogpunt zal situatie B beter zijn, maar eigenlijk vind ik situatie A wel duidelijker, omdat je hier duidelijker kunt zien wat $message is. Nu is situatie B ook nog goed te lezen omdat het een vrij simpel voorbeeld is. Oké... een al wat lastiger voorbeeldje dan:
<?php
$message = 'The file ' . $file . ' containing ' . $foo . 'could not be saved in ' . $path . '.' . $e->getMessage();
$this->logger->log($message, Logger::Warning, true);
?>
versus
<?php
$this->logger->log('The file ' . $file . ' containing ' . $foo . ' could not be saved in ' . $path .
$e->getMessage(), Logger::Warning, true);
?>
Ik ben benieuwd naar nog meer reacties...
PSR-2: “Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line.”
<?php
$this->logger->log(
'The file ' . $file . ' containing ' . $foo . ' could not be saved in ' . $path . $e->getMessage(),
Logger::Warning,
true
);
?>
@Ward: dat is inderdaad ook een optie. Zo heb ik het zelf eigenlijk nooit gedaan, maar het ziet er op zich wel oke uit. Doe jij het ook op die manier?
Ja, want met drie ingesprongen regels zie je hier dat log() drie argumenten gebruikt. Dat is de gedachte achter de PSR-recommendation.
Overigens geldt dat alleen bij de limiet van circa 80 tot 120 karakters. Korte expressies plaats je gewoon op één regel. Ga je echter uitschrijven over meerdere regels, dan schrijf je meteen alles uit met de logica "één regel per argument". Bij half uitschrijven plus half aaneenschrijven krijg je willekeur.
>> Bij half uitschrijven plus half aaneenschrijven krijg je willekeur.
Goed punt... dat herken ik inderdaad wel. Alleen die 2 laatste regels, en vooral de allerlaatste, zijn wel een beetje sneu :) Een regel waar alleen maar true op staat :)
Extremer voorbeeld. Jij zou dan dus ook dit doen:
<?php
$this->logger->log(
'The file ' . $file . ' containing ' . $foo . ' could not be saved in ' . $path . $e->getMessage(),
Logger::Warning,
true,
1,
false,
12,
true,
false
);
?>
En niet dit?
<?php
$this->logger->log(
'The file ' . $file . ' containing ' . $foo . ' could not be saved in ' . $path . $e->getMessage(),
Logger::Warning, true, 1, false, 12, true, false
);
?>
Ja, juist dan zou ik het doen. Probeer anders maar eens het 7e argument terug te vinden. Regels tellen is makkelijker dan komma's zoeken. Bovendien kun je dan ook nog commentaar per regel en dus per argument toevoegen.
Ward, toch nog even een vraagje... die argumenten over meerdere regels vind ik wel mooi!
Maar wat doe je nu als 1 van de argumenten een heel lange string is die niet op 1 regel past?
<?php
$this->foo(
'Dit is een ongelofelijk, belachelijk lange zin die te lang is om op 1 regel te plaatsen zoals je waarschijnlijk wel kunt zien. Maar hoe verdeel je die over meerdere regels?',
true,
false
);
?>
Ga je dan dit doen?
<?php
$this->foo(
'Dit is een ongelofelijk, belachelijk lange zin
die te lang is om op 1 regel te plaatsen zoals
je waarschijnlijk wel kunt zien. Maar hoe verdeel
je die over meerdere regels?',
true,
false
);
?>
Of ga je dan nog eens extra inspringen of iets dergelijks?
<?php
$this->foo(
'Dit is een ongelofelijk, belachelijk lange zin
die te lang is om op 1 regel te plaatsen zoals
je waarschijnlijk wel kunt zien. Maar hoe verdeel
je die over meerdere regels?',
true,
false
);
?>