0
votes

Comment refactoriser ce PHP illisible pour les boucles?

J'ai du mal à comprendre ces lignes de code dans un projet hérité. Egalement phpcs code> signalé que les structures de contrôle en ligne ne sont pas autorisées em>. J'adorerais refrorcer cela au code plus compréhensible.

for ($a = 0, $extarr = array(); $a < count($docs); ++$a, $extarr[] = $docs[$a - 1]);


1 commentaires

Ce sont des pour boucles avec le corps de la boucle bloquée dans la troisième partie du pour (;;) instruction. Déplacez cette partie dans l'habituel pour (;;) {/ * passer à ICI * /} Zone du corps et vous êtes à peu près sur un territoire lisible. Vous pouvez également faire la même chose pour la zone d'initialisation.


3 Réponses :


1
votes

pour les boucles de la forme pour (A; b; c) code> peut avoir plusieurs expressions séparées par des virgules dans A code> et C code>. Donc, tout ce qui est dans A code> est exécuté avant la boucle et quoi que ce soit dans c code> est exécuté pour chaque itération. Donc, ceci:

for ($a = 0, $count = count($docs); $a < $count; ++$a) {


0 commentaires

3
votes

La première partie est l'initialisation ; code> la seconde est les conditions testées pour la boucle pour continuer ; code> la troisième partie est des opérations pour effectuer chaque itération. Vous pouvez donc déplacer les premières parties avant la boucle et les troisièmes parties à l'intérieur de la boucle. Le ; code> termine la boucle, de sorte que cela doit être supprimé et remplacé par {} code> pour contenir le corps de la boucle:

$a = 0;
$c = count($docs);
$extarr = array();

while ($a < $c) {
    $extarr[] = $docs[$a - 1];
    ++$a;
}


2 commentaires

Il convient probablement de noter que pour le premier, si vous n'aimez pas cette déclaration ternaire, vous pouvez utiliser une instruction IF normale à la place si ($ ($) {$ i}) et ($ {$ i}> 0 ou $ requête {$ i} === '0')) {$ objectérieur. = $ requête {$ i}}


@jchamb, excellent ajout. Merci. Seulement manquant un point-virgule. $ Query {$ I} devrait être $ requérant {$ i}; .



1
votes

Vous pouvez commencer à le comprendre en décomposant la syntaxe. Pour les boucles ont 3 parties: un setter, une condition et un getter. Le setter est l'endroit où vous pouvez déclarer des variables encapsulées dans la boucle pour la boucle. La condition est quel paramètre doit être rempli pour continuer la boucle. Le getter est où vous pouvez manipuler des variables lors de la boucle, bien qu'il soit principalement utilisé pour l'incrémentation. Les virgules peuvent être utilisées dans le getter ou le setter pour spécifier plusieurs commandes.

for($var = 0, $var2 = 0; $var < 10; $var++) {
   $var2 = 5 + $var;
}


0 commentaires