Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ecriture des variables dans les chaines

6 réponses
Avatar
Pascal PONCET
Salut,

J'ai pris l'habitude d'écrire les variables contenues dans des chaînes
de la manière suivante :

$chaîne = "Exemple de texte avec une {$variable} au milieu";

Je trouve :
1. que l'on y gagne en visibilité, même (et des fois surtout) avec la
coloration syntaxique des éditeurs, mais c'est peut-être une affaire de
goût.
2. que c'est une manière uniformisée de traiter tout type de variables
dans les chaînes, par exemple {$tab[2]}, {$tab["nom"]} ou {$obj->prop},
ce qui serait impossible sans cela.

Je sais, pour les puristes, c'est sans doute moins rapide (et peut-être
moins clean) que la concaténation, quoi que... !
Justement, l'un de vous a-t-il déjà vu ou fait un benchmark comparatif
entre ces diverses notations ?

Je me demande, en effet, si PHP ne se voit pas grandement facilité la
tâche avec ces délimiteurs que sont les accolades.

Merci, Pascal

6 réponses

Avatar
Olivier Miakinen

J'ai pris l'habitude d'écrire les variables contenues dans des chaînes
de la manière suivante :

$chaîne = "Exemple de texte avec une {$variable} au milieu";


Ça me semble une saine habitude, que j'aurais peut-être prise si j'avais
connu cette syntaxe dès le début. Moi je ne mets pas les accolades, ce
qui m'oblige à supprimer les guillemets dans le cas (exceptionnel tout
de même) où je mets un élément de tableau associatif.

Je trouve :
1. que l'on y gagne en visibilité, même (et des fois surtout) avec la
coloration syntaxique des éditeurs, mais c'est peut-être une affaire de
goût.


J'aurais dit « lisibilité » plutôt que « visibilité », mais je suis
d'accord.

2. que c'est une manière uniformisée de traiter tout type de variables
dans les chaînes, par exemple {$tab[2]}, {$tab["nom"]} ou {$obj->prop},
ce qui serait impossible sans cela.


En fait, comme dit plus haut, je n'utilise qu'exceptionnellement autre
chose que les variables simples. Du coup, je n'ai besoin des accolades
que lorsque la variable est suivie d'un caractère pouvant faire partie
d'un identificateur.

Je sais, pour les puristes, c'est sans doute moins rapide (et peut-être
moins clean) que la concaténation, quoi que... !


Quelqu'un avait fait l'expérience, et je crois que cela pouvait être
tantôt plus rapide mais tantôt plus lent. Cela dit, les puristes savent
que dans un « vrai » programme (c.-à-d. pas un benchmark) la différence
est absolument négligeable par rapport au temps passé ailleurs.

Justement, l'un de vous a-t-il déjà vu ou fait un benchmark comparatif
entre ces diverses notations ?


Oui, cela a été fait, mais il doit falloir remonter assez loin dans
les archives. Ne compte pas sur moi pour le faire, vu l'inutilité du
résultat.

Je me demande, en effet, si PHP ne se voit pas grandement facilité la
tâche avec ces délimiteurs que sont les accolades.


En fait, accolades ou pas accolades, moi je milite régulièrement pour
mettre les variables au milieu de la chaîne avec guillemets doubles,
tout en utilisant les guillemets simples pour les attributs HTML.

En effet, question lisibilité, je préfère de beaucoup :
echo "<img id='$id' src='$src' alt='$alt' title='$title'>n";
... à toutes les autres syntaxes que l'on voit habituellement.


Quelques exemples qui me semblent à éviter :

echo "<img id="$id" src="$src" alt="$alt" title="$title">n";

echo '<img id="' . $id . '" src="' . $src . '" alt="' . $alt .
'" title="' . $title . '">' . "n";

echo '<img id="'.$id.'" src="'.$src.'" alt="'.$alt.'" title="'.$title
.'">'."n";

En revanche, je ne vois aucun inconvénient à écrire :
echo "<img id='{$id}' src='{$src}' alt='{$alt}' title='{$title}'>n";

Avatar
Pascal PONCET
Ouais, je m'a gouré ! C'était bien de "lisibilité" dont je voulais
parler. Heureusement, y en a un qui suit ;-)

Pour ce qui est de tes exemples, genre :
< echo "<img id="$id" src="$src" alt="$alt" title="$title">n";
je suis 100% d'accord, c'est carrément illisible.

Mais c'est surtout hyper pratique pour les variables complexes genre
tableau associatif ou objets.
Moi, c'est l'inverse, j'utilise beaucoup plus ce type de variables.

Ma question se centrait en fait plus au niveau du moteur Zend, pour
savoir si les accolades lui faisaient gagner du temps de traitement dans
la compil du code.
Comme je les utilise systématiquement, sur une appli un peu lourde ça
peut jouer pas mal, peut-être.

