Discussion:
[PHP5] declaration statique sur plusieurs lignes
(trop ancien pour répondre)
Olivier Miakinen
2008-01-21 08:13:21 UTC
Permalink
Bonjour,

Dans une classe PHP5, je cherche à déclarer une chaîne de caractères
comme statique. D'ailleurs si elle pouvait être constante ce serait
encore mieux.

J'arrive à l'une des deux écritures suivantes (dans la définition de la
classe, que je ne recopie pas ici) :

static $prefix_zilli_regexp =
'/^(|un|duo|tre(?!c)|quattuor|quin|se(?!p)(?!sc)|septe|octo|nove)[mnsx]?(|dec|(?:v|tr|quadr|quinqu|sex|septu|oct|non)[aio]gint)[ai]?(|(?:|du|tre|ses)cent|(?:quadri|qui|septi|octi|no)ngent)$/';

ou :

const prefix_zilli_regexp =
'/^(|un|duo|tre(?!c)|quattuor|quin|se(?!p)(?!sc)|septe|octo|nove)[mnsx]?(|dec|(?:v|tr|quadr|quinqu|sex|septu|oct|non)[aio]gint)[ai]?(|(?:|du|tre|ses)cent|(?:quadri|qui|septi|octi|no)ngent)$/';

Mon problème, c'est que j'aime bien que les lignes d'un programme ne
dépassent pas 80 caractères, alors je voudrais couper ma chaîne en
morceaux, un truc du genre :

static $prefix_zilli_regexp = '/^'
. '(|un|duo|tre(?!c)|quattuor|quin|se(?!p)(?!sc)|septe|octo|nove)'
. '[mnsx]?'
. '(|dec|(?:v|tr|quadr|quinqu|sex|septu|oct|non)[aio]gint)'
. '[ai]?'
. '(|(?:|du|tre|ses)cent|(?:quadri|qui|septi|octi|no)ngent)'
. '$/';

Malheureusement, ça ne marche pas plus en 'static' qu'en 'const'.
Existe-t-il quand même une solution, ou bien mon cas est-il désespéré ?

Cordialement,
--
Olivier Miakinen
Bruno Desthuilliers
2008-01-21 09:27:57 UTC
Permalink
Post by Olivier Miakinen
Bonjour,
Dans une classe PHP5, je cherche à déclarer une chaîne de caractères
comme statique. D'ailleurs si elle pouvait être constante ce serait
encore mieux.
(snip)
Post by Olivier Miakinen
Mon problème, c'est que j'aime bien que les lignes d'un programme ne
dépassent pas 80 caractères, alors je voudrais couper ma chaîne en
(snip exemple avec concatenation)
Post by Olivier Miakinen
Malheureusement, ça ne marche pas plus en 'static' qu'en 'const'.
Existe-t-il quand même une solution, ou bien mon cas est-il désespéré ?
class Bidule {
static $toto="aalo
la
terre";

}

echo Bidule::$toto;
Olivier Miakinen
2008-01-21 16:21:18 UTC
Permalink
Post by Bruno Desthuilliers
Post by Olivier Miakinen
Dans une classe PHP5, je cherche à déclarer une chaîne de caractères
comme statique. D'ailleurs si elle pouvait être constante ce serait
encore mieux.
Mon problème, c'est que j'aime bien que les lignes d'un programme ne
dépassent pas 80 caractères, alors je voudrais couper ma chaîne en
morceaux, [...]
class Bidule {
static $toto="aalo
la
terre";
}
Sauf que cela va insérer des sauts de ligne dedans, non ?

Cela dit, c'est une bonne idée : je pourrais utiliser l'option x de PCRE
(PCRE_EXTENDED) que j'ai toujours superbement ignorée.

static $prefix_zilli_regexp = '/^
(|un|duo|tre(?!c)|quattuor|quin|se(?!p)(?!sc)|septe|octo|nove)
[mnsx]?
(|dec|(?:v|tr|quadr|quinqu|sex|septu|oct|non)[aio]gint)
[ai]?
(|(?:|du|tre|ses)cent|(?:quadri|qui|septi|octi|no)ngent)
$/x';

Mais de manière plus générale, pour une chaîne de caractères qui ne
serait pas une expression rationnelle PCRE, il existe un moyen ?
Mickael Wolff
2008-01-21 16:21:18 UTC
Permalink
Post by Bruno Desthuilliers
class Bidule {
static $toto="aalo
la
terre";
}
echo Bidule::$toto;
Non, tu introduis un retour à la ligne qui peut être assortis d'un
retour chariot. Donc ça ne peut pas marcher.
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Antoine Polatouche
2008-01-21 16:21:18 UTC
Permalink
Post by Olivier Miakinen
Bonjour,
Dans une classe PHP5, je cherche à déclarer une chaîne de caractères
comme statique. D'ailleurs si elle pouvait être constante ce serait
encore mieux.
define(zilli1,'/^(|un|duo|tre(?!c)|quattuor|quin|se(?!p)(?!sc)|septe|octo|');
define(zilli2,'nove)[mnsx]?(|dec|(?:v|tr|quadr|quinqu|sex|septu|oct|non)[a');
define(zilli3,'io]gint)[ai]?(|(?:|du|tre|ses)cent|(?:quadri|qui|septi|octi|no)ngent)$/');
define(ZILLI,zilli1.zilli2.zilli3);

