web-dev-qa-db-fra.com

PHP - concaténer ou insérer directement des variables dans une chaîne

Je me demande quelle est la bonne façon d'insérer des variables PHP dans une chaîne?

De cette façon:

echo "Welcome ".$name."!"

ou de cette façon:

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é.

197
Web_Designer

Entre ces deux syntaxes, vous devriez vraiment choisir celle que vous préférez :-)

Personnellement, j'irais avec votre deuxième solution dans un tel cas (interpolation de variable), que je trouve plus facile à la fois d'écrire et de lire.

Le résultat sera le même; et même s'il y a des implications sur les performances, celles-ci n'auront aucune importance 1.


En résumé, 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 recourir aux 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.

312
Pascal MARTIN

Les chaînes entre guillemets sont plus élégantes, car vous n'avez pas besoin de les séparer chaque fois que vous devez insérer une variable (comme vous devez le faire avec des chaînes entre guillemets simples).

Toutefois, si vous devez insérer la valeur de retour d'une fonction, vous ne pouvez pas l'insérer dans une chaîne entre guillemets, même si vous l'entourez d'accolades!

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

//the only option
$s = "Hello " . trim($world) . "!";
16
Michael

Depuis php4, vous pouvez utiliser un formateur de chaîne:

$num = 5;
$Word = 'banana';
$format = 'can you say %d times the Word %s';
echo sprintf($format, $num, $Word);

Source: sprintf ()

8
Olivier Royo

L'un ou l'autre va bien. Utilisez celui qui a une meilleure visibilité pour vous. Et en parlant de visibilité, vous pouvez également consulter printf .

6

Je sais que cette question a déjà une réponse choisie, mais j'ai trouvé cet article qui montre de manière évidente que l'interpolation de chaîne fonctionne plus rapidement que la concaténation. Cela pourrait être utile pour ceux qui doutent encore.

5
Denis V

Du point de vue de la fabrication pense simple, lisible, cohérent et facile à comprendre (puisque la performance ne t importe ici):

  • L'utilisation de vars incorporés entre guillemets peut entraîner des situations complexes et source de confusion lorsque vous souhaitez incorporer des propriétés d'objet, des tableaux multidimensionnels, etc. En d'autres termes, lorsque vous lisez des vars incorporés, vous ne pouvez pas être instantanément sûr à 100% du comportement final de ce que vous lisez. .

  • Il est souvent nécessaire d’ajouter des béquilles telles que {} et \, auquel IMO ajoute de la confusion et rend la lisibilité de la concaténation presque équivalente, sinon meilleure.

  • Dès que vous devez encapsuler un appel de fonction autour de la variable var, par exemple htmlspecialchars($var), vous devez passer en concaténation.

  • Autant que je sache, vous ne pouvez pas incorporer de constantes.

Dans certains cas spécifiques, des "guillemets doubles avec insertion de vars" peuvent être utiles, mais en général, je choisirais concaténation (utiliser des guillemets simples ou doubles lorsque cela convient)

4
Frosty Z

Allez avec le premier et utilisez des guillemets simples!

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

Les seules situations dans lesquelles vous devez utiliser des guillemets, sont lorsque vous avez besoin de \r, \n, \t! Les frais généraux ne valent tout simplement pas la peine de les utiliser dans d'autres cas.

Vous devriez également vérifier concaténation de variable PHP , phpbench.com pour obtenir des points de repère sur différentes méthodes de travail.

3
Khez

Ce n'est qu'une question de goût.
Utilisez ce que vous voulez.

La plupart du temps, j'utilise un second mais cela dépend.

Laissez-moi vous suggérer également de vous procurer un bon éditeur qui mettra en évidence une variable à l'intérieur d'une chaîne.

2

Ne pas concaténer. Ce n'est pas nécessaire, nous les virgules car l'écho peut prendre plusieurs paramètres

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

En ce qui concerne l'utilisation de guillemets simples ou doubles, la différence est négligeable. Vous pouvez effectuer des tests avec un grand nombre de chaînes à tester par vous-même.

2
David Gillen

Vous devriez choisir le premier. Ils n'ont aucune différence sauf la performance du premier sera le rapide dans la comparaison du second.

Si la variable entre guillemets PHP prend du temps pour analyser la variable.

Découvrez ceci guillemets simples ou doubles pour la concaténation de variables?

Ceci est un autre exemple Existe-t-il un avantage de performance entre devis unique et double devis en php?

Je ne comprenais pas pourquoi cette réponse dans le lien ci-dessus obtenait un vote positif et pourquoi cette réponse recevait un vote négatif.

Comme j'ai dit la même chose.

Vous pouvez regarder ici aussi

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

1
Shakti Singh

Si vous souhaitez exécuter une commande SQL et que vos variables sont des membres de tableau, vous ne devez pas utiliser de guillemets simples dans [] of array (comme ceci: ['']); Par exemple, si vous utilisez cette chaîne en tant que commande SQL, vous obtenez server error 500:

$con = mysqli_connect('ServerName', 'dbUsername', 'dbPassword');
mysqli_select_db($con, 'dbName')

//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray['TraceNo']')";
mysqli_query($con, $sql)

La chaîne correcte est:

//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray[TraceNo]')";
1
Hamid Araghi

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 une préférence personnelle.

Performance: Aucune différence. Comme beaucoup l'ont mentionné, les guillemets doubles pourraient être plus rapides si vous utilisiez plusieurs variables de manière irréaliste.

Meilleure utilisation: Devis unique (la plupart du temps). Comme @Khez l'a dit, avec guillemets simples, vous pouvez tout concaténer, même les appels de fonction et les modifications de variables, comme suit: echo 'hi ' . trim($name) . ($i + 1);. La seule chose que les doubles guillemets peuvent faire est que les guillemets simples ne peuvent pas utiliser est l'utilisation de \n, \r, \t et similaires.

Lisibilité: Aucune différence (une préférence personnelle s'applique).

Writability/Re-Writability/Debugging: Dans les instructions d'une ligne, il n'y a pas de différence, mais lorsque vous utilisez plusieurs lignes, il est plus facile de commenter/supprimer les lignes de commentaire lors du débogage ou de 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 fuite: guillemets simples. Pour les guillemets simples, vous ne devez échapper que 2 caractères (' et \). Pour les guillemets doubles, vous devez échapper à 2 caractères (", \) et à 3 autres si nécessaire ($, { et }).

Moins de changements: Devis unique. Par exemple si vous avez le code suivant:

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

Et vous devez incrémenter de 1 à $ i, ainsi cela devient:

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

Mais pour les devis doubles, vous devrez changer ceci:

echo "Number $i!";

pour ça:

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

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

0
evilReiko