PHP-concatenate ou insérer directement des variables dans la chaîne

je me demande, Quelle est la bonne façon d'insérer des variables PHP dans une chaîne de caractères?



de Cette façon:

echo "Welcome ".$name."!"

ou par ici:

echo "Welcome $name!"

ces deux méthodes fonctionnent dans mon PHP v5.3.5 . Ce dernier est plus court et plus simple mais je ne suis pas sûr si le premier est meilleur formatage ou accepté comme plus approprié.

177
demandé sur Web_Designer 2011-04-09 19:39:35

11 réponses

entre ces deux syntaxes, vous devez vraiment choisir celui que vous préférez: -)

personnellement , j'irais avec votre deuxième solution dans un tel cas (interpolation Variable) , que je trouve plus facile à écrire et à lire.

Le résultat sera le même; et même si il y a des implications sur les performances, celles qui ne sera pas question 1 .



En tant que sidenote, donc ma réponse est un peu plus complète: le jour où vous voudrez faire quelque chose comme ceci:

echo "Welcome $names!";

PHP interprétera votre code comme si vous essayiez d'utiliser la variable $names -- qui n'existe pas.

ce jour-là, vous devrez utiliser {} :

echo "Welcome {$name}s!"

pas besoin de tomber en concaténations.



Notez également que votre première syntaxe:

echo "Welcome ".$name."!";

pourrait probablement être optimisé , en évitant les concaténations, en utilisant:

echo "Welcome ", $name, "!";

