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

T_PAAMAYIM_NEKUDOTAYIM et quote

11 réponses
Avatar
Olivier Masson
Salut,

J'avais déjà lu que ce superbe message d'erreur signifiait vaguement
qu'il y avait 2 "deux points" (:) où il ne fallait pas.
Mais je l'ai eu dans un tout autre contexte, quand j'ai voulu voir ce
que provoquait un unset de constante :
declare('YOUPI','Salut !');
unset(YOUPI);

Bon, sans grand intérêt.

Par contre, qq un saurait-il pourquoi tous les exemples de la doc de php
utilise les double quotes plutôt que les simples ?
define("youpi","bonjour !");
plutôt que define('youpi','bonjour !');
C'est très très légèrement plus long à l'exécution et c'est très
légèrement plus risqué d'utiliser les double quotes partout.

Merci.

10 réponses

1 2
Avatar
Jean-Francois Ortolo
Le 08/07/2009 11:26, Olivier Masson a écrit :
Salut,

J'avais déjà lu que ce superbe message d'erreur signifiait vaguement
qu'il y avait 2 "deux points" (:) où il ne fallait pas.
Mais je l'ai eu dans un tout autre contexte, quand j'ai voulu voir ce
que provoquait un unset de constante :
declare('YOUPI','Salut !');
unset(YOUPI);

Bon, sans grand intérêt.

Par contre, qq un saurait-il pourquoi tous les exemples de la doc de php
utilise les double quotes plutôt que les simples ?
define("youpi","bonjour !");
plutôt que define('youpi','bonjour !');
C'est très très légèrement plus long à l'exécution et c'est très
légèrement plus risqué d'utiliser les double quotes partout.

Merci.




Bonjour Monsieur

declare() ou define() ?

Il me semble que le PHP Manual est explicite sur la façon de faire en
sorte, pour qu'un constante ne soit plus définie.

Je vous avoue humblement, que je n'ai plus en tête la fonction en
question.

Bien à vous.

Amicalement.

Jean-François Ortolo

--
Visitez le site http://www.pronostics-courses.fr/
qui donne des Statistiques, Pronostics et Historiques graphiques.

Les Statistiques sont calculées d'après une base de données
allant du 1/01/2000 jusqu'à très récemment.
Avatar
Olivier Miakinen
Bonjour,

Le 08/07/2009 11:26, Olivier Masson a écrit :

J'avais déjà lu que ce superbe message d'erreur signifiait vaguement
qu'il y avait 2 "deux points" (:) où il ne fallait pas.



Seulement si c'est « unexpected T_PAAMAYIM_NEKUDOTAYIM », parce que si
tu as « expecting T_PAAMAYIM_NEKUDOTAYIM » c'est le contraire.

Par contre, qq un saurait-il pourquoi tous les exemples de la doc de php
utilise les double quotes plutôt que les simples ?
define("youpi","bonjour !");
plutôt que define('youpi','bonjour !');
C'est très très légèrement plus long à l'exécution et c'est très
légèrement plus risqué d'utiliser les double quotes partout.



À mon très humble avis :
1) la différence de traitement est complètement négligeable (mais je
n'entrerai pas dans le débat de ce marronnier) ;
2) je trouve au contraire *moins* risqué pour un débutant de n'utiliser
qu'une seule des quatre syntaxes de chaînes, et de la connaître à fond,
alors qu'un programmeur expérimenté saura bien les différences entre les
quatre ;
3) il vaut mieux que dans la doc ils n'utilisent qu'une seule syntaxe
quand elles sont équivalentes, justement pour ne pas paumer le débutant.

--
Olivier Miakinen
Avatar
Olivier Masson
Jean-Francois Ortolo a écrit :


Bonjour Monsieur

declare() ou define() ?




oups... define bien sûr.
Avatar
Olivier Masson
Olivier Miakinen a écrit :

À mon très humble avis :
1) la différence de traitement est complètement négligeable (mais je
n'entrerai pas dans le débat de ce marronnier) ;



En effet : http://www.phpbench.com/ (en bas)
Du coup, j'ai été très surpris par les différences entre foreach, while
et for !

2) je trouve au contraire *moins* risqué pour un débutant de n'utiliser
qu'une seule des quatre syntaxes de chaînes, et de la connaître à fond,
alors qu'un programmeur expérimenté saura bien les différences entre les
quatre ;



"connaitre à fond" l'utilisation de la simple quote :) Y'a des
formations là-dessus ?
Avatar
Olivier Miakinen
Le 08/07/2009 14:08, Olivier Masson a écrit :

2) je trouve au contraire *moins* risqué pour un débutant de n'utiliser
qu'une seule des quatre syntaxes de chaînes, et de la connaître à fond,
alors qu'un programmeur expérimenté saura bien les différences entre les
quatre ;



"connaitre à fond" l'utilisation de la simple quote :) Y'a des
formations là-dessus ?



:-D

Note que d'abord ce n'est pas forcément trivial, par exemple tout le
monde ne sait pas nécessairement si '"' fait un ou deux caractères.

Mais surtout, on ne peut pas écrire n'importe quel caractère avec
les guillemets simples alors qu'on peut toujours le faire avec les
guillemets doubles. Par exemple "n" ou "x00".

--
Olivier Miakinen
Avatar
Mickael Wolff
Olivier Masson a écrit :
Mais je l'ai eu dans un tout autre contexte, quand j'ai voulu voir ce
que provoquait un unset de constante :
declare('YOUPI','Salut !');


Utiliser YOUPI alors que tu parles de T_PAAMAYIM_NEKUDOTAYIM, ce
n'est pas très heureux. Heureusement que les antisémites ne sont pas
légions ici.

