web-dev-qa-db-fra.com

Devrais-je utiliser des supports bouclés ou des variables de concaténate au sein des chaînes?

Existe-t-il un avantage ou un inconvénient de concaténer des variables dans des cordes ou d'utiliser des accolades frisées à la place?

concaténé:

$greeting = "Welcome, " . $name . "!";

Bretelles bouclées:

$greeting = "Welcome, {$name}!";

Personnellement, j'ai toujours concaténé mes cordes, parce que j'utilise estudio , et il met en évidence PHP variables avec une couleur différente lorsqu'elle est concaténée. Cependant, lorsque la variable n'est pas éclaté, ce n'est pas le cas. Cela facilite simplement mes yeux de trouver PHP Variables dans de longues chaînes, etc.

Les gens confondent cela à propos de SQL. C'est pas Quelle est cette question. J'ai mis à jour mes exemples pour éviter la confusion.

46
Michael Irigoyen

Tout ce qui suit fait la même chose si vous regardez la sortie.

  1. $greeting = "Welcome, " . $name . "!";
  2. $greeting = 'Welcome, ' . $name . '!';
  3. $greeting = "Welcome, $name!";
  4. $greeting = "Welcome, {$name}!";

Vous ne devriez pas utiliser l'option 1, utilisez l'option 2 à la place. Les options 3 et 4 sont identiques. Pour une simple variable, les accolades sont facultatives. Mais si vous utilisez des éléments de tableau, vous devez utiliser des accolades; par exemple.: $greeting = "Welcome, {$user['name']}!";. Par conséquent, comme une norme, des accolades sont utilisées si une interpolation variable est utilisée, au lieu de la concaténation.

Mais si des caractères tels que l'onglet (\t), nouvelle ligne (\n) sont utilisés, ils doivent être dans des devis doubles.

Une interpolation généralement variable est lente, mais la concaténation peut également être plus lente si vous avez trop de variables pour concaténer. Par conséquent, décidez en fonction du nombre de variables entre autres caractères.

45
Amil Waduwawara

Bien que ne traitent pas d'attaques d'injection (y compris SQLI), il devrait au moins être noté - en particulier pour PHP Devs - qui en utilisant l'une des techniques ci-dessus sans d'abord codant et validant toutes les entrées vous mènera à une attaque à base d'injection.

Il est important de se souvenir de la sécurité au début du codage - et non de la fin lorsque tout le code doit être refait à se conformer aux exigences de sécurité. Ou, lorsque vous obtenez enfin ce dang "vs" guerre "vs" et réalisez que cela n'a pas d'importance, car vous êtes sensible aux XSS à l'aide de la technique sans encoder et valider toutes les entrées.

  1. Encode en utilisant urlencode () ou HTMLenities () Normaliser les intrants (s).
  2. Utilisez la typage des données pour les non-chaînes OU Dictionary-Recherche et/ou expressions régulières pour les chaînes à valider.
  3. Profit?
3

Avec pré-comiled PHP (cache bytecode), cela ne fait aucune différence.

Cette fonctionnalité vient avec PHP 5,5 (Zend Optimizer +).

2
alexwenzel