Mais je suis d'accord aussi sur le fait que les benchmarks sont toujours
difficiles à rapprocher, dans l'interprétation des résultats, d'une
appli réelle. C'est notre lot...
Avatar
Olivier Miakinen

Ouais, je m'a gouré ! C'était bien de "lisibilité" dont je voulais
parler. Heureusement, y en a un qui suit ;-)


:-D

Pour ce qui est de tes exemples, genre :
< echo "<img id="$id" src="$src" alt="$alt" title="$title">n";
je suis 100% d'accord, c'est carrément illisible.


Et pourtant, c'est très courant, quoique peut-être pas aussi courant que
mon 3e exemple (avec concaténation, sans espaces), que je trouve encore
plus illisible.

Ma question se centrait en fait plus au niveau du moteur Zend, pour
savoir si les accolades lui faisaient gagner du temps de traitement dans
la compil du code.
Comme je les utilise systématiquement, sur une appli un peu lourde ça
peut jouer pas mal, peut-être.

Mais je suis d'accord aussi sur le fait que les benchmarks sont toujours
difficiles à rapprocher, dans l'interprétation des résultats, d'une
appli réelle. C'est notre lot...


Ce n'est pas ce que je disais. Je vais beaucoup plus loin en disant que,
quelle que soit la méthode, le temps passé à interpréter les chaînes de
caractères est inférieur à un millième du temps total.

En conclusion : plutôt que chercher à économiser des pouillèmes de
cycles CPU, il faut choisir dans tous les cas l'écriture que l'on trouve
soi-même la plus lisible. -- Tu préfères les variables entre accolades ?
Aucune hésitation : utilise-les partout !

Avatar
P'tit Marcel
J'ai pris l'habitude d'écrire les variables contenues dans des chaînes
de la manière suivante :
$chaîne = "Exemple de texte avec une {$variable} au milieu";

Je sais, pour les puristes, c'est sans doute moins rapide (et peut-être
moins clean) que la concaténation, quoi que... !
Justement, l'un de vous a-t-il déjà vu ou fait un benchmark comparatif
entre ces diverses notations ?


Guillaume Bouchard (?) avait fait un comparatif il y a 2/3 ans entre la
notation avec des ' et des concaténations par rapport à celle avec des
". à mon souvenir, après quelques millions d'itérations, la différence
était très faible.


a+
--
P'tit Marcel
pourquoi personne y répond à ma question :'(
<news:

Avatar
dwojylac.nospam
Olivier Miakinen <om+ wrote:

Quelques exemples qui me semblent à éviter :

echo "<img id="$id" src="$src" alt="$alt" title="$title">n";

echo '<img id="' . $id . '" src="' . $src . '" alt="' . $alt .
'" title="' . $title . '">' . "n";

echo '<img id="'.$id.'" src="'.$src.'" alt="'.$alt.'" title="'.$title
.'">'."n";

En revanche, je ne vois aucun inconvénient à écrire :
echo "<img id='{$id}' src='{$src}' alt='{$alt}' title='{$title}'>n";


et, echo '<img id="', $id, '" src="', $src, '" alt="', $alt, '" title="'
, $title, '">',"n"; ?


--
http://wojylac.free.fr
Un proverbe chinois dit que lorsqu'on a rien à dire
on cite généralement un proverbe chinois.

Avatar
Olivier Miakinen
Le 30/04/2007 13:47, Dominique m'a répondu :

Quelques exemples qui me semblent à éviter :

[...]

echo '<img id="' . $id . '" src="' . $src . '" alt="' . $alt .
'" title="' . $title . '">' . "n";

echo '<img id="'.$id.'" src="'.$src.'" alt="'.$alt.'" title="'.$title
.'">'."n";


et, echo '<img id="', $id, '" src="', $src, '" alt="', $alt, '" title="'
, $title, '">',"n"; ?


Je ne fais pas de différence entre ces trois écritures du point de vue
de la lisibilité. Changer les « . » par des « , » et mettre une espace
après et pas avant, ça ne change rien au fait que chaque attribut est
coupé en trois parties, la troisième partie étant liée avec la première
partie de l'attribut suivant...

Éventuellement, je ne verrais pas d'inconvénient à écrire :

echo "<img ", " id='$id' ", " src='$src' ",
" alt='$alt' ", " title='$title' ", ">n";

Voire :

echo "<img", " ", "id='$id'", " ", "src='$src'", " ",
"alt='$alt'", " ", "title='$title'", ">n";

Mais je préfère quand même :

echo "<img id='$id' src='$src' alt='$alt' title='$title'>n";

Ou pourquoi pas :

$Xid = "id='$id'";
$Xsrc = "src='$src'";
$Xalt = "alt='$alt'";
$Xtitle = "title='$title'";
echo "<img $Xid $Xsrc $Xalt $Xtitle>n";