cela ne correspond pas aux conditions énoncées par Berzemus mais àje ferais surtoutif ( !isset($a, $b) ) { }
if ( !isset($a) || !isset($b) ) { }
en effet ça rend pas la même chosecela ne correspond pas aux conditions énoncées par Berzemus mais àje ferais surtoutif ( !isset($a, $b) ) { }if ( !isset($a) || !isset($b) ) { }
Enfin il ne faut pas non plus exagérer, hein...J'avoue que là, avec la tonne d'indentation, il est quasiment impossible de le respecter :
(...)
Je veux bien sauter des lignes, mais un moment ça devient lourd ... On a déjà 93 caractères sur la grande ligne, il faudrait séparer la concaténation, la liste de l'array, etc ...
if ($application->hasOption('resourceloader')) {
$this->setOptions(array(
'resourceloader' => $application->getOption('resourceloader')
));
}
versusdefined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
Je trouve les codes sources intéressantes à analyser (à coté ce qui est en haut est un troll), par exemple du bon emploi des fonctions php (et globales aux langages souvent) : $return = $this->getPrefix()
. implode($this->getSeparator(), $items)
. $this->getPostfix();
Là où on serait tenté de (en tous cas, moi j'avoue) :$return = "<ul><li>";
foreach ($items as $item)
{
$return .= $item . '</li><li>';
}
$return = substr($return,0,-4);
$return .= (count($items) > 0 ? '</li>' : '') . </ul>';
Là dans leur cas, c'est quand même plus simple ... Si ce n'est (le détail) que si $items est vide, il y aura un <li></li> vide. Mais est-ce si important ... Si à côté on a une structure globalement en charpie ...
il est ou l'argument? bon je t'explique pourquoi foreach c'est mal: foreach crée une variable à chaque tour de boucle, ce que ne font ni for ni while le résultat c'est que tu va occuper en mémoire exactement le double avec foreach, quand on sait qu'une affectation mémoire c'est ce qu'il y a de plus coûteux en programmation on en déduit que foreach est le pire système de bouclage (le plus lent, le moins performant), maintenant je crois que ton argument c'est que foreach boucle systématiquement sur tous les éléments d'une structure de données tubulaire, est ce que tu crois qu'on ne peut pas le faire avec un for ou un while?Au contraire, foreach c'est le bien, en particulier si tu dois itérer sur TOUS les éléments d'une liste.
Code : Tout sélectionner
Démarrage avec 25000 éléments
Je confirme avoir été témoin de 20000 instructions de début de tableau avec unset() en 0.04050 secondes. Nombre d'élements restants avec count : 5000
Démarrage avec 25000 éléments
Je confirme avoir été témoin de 20000 instructions de début de tableau avec array_shift() en 4.50380 secondes. Nombre d'élements restants avec count : 5000
Démarrage avec 25000 éléments
Je confirme avoir été témoin de 20000 instructions de fin de tableau avec unset() en 0.01950 secondes. Nombre d'élements restants avec count : 5000
Démarrage avec 25000 éléments
Je confirme avoir été témoin de 20000 instructions de fin de tableau avec array_pop() en 0.08520 secondes. Nombre d'élements restants avec count : 5000
Démarrage avec 25000 éléments
Je confirme avoir été témoin de 20000 instructions de milieu de tableau avec unset() en 0.01590 secondes. Nombre d'élements restants avec count : 5000
Démarrage avec 25000 éléments
Je confirme avoir été témoin de 20000 instructions de milieu de tableau avec array_splice() (suppression) en 52.04460 secondes. Nombre d'élements restants avec count : 5000
Démarrage avec 5000 éléments
Je confirme avoir été témoin de 20000 instructions de fin de tableau avec array_push() en 0.08500 secondes. Nombre d'élements restants avec count : 25000
Démarrage avec 5000 éléments
Je confirme avoir été témoin de 20000 instructions de fin de tableau avec [] en 0.01950 secondes. Nombre d'élements restants avec count : 25000
Démarrage avec 5000 éléments
Je confirme avoir été témoin de 20000 instructions de fin de tableau avec [$i] en 0.01960 secondes. Nombre d'élements restants avec count : 25000
Démarrage avec 5000 éléments
Je confirme avoir été témoin de 20000 instructions de début de tableau avec array_unshift() en 62.30800 secondes. Nombre d'élements restants avec count : 25000
Démarrage avec 5000 éléments
Je confirme avoir été témoin de 20000 instructions de début de tableau avec array_splice() (ajout) en 71.43780 secondes. Nombre d'élements restants avec count : 25000
Démarrage avec 5000 éléments
Je confirme avoir été témoin de 20000 instructions de milieu de tableau avec array_splice() (ajout) en 76.14350 secondes. Nombre d'élements restants avec count : 25000
Démarrage avec 5000 éléments
Je confirme avoir été témoin de 20000 instructions de fin de tableau avec array_splice() (ajout) en 74.50060 secondes. Nombre d'élements restants avec count : 25000
Code : Tout sélectionner
Résultats à peu près similaires à plusieurs essais
Test de mémoire de tableaux dont des éléments ont été supprimés : tableaux recomposés et tableaux bruts
Iteration initiale (nombre d'elements : 25000)
Temps d'itération : 0.00670
Suppression de 10000 éléments avec unset()
Iteration après suppression (nombre d'élements : 15000)
Temps d'itération : 0.00390
Reorganisation du tableau
Iteration après réorganisation (nombre d'élements : 15000) avec array_values
Temps d'itération : 0.00420
<?php
$tab = array();
for($i=0; $i<250000; $i++) {
array_push($tab, $i);
}
$var = '';
$t1 = microtime(true);
$m1 = memory_get_usage();
$ct = count($tab);
for($i=0; $i<$ct; $i++) {
$var .= $i;
}
$t2 = microtime(true);
$m2 = memory_get_usage();
$diff1 = $t2 - $t1;
$mdiff1 = $m2 - $m1;
$var = '';
$t1 = microtime(true);
$m1 = memory_get_usage();
foreach($tab as $i) {
$var .= $i;
}
$t2 = microtime(true);
$m2 = memory_get_usage();
$diff2 = $t2 - $t1;
$mdiff2 = $m2 - $m1;
echo 'for time: '.$diff1.''."\n";
echo 'for mem: '.$mdiff1.''."\n";
echo 'foreach time: '.$diff2.''."\n";
echo 'foreach mem: '.$mdiff2.''."\n";
Mes résultats sont sensiblement constants un exemple de résultat serait:Ce qui montre que le for est plus rapide que le foreach, en revanche le foreach est effectivement moins gourmand en mémoire, bien sur on parle de pas grand chose mais voila.for time: 0.03811502456665
for mem: 1389512
foreach time: 0.040256023406982
foreach mem: 1388808
<?php
ini_set('memory_limit', '1024M');
$truemem = false;
$tab = array();
for($i=0; $i<250000; $i++) {
array_push($tab, $i);
}
shuffle($tab);
$var = '';
$t1 = microtime(true);
$m1 = memory_get_usage($truemem);
$ct = count($tab);
for($i=0; $i<$ct; $i++) {
$var = $i . $tab[$i];
}
$t2 = microtime(true);
$m2 = memory_get_usage($truemem);
$diff1 = $t2 - $t1;
$mdiff1 = $m2 - $m1;
$var = '';
$t1 = microtime(true);
$m1 = memory_get_usage($truemem);
foreach($tab as $num=>$i) {
$var = $num . $i;
}
$t2 = microtime(true);
$m2 = memory_get_usage($truemem);
$diff2 = $t2 - $t1;
$mdiff2 = $m2 - $m1;
$var = '';
$t1 = microtime(true);
$m1 = memory_get_usage($truemem);
$ct = count($tab);
$i=0;
while($i < $ct) {
$var = $i . $tab[$i];
$i++;
}
$t2 = microtime(true);
$m2 = memory_get_usage($truemem);
$diff3 = $t2 - $t1;
$mdiff3 = $m2 - $m1;
echo 'for time: '.$diff1.''."\n";
echo 'for mem: '.$mdiff1.''."\n";
echo 'foreach time: '.$diff2.''."\n";
echo 'foreach mem: '.$mdiff2.''."\n";
echo 'while time: '.$diff3.''."\n";
echo 'while mem: '.$mdiff3.''."\n";
avantage à foreach, mais pas un gros avantage, je vais voir si je peut trouver un cas ou le foreach est moins bon, en jouant sur ce qui se passe à l'intérieur des boucles.for time: 0.10704684257507
for mem: 632
foreach time: 0.093402862548828
foreach mem: 136
while time: 0.1063129901886
while mem: 88