echo(ZILLI);
Olivier Miakinen
2008-01-21 17:27:11 UTC
Permalink
Post by Antoine Polatouche
Post by Olivier Miakinen
Bonjour,
Dans une classe PHP5, je cherche à déclarer une chaîne de caractères
comme statique. D'ailleurs si elle pouvait être constante ce serait
encore mieux.
define(zilli1,'/^(|un|duo|tre(?!c)|quattuor|quin|se(?!p)(?!sc)|septe|octo|');
define(zilli2,'nove)[mnsx]?(|dec|(?:v|tr|quadr|quinqu|sex|septu|oct|non)[a');
define(zilli3,'io]gint)[ai]?(|(?:|du|tre|ses)cent|(?:quadri|qui|septi|octi|no)ngent)$/');
define(ZILLI,zilli1.zilli2.zilli3);
echo(ZILLI);
Ce n'est pas satisfaisant car j'aurais voulu encapsuler ma constante
dans la classe pour ne pas trop polluer l'espace de nommage.

Cela dit, en relisant la doc sur define() et les fonctions apparentées,
je vois que je pourrais faire :

define('MaClasse::zilli', ... expression sur plusieurs lignes ...);

et

echo constant('MaClasse::zilli');

Mais bon, ce n'est pas génial car je suis obligé de répéter le nom de la
classe au lieu d'utiliser self. Et donc, si quelqu'un veut renommer la
classe pour un problème de pollution de l'espace de nommage, il devra le
faire à plusieurs endroits.
Antoine Polatouche
2008-01-22 06:42:16 UTC
Permalink
Post by Olivier Miakinen
Mais bon, ce n'est pas génial car je suis obligé de répéter le nom de la
classe au lieu d'utiliser self. Et donc, si quelqu'un veut renommer la
classe pour un problème de pollution de l'espace de nommage, il devra le
faire à plusieurs endroits.
Et un seul fichier include qui serait le seul à contenir une ligne de
code de plus de 80 caractères ?
Parce que depuis Edlin, on a fait des progrès avec les éditeurs ;-)
Bruno Desthuilliers
2008-01-22 09:19:36 UTC
Permalink
Post by Antoine Polatouche
Post by Olivier Miakinen
Mais bon, ce n'est pas génial car je suis obligé de répéter le nom de la
classe au lieu d'utiliser self. Et donc, si quelqu'un veut renommer la
classe pour un problème de pollution de l'espace de nommage, il devra le
faire à plusieurs endroits.
Et un seul fichier include qui serait le seul à contenir une ligne de
code de plus de 80 caractères ?
Parce que depuis Edlin, on a fait des progrès avec les éditeurs ;-)
Sauf quand tu te retrouves à faire une correction ultra-urgente
directement en prod via ssh...
Antoine Polatouche
2008-01-22 14:00:53 UTC
Permalink
Post by Bruno Desthuilliers
Sauf quand tu te retrouves à faire une correction ultra-urgente
directement en prod via ssh...
Juste sur cette ligne là... pas de chance.
Mais bon OK, c'est HS avec la question d'origine.
Olivier Miakinen
2008-01-22 14:05:17 UTC
Permalink
Post by Antoine Polatouche
Post by Olivier Miakinen
Mais bon, ce n'est pas génial car je suis obligé de répéter le nom de la
classe au lieu d'utiliser self. Et donc, si quelqu'un veut renommer la
classe pour un problème de pollution de l'espace de nommage, il devra le
faire à plusieurs endroits.
Et un seul fichier include qui serait le seul à contenir une ligne de
code de plus de 80 caractères ?
Ah non, je trouve ça encore plus moche. Et puis cela obligerait les
utilisateurs de la classe à recopier deux fichiers au lieu d'un.
Post by Antoine Polatouche
Parce que depuis Edlin, on a fait des progrès avec les éditeurs ;-)
Les éditeurs peut-être. Mais moi, en tant qu'être humain et relecteur de
programmes, parfois sous forme papier (les programmes) car c'est là que
je vois le mieux les bugs, j'ai horreur des lignes qui sont tronquées ou
repliées à la ligne suivante. Alors je m'arrange pour que mes lignes
fassent toujours moins de 80 caractères (indentation comprise).

En C ou en C++, il est très facile d'écrire une chaîne constante sur
plusieurs lignes :
str = "Ceci est une chaîne de "
"caractères écrite sur "
"plusieurs lignes.\n"
"Le texte contenu ne "
"comporte, lui, que "
"deux lignes.\n";

Mais en PHP, malheureusement, cette syntaxe n'existe pas.

Continuer la lecture sur narkive:
Loading...