web-dev-qa-db-fra.com

Guillemets simples ou doubles pour la concaténation de variables?

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

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

ou pour incorporer la variable dans la chaîne comme ceci:

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

ou vaut-il mieux utiliser une fonction comme celle-ci:

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

Quel est le meilleur en termes de temps/efficacité du processeur?

21
ina

Tous ceux qui ont fait le test ont conclu que l’utilisation de guillemets simples était légèrement meilleure en termes de performances. En fin de compte, les guillemets simples ne donnent qu'une concaténation tandis que les guillemets doubles obligent l'interpréteur à analyser la chaîne complète des variables. 

Cependant, la charge supplémentaire que cela implique est si faible pour les dernières versions de PHP que la plupart du temps, la conclusion est que cela n'a pas vraiment d'importance.

Donc, pour les gens de la performance: utilisez des guillemets simples. Pour les gens "j'aime mon code lisible": les guillemets doubles sont bien meilleurs pour la lisibilité, comme l'a déjà souligné Flavius ​​Stef.

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

25
Blizz

La différence entre guillemets simples et doubles entre PHP est que les guillemets sont "intelligents" en ce sens qu'ils analyseront les variables lors de la lecture, tandis que les guillemets simples sont "dumb" et ne chercheront à analyser aucun caractère de la chaîne. .

Cela entraîne des différences mineures dans les caractères que vous pouvez utiliser; En gros, le seul caractère que vous devez échapper lorsque vous utilisez des guillemets simples est un guillemet simple lui-même:

'\''

Tandis que si vous utilisez des guillemets, vous devez échapper aux autres caractères:

"\$"

Mais cela permet aussi de faire des choses intéressantes comme ajouter une nouvelle ligne à la fin:

"my string\n"

Avec des guillemets simples, vous devez faire une concaténation:

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

Généralement, les guillemets simples sont plus rapides car ils sont "stupides".

Cependant, normalement, il ne faut pas s’inquiéter de ces problèmes d’optimisation prématurée et il convient de les éviter.

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 rechercher les goulots d’étranglement les plus importants et les corriger. Si la vitesse de chaîne est vraiment un problème pour vous en PHP, vous pouvez envisager de passer à une autre langue.

En ce qui concerne la vitesse: vous voudrez probablement vous concentrer davantage sur l'utilisation de la mémoire que sur le temps processeur. Dans ces cas, le temps de calcul peut être considéré comme assez constant. Le temps de calcul est plus pertinent lors de l'écriture d'algorithmes qui itéreront plusieurs fois.

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

Considère 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
thnee

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

8
Flavius Stef

Pour ce qui est des performances, comme d'autres l'ont démontré, il est légèrement plus rapide d'utiliser des guillemets simples plutôt que des guillemets doubles.

Les guillemets simples, appliqués à la science de la lisibilité et tenus à l'écart de la subjectivité, ajoutent en réalité davantage de "bruit". Le code propre parle beaucoup du bruit et de sa relation avec la lisibilité. On pourrait en conclure que plus il faut voir d'espaces non blancs, plus cela nuit à la lisibilité. Si appliqué à la subjectivité, la plupart des endroits que j'ai pris le temps de lire préfèrent les guillemets simples aux guillemets doubles.

Utilisez votre jugement.

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

Est beaucoup plus lisible que:

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

Je vais admettre que:

$var = "My string.";

Ressemble presque à:

$var = 'My String.';

Cependant, cette dernière introduit moins de bruit et quand il y a beaucoup de code autour de cela chaque aide est utile, sans parler des autres avantages de l'utilisation de guillemets simples.

En fin de compte, je préfère KISS. Utilisez des guillemets simples, sauf si vous avez besoin de guillemets doubles. Une convention simple, plus facile à taper, à maintenir, à analyser et à lire.

5
Tres

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, je vais concaténer avec des guillemets simples.

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

J'espère que cela a du sens. Il s’agit de trouver une convention et de la respecter.

0
Martin Bean

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

Personnellement, je me sens mieux en utilisant le $string="Hi, my name is $name", car vous n'avez pas besoin de jouer avec les guillemets. Imaginez juste la requête SQL complexe avec, disons, 10 variables ...

0
Andrejs Cainikovs

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-janvier- iap-2010/lecture-notes/MIT6_088IAP10_lec01.pdf

Diapositive # 3

Alors ne vous inquiétez pas trop des petites optimisations comme celles-ci.

Concentrez-vous davantage sur l'utilisation d'APC pour mettre votre code en cache dans du code octet. Vous verrez de gros gains de vitesse pour le projet.

0
Homer6

Ma devise et ma réponse sont les suivantes: laissez les compilateurs é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 des performances, utilisez simplement APC sur des serveurs de production. Concentrez-vous plutôt sur l'écriture du code le plus facile à gérer. utilisez correctement les commentaires, les guillemets, etc. même s'ils risquent de ralentir le code. Toute optimisation réduisant la maintenabilité/lisibilité du code est mauvaise, laissez le soin aux transposeurs d’opcodes et aux compilateurs de transformer votre code en code machine, ne le faites pas vous-même.

0
Gabor de Mooij

La chaîne entre guillemets simples est une meilleure option que pour les chaînes à guillemets doubles 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
DkPathak