Discussion:
T_PAAMAYIM_NEKUDOTAYIM et quote
(trop ancien pour répondre)
Olivier Masson
2009-07-08 09:26:45 UTC
Permalink
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.
Jean-Francois Ortolo
2009-07-08 10:03:13 UTC
Permalink
Post by 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
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.
Olivier Masson
2009-07-08 12:08:19 UTC
Permalink
Post by Jean-Francois Ortolo
Bonjour Monsieur
declare() ou define() ?
oups... define bien sûr.
Olivier Miakinen
2009-07-08 10:43:23 UTC
Permalink
Bonjour,
Post by Olivier Masson
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.
Post by Olivier Masson
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
Olivier Masson
2009-07-08 12:08:20 UTC
Permalink
Post by Olivier Miakinen
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 !
Post by Olivier Miakinen
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 ?
Olivier Miakinen
2009-07-08 12:32:01 UTC
Permalink
Post by Olivier Masson
Post by Olivier Miakinen
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
Olivier Masson
2009-07-08 14:57:53 UTC
Permalink
Post by Olivier Miakinen
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']"
Olivier Miakinen
2009-07-08 15:06:58 UTC
Permalink
Post by Olivier Masson
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
Pascal PONCET
2009-07-08 15:24:32 UTC
Permalink
Post by Olivier Masson
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
Mickael Wolff
2009-07-08 12:32:01 UTC
Permalink
Post by Olivier Masson
Mais je l'ai eu dans un tout autre contexte, quand j'ai voulu voir ce
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.
Post by Olivier Masson
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 ;)
Post by Olivier Masson
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.
Post by Olivier Masson
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('magic\abracadabra', 'zombie') ;
call_user_func("magic\abracadabra", '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/>
Olivier Masson
2009-07-08 14:57:53 UTC
Permalink
Post by Olivier Masson
Mais je l'ai eu dans un tout autre contexte, quand j'ai voulu voir ce
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)
Post by Olivier Masson
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('magic\abracadabra', 'zombie') ;
call_user_func("magic\abracadabra", '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)
Mickael Wolff
2009-07-08 17:41:39 UTC
Permalink
Post by Olivier Masson
Niet. Comme je suis généreux, je te donne *mon* code que je veux bien
<?php
/* Trezutile V1.1(R-version) */
error_reporting(255);
define('SALUT','hello !');
unset(SALUT);
?>
Ah ouais, je pensais vraiment que tu avais un : qui traînait ^^;
Post by Olivier Masson
Post by Mickael Wolff
- il n'y a pas de surprise lors de l'interprétation de la chaîne
c'est bien cela qui me gêne.
Ça te gêne qu'il n'y a pas de surprise ?
Post by Olivier Masson
mettons fin à cela puisque ce n'est finalement pas vrai.
Ça l'est, mais c'est négligeable.
Post by Olivier Masson
Oui ! A quand PHP 5.3 dans lenny ?
<http://www.dotdeb.org/2009/07/03/php-5-3-0-final-preview-packages-available-for-debian-lenny/>
Post by Olivier Masson
Je vais lancer un fil sur GOTO maintenant :) (ceci dit, la bande de la
page consacrée à goto sur php.net est pas mal)
Bah, ça manquait. Et puis, ne soyons pas mauvaise langue : bien
utilisé, goto est une instruction fréquentable, la preuve :

grep -r '\<goto\>' /usr/src/linux/ | wc -l

hop ! je vais me cacher.
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Seeking for a position <http://lupusmic.org/pro/>
Continuer la lecture sur narkive:
Loading...