Des guillemets simples ou doubles pour la concaténation variable? [fermé]

est-il préférable de concaténer une variable (disons, $name ) dans une chaîne existante (disons, $string ) comme ceci:

$string='Hi, my name is '.$name

ou intégrer la variable dans la chaîne comme ceci:

$string="Hi, my name is $name";

ou est-il préférable d'utiliser une fonction comme ceci:

$string=sprintf("Hi, my name is %s",$name);

Qu'est-ce qui est meilleur en termes de temps/efficacité du processeur?

21
demandé sur David 2010-07-23 11:18:32

10 réponses

tous ceux qui ont fait le test ont conclu que l'utilisation de soumissions uniques est légèrement meilleure du point de vue de la performance. À la fin, les guillemets simples ne donnent qu'une concaténation tandis que les guillemets doubles obligent l'interprète à analyser la chaîne complète des variables.

cependant la charge ajoutée en faisant cela est si petite pour les dernières versions de PHP que la plupart du temps la conclusion est qu'elle n'a pas vraiment d'importance.

Donc, pour la performance des personnes: utiliser apostrophe. Pour le "j'aime mon code lisible"-les personnes: les guillemets sont beaucoup mieux pour la lisibilité, comme Flavius Stef l'a déjà souligné.

Edit: Une chose - Si vous allez utiliser un seul dollar dans votre chaîne sans une variable, utilisez des guillemets simples pour vous! ( http://www.weberdev.com/get_example-3750.html souligne qu'il faudra 4 fois plus de temps pour analyser ces cordes)

25
répondu Blizz 2010-07-23 08:09:49

la différence entre les guillemets simples et doubles en PHP est que les guillemets doubles sont" intelligents "en ce sens qu'ils analysent les variables lorsqu'ils sont lus, tandis que les guillemets simples sont" muets " et n'essayent pas d'analyser un caractère dans la chaîne.

il en résulte quelques différences mineures dans les caractères que vous pouvez utiliser; fondamentalement, le seul caractère que vous devez échapper lorsque vous utilisez des guillemets simples est une simple citation elle-même:

'\''

alors que si vous utilisez des guillemets doubles vous devez échapper à d'autres caractères:

"$"

mais il permet aussi quelques petites choses comme ajouter une nouvelle ligne à la fin:

"my string\n"

avec des guillemets, il faudrait faire une concaténation:

'my string' . chr(10)
'my string' . "\n"

en général, les guillemets simples sont plus rapides parce qu'ils sont "muets".

cependant, normalement on ne devrait pas vraiment s'inquiéter de ces questions, qui est appelé prématurée l'optimisation, et doit être évitée.

quelques mots sur l'optimisation: en général, il faut d'abord écrire le programme de la façon dont il devrait fonctionner, puis trouver les plus gros goulots d'étranglement et corriger ceux en particulier. Si la vitesse de la chaîne de caractères est vraiment un problème pour vous en PHP, vous pourriez envisager de passer à une autre langue.

en ce qui concerne la vitesse: vous voulez probablement vous concentrer davantage sur l'utilisation de la mémoire que sur le temps CPU. Dans ces cas, le temps CPU pourrait être considéré comme assez constante. Le temps CPU est plus pertinent quand on écrit des algorithmes qui vont itérer plusieurs fois.

en ce qui concerne les concaténations: plus vous concaténez les chaînes à l'aide de l'opérateur point, plus vous utiliserez de mémoire.

considérez ceci:

$str1 = 'asdf';
$str2 = 'qwer';

// this will result in more memory being allocated for temporary storage
echo $str1 . $str2;

// this will not allocate as much memory as the previous example
echo $str1;
echo $str2;
11
répondu thnee 2010-07-23 09:52:24

je pense généralement que l'utilisation de l'interpolation de chaîne ( "Hi, my name is $name" ) est préférable du point de vue de la lisibilité.

8
répondu Flavius Stef 2010-07-23 07:21:43

Pour la performance, comme d'autres l'ont prouvé, il est légèrement plus rapide d'utiliser les guillemets simples plutôt que des guillemets doubles.

les guillemets simples, s'ils sont appliqués à la science de la lisibilité et tenus à l'écart de la subjectivité ajoute en fait plus de "bruit". Le bruit et la façon dont il se rapporte à la lisibilité est beaucoup parlé dans le livre Clean Code et on pourrait conclure que plus l'espace non-blanc que vous avez à voir, plus il entrave la lisibilité. Si appliqué à la subjectivité, la plupart des endroits que j'ai pris le temps de lire en fait préfèrent les guillemets simples plutôt que doubles.

utilisez votre jugement.

$var = "My $string with $lots of $replacements."

est beaucoup plus lisible que:

$var = 'My ' . $string . ' with ' . $lots . ' of ' . $replacements . '.';

Je l'admets:

$var = "My string.";

ressemble presque à:

$var = 'My String.';

cependant ce dernier introduit moins de bruit et quand il ya beaucoup de code autour de lui chaque petit peu Aide, sans parler des autres avantages que vous obtenez en utilisant des guillemets simples.

à la fin, je préfère embrasser. Utilisez des guillemets simples, sauf si vous avez besoin de guillemets doubles. Simple convention qui est plus facile à taper, facile à entretenir, plus facile à analyser et plus facile à lire.

5
répondu Tres 2012-12-05 02:05:36

cela n'a pas d'importance du point de vue de la syntaxe. Les deux variantes sont corrects. Utilisez ce que vous sentez plus à l'aise.

personnellement , je me sens mieux en utilisant le $string="Hi, my name is $name" , parce que vous n'avez pas besoin de jouer avec les citations. Il suffit d'imager la requête SQL complexe avec, disons, 10 variables...

0
répondu Andrejs Cainikovs 2010-07-23 07:20:38

PHP est assez lent:

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-088-introduction-to-c-memory-management-and-c-object-oriented-programming-january-iap-2010/lecture-notes/MIT6_088IAP10_lec01.pdf

diapositive # 3

alors ne vous inquiétez pas trop de petites optimisations comme celles-ci.

concentrez-vous davantage sur L'utilisation D'APC pour mettre en cache votre code dans byte code cependant. Vous verrez de grands gains de vitesse pour le projet.

0
répondu Homer6 2010-07-23 07:29:04

personnellement, si c'est juste une variable normale, ou même une propriété de classe, je l'écrirais comme ceci:

$newVarA = "This is some text with a $variable";
$newVarB = "This is some more text, written in $settings->language";

cependant, si j'utilise des valeurs de tableau alors je concaténerai avec des guillemets simples.

$newVarC = 'This is some text from a ' . $text['random'] . ' array';

Espérons que cela a du sens. Il s'agit de trouver une convention et de s'y tenir.

0
répondu Martin Bean 2010-07-23 09:02:52

ma devise et ma réponse est: Laissez aux compilateurs le soin d'écrire le code machine. Je vais vous dire ce que je veux dire...

utilisez des guillemets simples lorsque vous n'avez pas besoin d'inclure des variables PHP, sinon utilisez des guillemets doubles. Ne vous souciez pas de la performance utilisez simplement APC sur les serveurs de production. Mettez plutôt l'accent sur l'écriture du code le plus maintenable; utilisez des commentaires, des guillemets, etc. correctement même s'ils peuvent ralentir code vers le bas. Chaque optimisation qui diminue la maintenabilité / la lisibilité du code est mauvaise, laissez-le à l'opcode-cacheurs et compilateurs pour transformer votre code en code machine, ne le faites pas vous-même... brouiller le code source à cause de l'optimisation renvoie.

0
répondu Gabor de Mooij 2011-09-14 13:39:22

la chaîne de caractères simple quoted est meilleure option que la chaîne de caractères double quoted tout en concaténant les variables. cliquez sur le lien pour une meilleure compréhension...

http://www.codeforest.net/php-myth-busters-using-single-quotes-on-string-is-faster-then-double-quotes

0
répondu DkPathak 2012-11-09 11:31:44
$string='Hi, my name is '.$name

C'est la meilleure façon, dans le sens de la combinaison php et html!

ou comme ceci:

$string="Hi, my name is $name";

C'est la vieille méthode!

ou comme ceci:

$string=sprintf("Hi, my name is %s",$name);

C'est ce qu'écrirait un programmeur provenant de Visual Basic ou d'autres langages de programmation Client!

j'espère avoir été utile.

-5
répondu stooni 2011-01-23 22:46:44