(mais, comme je l'ai dit plus tôt, cela n'a pas beaucoup d'importance...)



1 - à moins que vous ne fassiez des centaines de milliers de concaténations vs interpolations -- et ce n'est probablement pas tout à fait le cas.

275
répondu Pascal MARTIN 2013-12-25 17:30:56

les chaînes à guillemets doubles sont plus élégantes parce que vous n'avez pas à briser votre chaîne chaque fois que vous avez besoin d'insérer une variable (comme vous devez le faire avec les chaînes à guillemets simples).

Toutefois, si vous avez besoin d'insérer la valeur de retour d'une fonction, cela ne peut pas être inséré dans une chaîne entre guillemets, même si vous l'entourer d'accolades!

//syntax error!!
//$s = "Hello {trim($world)}!"

//the only option
$s = "Hello " . trim($world) . "!";
15
répondu Michael 2011-04-09 15:52:13

L'un ou l'autre est très bien. Utilisez celle qui a une meilleure visibilité pour vous. En ce qui concerne la visibilité, vous pouvez aussi consulter printf .

5
répondu Manos Dilaverakis 2013-07-21 14:45:09

du point de vue de la fabrication pense simple , lisible , cohérent et facile à comprendre (puisque la performance n'a pas d'importance ici):

  • L'utilisation de variateurs intégrés dans des guillemets doubles peut conduire à des situations complexes et confuses lorsque vous voulez intégrer des propriétés d'objet, des tableaux multidimensionnels, etc. C'est, en général lors de la lecture vars intégrés, vous ne pouvez pas être instantanément sûr à 100% du comportement final de ce que vous lisez.

  • vous devez souvent ajouter des béquilles telles que {} et \ , ce qui IMO ajoute la confusion et rend la lisibilité de la concaténation presque équivalente, sinon meilleure.

  • dès que vous avez besoin d'enrouler un appel de fonction autour du var, par exemple htmlspecialchars($var) , vous devez passer à la concaténation.

  • AFAIK, vous ne pouvez pas intégrer les constantes.

dans certains cas spécifiques ," double guillemets avec insertion de Var" peut être utile, mais de manière générale, je dirais concaténation (en utilisant des guillemets simples ou doubles lorsque cela convient)

4
répondu Frosty Z 2011-08-23 12:08:48

je sais que cette question a déjà une réponse choisie, mais j'ai trouvé cet article qui montre évidemment que l'interpolation de chaîne fonctionne plus vite que la concaténation. Il pourrait être utile pour ceux qui sont encore dans le doute.

4
répondu Denis V 2013-04-13 23:20:17

depuis php4 vous pouvez utiliser un formater de chaîne de caractères:

$num = 5;
$word = 'banana';
$format = 'can you say %d times the word %s';
echo sprintf($format, $num, $word);
4
répondu Olivier Royo 2016-03-11 19:18:48

Aller avec le premier et utiliser les guillemets simples!

  1. C'est plus facile à lire, ce qui signifie que les autres programmeurs sauront ce qui se passe
  2. ça marche un peu plus vite, la façon dont les opcodes sont créés quand PHP dissèque votre code source, ça va le faire de toute façon, alors donnez-lui un coup de main!
  3. si vous utilisez aussi des guillemets simples au lieu de guillemets doubles, vous augmenterez encore plus vos performances.

les seules situations où vous devez utiliser des guillemets, est quand vous avez besoin \r , \n , \t ! La surcharge est juste pas la peine de l'utiliser dans les autres cas.

Vous devriez également vérifier PHP variable concaténation , phpbench.com pour quelques repères sur les différentes méthodes de faire les choses.

3
répondu Khez 2017-05-23 12:26:20

ce n'est qu'une question de goût.

Utilisez ce que vous souhaitez.

la plupart du temps, j'utilise la seconde, mais cela dépend.

Permettez-moi de vous suggérer aussi de vous procurer un bon éditeur qui mettra en évidence une variable à l'intérieur d'une chaîne de caractères

2
répondu Your Common Sense 2011-04-09 15:48:10

ne pas concaténer. Ce n'est pas nécessaire, commas us comme echo peut prendre plusieurs paramètres

echo "Welcome ", $name, "!";

concernant l'utilisation de guillemets simples ou doubles la différence est négligeable, vous pouvez faire des tests avec un grand nombre de chaînes pour tester par vous-même.

2
répondu David Gillen 2011-04-09 16:00:04

vous devez choisir le premier. Ils n'ont pas de différence sauf la performance le premier sera le rapide dans la comparaison du second.

si la variable à l'intérieur de la double citation PHP prendre le temps d'analyser la variable.

Regardez ce guillemets simples ou guillemets doubles pour concaténation variable?

il s'agit d'un autre exemple y a-t-il un avantage lié à la performance prix unique vs double citation en php?

Je n'ai pas compris pourquoi cette réponse dans le lien ci-dessus obtenir upvoted et pourquoi cette réponse a obtenu downvoted.

comme je l'ai dit.

, Vous pouvez la regarder ici

Qu'est-ce qui est plus rapide en PHP, entre guillemets simples ou doubles?

1
répondu Shakti Singh 2017-05-23 12:34:26

je sais que c'est une vieille question, mais je pense que quelqu'un doit mentionner tous les avantages et inconvénients:

meilleure syntaxe : c'est la préférence personnelle.

Performance : pas de différence. Comme beaucoup l'ont mentionné, les doubles citations pourraient être plus rapides si on utilise un nombre irréaliste de variables.

meilleur Usage : citation unique (la plupart du temps). Comme @Khez l'a dit, avec des vous pouvez concaténer n'importe quoi, même les appels de fonction et la modification de variable, comme ainsi: echo 'hi ' . trim($name) . ($i + 1); . La seule chose que double-citation peut faire que simple-citation ne peut pas faire est l'utilisation de \n , \r , \t et semblables.

lisibilité : aucune différence (la préférence personnelle peut s'appliquer).

Writability / Re-Writability/Debugging : dans les énoncés d'une ligne il n'y a pas de différence, mais lorsqu'il s'agit de lignes multiples, il est plus facile de commenter/décommenter les lignes pendant le débogage ou l'écriture. Par exemple:

$q = 'SELECT ' .
     't1.col1 ' .
     ',t2.col2 ' .
   //',t3.col3 ' .
     'FROM tbl1 AS t1 ' .
     'LEFT JOIN tbl2 AS t2 ON t2.col2 = t1.col1 ' .
   //'LEFT JOIN tbl3 AS t3 ON t3.col3 = t2.col2 ' .
     'WHERE t1.col1 = ' . $x . ' ' .
     '  AND t2.col2 = ' . $y . ' ' .
   //'  AND t3.col3 = ' . $z . ' ' .
     'ORDER BY t1.col1 ASC ' .
     'LIMIT 10';

Moins de s'Échapper du : un Seul devis. Pour un devis simple, vous devez échapper à 2 caractères seulement ( ' et \ ). Pour les guillemets doubles, vous devez échapper à 2 caractères ( " , \ ) et 3 autres si nécessaire ( $ , { et } ).

Moins de Changements : un Seul devis. Par exemple, si vous avez le code suivant:

echo 'Number ' . $i . '!';

et vous avez besoin d'augmenter de 1 à $i, de sorte qu'il devient comme:

echo 'Number ' . ($i + 1) . '!';

mais pour un double devis, vous devrez changer ceci:

echo "Number $i!";

à ceci:

echo "Number " . ($i + 1) . "!";

Conclusion : utilisez ce que vous préférez .

0
répondu evilReiko 2018-03-26 12:14:03