unset(YOUPI);


À mon avis, tu à dû taper : au lieu de ;
Ça m'arrive souvent, c'est énervant. Ces deux touches sont trop
proches, et les caractères trop semblables ;)

Par contre, qq un saurait-il pourquoi tous les exemples de la doc de php
utilise les double quotes plutôt que les simples ?


Certainement parce qu'il est plus naturel pour des développeurs C
d'utiliser cette syntaxe.

define("youpi","bonjour !");
plutôt que define('youpi','bonjour !');
C'est très très légèrement plus long à l'exécution et c'est très
légèrement plus risqué d'utiliser les double quotes partout.


À la rigueur, la performance d'exécution n'est pas le problème
majeur. Le soucis est réellement le caractère magique des chaînes
embrassées de doubles-quotes. Personnellement, j'utilise
systématiquement la simple quote car :
- il n'y a pas de surprise lors de l'interprétation de la chaîne
- " ressemble top à '' et me fait mal aux yeux
- c'est légèrement plus rapide

La simple quote s'impose encore plus depuis l'apparition des
namespaces en PHP 5.3.

call_user_func('magicabracadabra', 'zombie') ;
call_user_func("magicabracadabra", 'zombie') ; // bon courage pour
trouver l'erreur

Bon, c'est immédiat pour celui qui connais les séquences
d'échappement, ou dont l'éditeur de texte a une coloration syntaxique
interprétant le contenu des chaînes, mais c'est quand même un piège à con.

C'était ma contribution au marronnier :D
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Seeking for a position <http://lupusmic.org/pro/>
Avatar
Olivier Masson
Mickael Wolff a écrit :
Olivier Masson a écrit :
Mais je l'ai eu dans un tout autre contexte, quand j'ai voulu voir ce
que provoquait un unset de constante :
declare('YOUPI','Salut !');


Utiliser YOUPI alors que tu parles de T_PAAMAYIM_NEKUDOTAYIM, ce n'est
pas très heureux. Heureusement que les antisémites ne sont pas légions ici.




Pfffiouu, fallait la chercher celle-là !
Mais il manque un substr($pas_bien,0,-1)

unset(YOUPI);


À mon avis, tu à dû taper : au lieu de ;
Ça m'arrive souvent, c'est énervant. Ces deux touches sont trop
proches, et les caractères trop semblables ;)




Niet. Comme je suis généreux, je te donne *mon* code que je veux bien
toutefois laisser en GPL :
<?php
/* Trezutile V1.1(R-version) */
error_reporting(255);
define('SALUT','hello !');
unset(SALUT);
?>

- il n'y a pas de surprise lors de l'interprétation de la chaîne



c'est bien cela qui me gêne.

- " ressemble top à '' et me fait mal aux yeux
- c'est légèrement plus rapide



mettons fin à cela puisque ce n'est finalement pas vrai.


La simple quote s'impose encore plus depuis l'apparition des
namespaces en PHP 5.3.

call_user_func('magicabracadabra', 'zombie') ;
call_user_func("magicabracadabra", 'zombie') ; // bon courage pour
trouver l'erreur




Oui ! A quand PHP 5.3 dans lenny ?

Bon, c'est immédiat pour celui qui connais les séquences
d'échappement, ou dont l'éditeur de texte a une coloration syntaxique
interprétant le contenu des chaînes, mais c'est quand même un piège à con.

C'était ma contribution au marronnier :D



Je vais lancer un fil sur GOTO maintenant :) (ceci dit, la bande de la
page consacrée à goto sur php.net est pas mal)
Avatar
Olivier Masson
Olivier Miakinen a écrit :

Note que d'abord ce n'est pas forcément trivial, par exemple tout le
monde ne sait pas nécessairement si '"' fait un ou deux caractères.

Mais surtout, on ne peut pas écrire n'importe quel caractère avec
les guillemets simples alors qu'on peut toujours le faire avec les
guillemets doubles. Par exemple "n" ou "x00".




Tiens, moi je dirais surtout que la difficulté réside l'utilisation de
variables entre guillemets.
"ex. : $tab['ok']"
Avatar
Olivier Miakinen
Le 08/07/2009 16:57, Olivier Masson a écrit :

Tiens, moi je dirais surtout que la difficulté réside l'utilisation de
variables entre guillemets.
"ex. : $tab['ok']"



Ok, mais c'est un peu hors sujet dans la discussion (que tu as lancée
toi-même) au sujet de pourquoi dans la doc PHP ils écrivent :
define("youpi","bonjour !");
plutôt que :
define('youpi','bonjour !');

--
Olivier Miakinen
Avatar
Pascal PONCET
Olivier Masson a écrit :

Tiens, moi je dirais surtout que la difficulté réside l'utilisation de
variables entre guillemets.
"ex. : $tab['ok']"



Bonjour,

Variante élégante (à mon avis du moins) :

<code>
$machin_truc = "ex. : {$tab['ok']}";
// ou même : $machin_truc = "ex. : {$tab["ok"]}";
</code>

L'avantage des accolades est qu'elles permettent d'inclure tout type de
données (scalaires, tableaux, objets) à interpréter dans une chaîne, et
de l'écrire *exactement* comme on l'aurait fait en dehors de la chaîne.

Elles permettent aussi de lever toute ambiguïté sur l'interprétation.
Exemple :

<code>
$ref = "{$catalog_id}{$product->ref}_{$variant[1]}";
// désolé pour les adeptes de la concaténation qui vont hurler !
</code>

Par contre, leur principal inconvénient est que certains éditeurs ne
savent les distinguer dans la chaîne au niveau de la coloration syntaxique.

Cordialement,
Pascal
1 2