stijl bij lange variabele
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):
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?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);
}
?>
$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)?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?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);
}
?>
$who = 'jullie allemaal';
if ($status === true) {
$this->processMessage('Dit is best een vrij lange voorbeeldzin zoals ' . $who . ' denk ik wel
kunnen zien.', true, 1);
}
?>
Er wordt vaak gewaarschuwd voor het (onnodig) kopieren van variabelen (denk aan $naam = $_POST['naam']).
En hier doe je het helemaal onzinnig.
Of je moet $message dynamisch opbouwen, nog een functie (htmlentities oid) of later nog eens gebruiken... dan gooi ik het in een variabele.
Gewijzigd op 04/11/2013 22:00:25 door Eddy E
>> 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:
Code (php)
1
2
3
4
2
3
4
<?php
$message = 'The file ' . $file . ' containing ' . $foo . 'could not be saved in ' . $path . '.' . $e->getMessage();
$this->logger->log($message, Logger::Warning, true);
?>
$message = 'The file ' . $file . ' containing ' . $foo . 'could not be saved in ' . $path . '.' . $e->getMessage();
$this->logger->log($message, Logger::Warning, true);
?>
versus
Code (php)
1
2
3
4
2
3
4
<?php
$this->logger->log('The file ' . $file . ' containing ' . $foo . ' could not be saved in ' . $path .
$e->getMessage(), Logger::Warning, true);
?>
$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...
Gewijzigd op 04/11/2013 22:12:19 door Ozzie PHP
Wat is het verschil? Waarom zou ik bij een lange argument waarde opeens willen weten wat het argument voorstelt?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$this->logger->log(
'The file ' . $file . ' containing ' . $foo . ' could not be saved in ' . $path . $e->getMessage(),
Logger::Warning,
true
);
?>
$this->logger->log(
'The file ' . $file . ' containing ' . $foo . ' could not be saved in ' . $path . $e->getMessage(),
Logger::Warning,
true
);
?>
Echt verschil is er niet... ik dacht alleen dat het wellicht makkelijker zou lezen.
@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?
Ozzie PHP op 05/11/2013 13:33:11:
@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.
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?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
);
?>
$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?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?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
);
?>
$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.
Oké, leuke tip. Daar kan ik denk ik wel wat voordeel uithalen. Ik ga het ook eens proberen :)
Maar wat doe je nu als 1 van de argumenten een heel lange string is die niet op 1 regel past?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?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
);
?>
$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?
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?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
);
?>
$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?
Maar ik begrijp wat je bedoelt: waar ligt de grens dan? Als het dramatisch wordt, zou ik de aanbevolen limiet van 80 karakters aanhouden. Alleen zó blijft de tekst makkelijk te lezen, bewerken, vertalen, printen...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
/* 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0
---------+---------+---------+---------+---------+---------+---------+---------+ */
$bar->setFoo(
'Non eram nescius, Brute, cum, quae summis ingeniis exquisitaque doctrina
philosophi Graeco sermone tractavissent, ea Latinis litteris
mandaremus, fore ut hic noster labor in varias reprehensiones
incurreret. Nam quibusdam, et iis quidem non admodum indoctis, totum
hoc displicet philosophari. Quidam autem non tam id reprehendunt, si
remissius agatur, sed tantum studium tamque multam operam ponendam in
eo non arbitrantur. Erunt etiam, et ii quidem eruditi Graecis litteris,
contemnentes Latinas, qui se dicant in Graecis legendis operam malle
consumere. Postremo aliquos futuros suspicor, qui me ad alias litteras
vocent, genus hoc scribendi, etsi sit elegans, personae tamen et
dignitatis esse negent.',
true,
false
);
?>
/* 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0
---------+---------+---------+---------+---------+---------+---------+---------+ */
$bar->setFoo(
'Non eram nescius, Brute, cum, quae summis ingeniis exquisitaque doctrina
philosophi Graeco sermone tractavissent, ea Latinis litteris
mandaremus, fore ut hic noster labor in varias reprehensiones
incurreret. Nam quibusdam, et iis quidem non admodum indoctis, totum
hoc displicet philosophari. Quidam autem non tam id reprehendunt, si
remissius agatur, sed tantum studium tamque multam operam ponendam in
eo non arbitrantur. Erunt etiam, et ii quidem eruditi Graecis litteris,
contemnentes Latinas, qui se dicant in Graecis legendis operam malle
consumere. Postremo aliquos futuros suspicor, qui me ad alias litteras
vocent, genus hoc scribendi, etsi sit elegans, personae tamen et
dignitatis esse negent.',
true,
false
);
?>
Gewijzigd op 07/11/2013 07:24:38 door Ward van der Put
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$bar->setFoo(
'Non eram nescius, Brute, cum, quae summis ingeniis exquisitaque doctrina
philosophi Graeco sermone tractavissent, ea Latinis litteris
mandaremus, fore ut hic noster labor in varias reprehensiones
incurreret. Nam quibusdam, et iis quidem non admodum indoctis, totum
hoc displicet philosophari. Quidam autem non tam id reprehendunt, si
remissius agatur, sed tantum studium tamque multam operam ponendam in
eo non arbitrantur. Erunt etiam, et ii quidem eruditi Graecis litteris,
contemnentes Latinas, qui se dicant in Graecis legendis operam malle
consumere. Postremo aliquos futuros suspicor, qui me ad alias litteras
vocent, genus hoc scribendi, etsi sit elegans, personae tamen et
dignitatis esse negent.',
true,
false
);
?>
$bar->setFoo(
'Non eram nescius, Brute, cum, quae summis ingeniis exquisitaque doctrina
philosophi Graeco sermone tractavissent, ea Latinis litteris
mandaremus, fore ut hic noster labor in varias reprehensiones
incurreret. Nam quibusdam, et iis quidem non admodum indoctis, totum
hoc displicet philosophari. Quidam autem non tam id reprehendunt, si
remissius agatur, sed tantum studium tamque multam operam ponendam in
eo non arbitrantur. Erunt etiam, et ii quidem eruditi Graecis litteris,
contemnentes Latinas, qui se dicant in Graecis legendis operam malle
consumere. Postremo aliquos futuros suspicor, qui me ad alias litteras
vocent, genus hoc scribendi, etsi sit elegans, personae tamen et
dignitatis esse negent.',
true,
false
);
?>
Of laten we eens heel gek doen... dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$bar->setFoo(
'
Non eram nescius, Brute, cum, quae summis ingeniis exquisitaque doctrina
philosophi Graeco sermone tractavissent, ea Latinis litteris
mandaremus, fore ut hic noster labor in varias reprehensiones
incurreret. Nam quibusdam, et iis quidem non admodum indoctis, totum
hoc displicet philosophari. Quidam autem non tam id reprehendunt, si
remissius agatur, sed tantum studium tamque multam operam ponendam in
eo non arbitrantur. Erunt etiam, et ii quidem eruditi Graecis litteris,
contemnentes Latinas, qui se dicant in Graecis legendis operam malle
consumere. Postremo aliquos futuros suspicor, qui me ad alias litteras
vocent, genus hoc scribendi, etsi sit elegans, personae tamen et
dignitatis esse negent.
',
true,
false
);
?>
$bar->setFoo(
'
Non eram nescius, Brute, cum, quae summis ingeniis exquisitaque doctrina
philosophi Graeco sermone tractavissent, ea Latinis litteris
mandaremus, fore ut hic noster labor in varias reprehensiones
incurreret. Nam quibusdam, et iis quidem non admodum indoctis, totum
hoc displicet philosophari. Quidam autem non tam id reprehendunt, si
remissius agatur, sed tantum studium tamque multam operam ponendam in
eo non arbitrantur. Erunt etiam, et ii quidem eruditi Graecis litteris,
contemnentes Latinas, qui se dicant in Graecis legendis operam malle
consumere. Postremo aliquos futuros suspicor, qui me ad alias litteras
vocent, genus hoc scribendi, etsi sit elegans, personae tamen et
dignitatis esse negent.
',
true,
false
);
?>
Gewijzigd op 07/11/2013 15:00:08 door Ozzie PHP
Ozzie PHP op 07/11/2013 14:33:04:
Ja, want met die inspringingen zie je nog steeds dat het drie argumenten zijn. Stel je maar eens hetzelfde voor met drie van die argumenten (waar in het voorbeeld nu slechts booleans staan).Ah oke... maar je springt de string (zeg dat eens 10x achter elkaar) dus wel in zie ik.
Een lastiger voorbeeld is deze autoloader met een anonieme functie. Toch blijft duidelijk wat de drie argumenten van spl_autoload_register() zijn en waar de anonieme functie begint en eindigt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
spl_autoload_register(
function($classname)
{
$classname = ltrim($classname, '\\');
$filename = (string) null;
if ($last_namespace_position = strrpos($classname, '\\')) {
$namespace = substr($classname, 0, $last_namespace_position);
$classname = substr($classname, $last_namespace_position + 1);
$filename = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$filename .= str_replace('_', DIRECTORY_SEPARATOR, $classname) . '.php';
$filename = __DIR__ . DIRECTORY_SEPARATOR . $filename;
require $filename;
},
true,
true
);
?>
spl_autoload_register(
function($classname)
{
$classname = ltrim($classname, '\\');
$filename = (string) null;
if ($last_namespace_position = strrpos($classname, '\\')) {
$namespace = substr($classname, 0, $last_namespace_position);
$classname = substr($classname, $last_namespace_position + 1);
$filename = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$filename .= str_replace('_', DIRECTORY_SEPARATOR, $classname) . '.php';
$filename = __DIR__ . DIRECTORY_SEPARATOR . $filename;
require $filename;
},
true,
true
);
?>
Eén regel is hier langer dan 80 karakters, maar zit nog binnen de 120 karakters. Dat vind ik een duidelijkere oplossing dan $namespace afkorten tot $ns: afkortingen doen soms meer afbreuk aan de leesbaarheid dan lange regels code. De interne PHP-constante heet immers ook DIRECTORY_SEPARATOR en niet DIR_SEP.
Kun je nog even reageren op mijn vraag?
Wat betreft jouw laatste bericht... waarom doe je bijv. niet dit?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
spl_autoload_register(
function($classname) {
$classname = ltrim($classname, '\\');
$filename = (string) null;
if ($last_namespace_position = strrpos($classname, '\\')) {
$namespace = substr($classname, 0, $last_namespace_position);
$classname = substr($classname, $last_namespace_position + 1);
$filename = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$filename .= str_replace('_', DIRECTORY_SEPARATOR, $classname) . '.php';
$filename = __DIR__ . DIRECTORY_SEPARATOR . $filename;
require $filename;
},
true,
true
);
?>
spl_autoload_register(
function($classname) {
$classname = ltrim($classname, '\\');
$filename = (string) null;
if ($last_namespace_position = strrpos($classname, '\\')) {
$namespace = substr($classname, 0, $last_namespace_position);
$classname = substr($classname, $last_namespace_position + 1);
$filename = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$filename .= str_replace('_', DIRECTORY_SEPARATOR, $classname) . '.php';
$filename = __DIR__ . DIRECTORY_SEPARATOR . $filename;
require $filename;
},
true,
true
);
?>
Of zorg je altijd dat alleen de allereerste regel van het argument op de beginpositie staat, en dat de rest inspringt?
Belangrijk is vooral overzicht op een relatief klein schermoppervlak. Stel dat je snel wat moet fixen op een notebook omdat een site er ergens uit ligt. Dan wil je vooral niet per ongeluk op een verkeerde plaats iets toevoegen of verwijderen.
Geen van de laatste voorbeelden vind ik in dat opzicht wezenlijk beter of slechter dan de andere.
Ik wist niet dat die stijlen een naam hadden... wat is het wezenlijke verschil?
Maar als ik het goed begrijp is het dus enigszins een kwestie van persoonlijke voorkeur?
Binnen een bedrijf heb je als het goed is ook code standards. En als het helemaal goed is zorgen al deze standards dat ze compatible zijn met de psr standards, aangezien dat ervoor zorgt dat alle php mensen over de wereld jou code begrijpen en kunnen integreren in hun project.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
---------+---------+---------+---------+---------+---------+---------+---------+ */
$bar->setFoo(
'Non eram nescius, Brute, cum, quae summis ingeniis exquisitaque doctrina
philosophi Graeco sermone tractavissent, ea Latinis litteris
mandaremus, fore ut hic noster labor in varias reprehensiones
incurreret. Nam quibusdam, et iis quidem non admodum indoctis, totum
hoc displicet philosophari. Quidam autem non tam id reprehendunt, si
remissius agatur, sed tantum studium tamque multam operam ponendam in
eo non arbitrantur. Erunt etiam, et ii quidem eruditi Graecis litteris,
contemnentes Latinas, qui se dicant in Graecis legendis operam malle
consumere. Postremo aliquos futuros suspicor, qui me ad alias litteras
vocent, genus hoc scribendi, etsi sit elegans, personae tamen et
dignitatis esse negent.',
true,
false
);
?>
---------+---------+---------+---------+---------+---------+---------+---------+ */
$bar->setFoo(
'Non eram nescius, Brute, cum, quae summis ingeniis exquisitaque doctrina
philosophi Graeco sermone tractavissent, ea Latinis litteris
mandaremus, fore ut hic noster labor in varias reprehensiones
incurreret. Nam quibusdam, et iis quidem non admodum indoctis, totum
hoc displicet philosophari. Quidam autem non tam id reprehendunt, si
remissius agatur, sed tantum studium tamque multam operam ponendam in
eo non arbitrantur. Erunt etiam, et ii quidem eruditi Graecis litteris,
contemnentes Latinas, qui se dicant in Graecis legendis operam malle
consumere. Postremo aliquos futuros suspicor, qui me ad alias litteras
vocent, genus hoc scribendi, etsi sit elegans, personae tamen et
dignitatis esse negent.',
true,
false
);
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$bar->setFoo(
'Non eram nescius, Brute, cum, quae summis ingeniis exquisitaque doctrina
philosophi Graeco sermone tractavissent, ea Latinis litteris
mandaremus, fore ut hic noster labor in varias reprehensiones
incurreret. Nam quibusdam, et iis quidem non admodum indoctis, totum
hoc displicet philosophari. Quidam autem non tam id reprehendunt, si
remissius agatur, sed tantum studium tamque multam operam ponendam in
eo non arbitrantur. Erunt etiam, et ii quidem eruditi Graecis litteris,
contemnentes Latinas, qui se dicant in Graecis legendis operam malle
consumere. Postremo aliquos futuros suspicor, qui me ad alias litteras
vocent, genus hoc scribendi, etsi sit elegans, personae tamen et
dignitatis esse negent.',
true,
false
);
?>
$bar->setFoo(
'Non eram nescius, Brute, cum, quae summis ingeniis exquisitaque doctrina
philosophi Graeco sermone tractavissent, ea Latinis litteris
mandaremus, fore ut hic noster labor in varias reprehensiones
incurreret. Nam quibusdam, et iis quidem non admodum indoctis, totum
hoc displicet philosophari. Quidam autem non tam id reprehendunt, si
remissius agatur, sed tantum studium tamque multam operam ponendam in
eo non arbitrantur. Erunt etiam, et ii quidem eruditi Graecis litteris,
contemnentes Latinas, qui se dicant in Graecis legendis operam malle
consumere. Postremo aliquos futuros suspicor, qui me ad alias litteras
vocent, genus hoc scribendi, etsi sit elegans, personae tamen et
dignitatis esse negent.',
true,
false
);
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$bar->setFoo(
'
Non eram nescius, Brute, cum, quae summis ingeniis exquisitaque doctrina
philosophi Graeco sermone tractavissent, ea Latinis litteris
mandaremus, fore ut hic noster labor in varias reprehensiones
incurreret. Nam quibusdam, et iis quidem non admodum indoctis, totum
hoc displicet philosophari. Quidam autem non tam id reprehendunt, si
remissius agatur, sed tantum studium tamque multam operam ponendam in
eo non arbitrantur. Erunt etiam, et ii quidem eruditi Graecis litteris,
contemnentes Latinas, qui se dicant in Graecis legendis operam malle
consumere. Postremo aliquos futuros suspicor, qui me ad alias litteras
vocent, genus hoc scribendi, etsi sit elegans, personae tamen et
dignitatis esse negent.
',
true,
false
);
?>
$bar->setFoo(
'
Non eram nescius, Brute, cum, quae summis ingeniis exquisitaque doctrina
philosophi Graeco sermone tractavissent, ea Latinis litteris
mandaremus, fore ut hic noster labor in varias reprehensiones
incurreret. Nam quibusdam, et iis quidem non admodum indoctis, totum
hoc displicet philosophari. Quidam autem non tam id reprehendunt, si
remissius agatur, sed tantum studium tamque multam operam ponendam in
eo non arbitrantur. Erunt etiam, et ii quidem eruditi Graecis litteris,
contemnentes Latinas, qui se dicant in Graecis legendis operam malle
consumere. Postremo aliquos futuros suspicor, qui me ad alias litteras
vocent, genus hoc scribendi, etsi sit elegans, personae tamen et
dignitatis esse negent.
',
true,
false
);
?>
De K&R-stijl is vernoemd naar Brian Kernighan en Dennis Ritchie, de auteurs van het beroemde standaardwerk The C Programming Language uit 1978. Dit wordt ook wel de One True Brace Style en afgekort 1TBS of OTBS genoemd:
De Allman-stijl is vernoemd naar Eric Allman en ziet er zo uit:
Verwaarloosbaar detail, zou je misschien zeggen. Maar wacht tot we de code gaan uitbreiden.
Bij de K&R-stijl is duidelijk bij welke if een else hoort:
Bij de Allman-stijl kan de else echter uit beeld verdwijnen, letterlijk omdat je niet verder kijkt:
In dat leidt tot ellende:
Code (php)
En ja: de PSR-recommendation gebruikt beide stijlen door elkaar :)
De PSR recommendation gebruikt ze door elkaar, maar niet willekeurig. Over het algemeen wordt de K&R stijl gebruikt, behalve bij classes en methods.