[PHP5] declaration statique sur plusieurs lignes

Le
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.

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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Bruno Desthuilliers
Le #939463
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)

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 :


(snip exemple avec concatenation)

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;

Antoine Polatouche
Le #939460
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
Le #939461
Le 21/01/2008 10:27, Bruno Desthuilliers me répondait :

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
Le #939462
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

Olivier Miakinen
Le #939293
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
Le #939292
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
Le #939291
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
Le #939290
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
Le #939289
Le 22/01/2008 07:42, Antoine Polatouche m'a répondu :
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.

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.


Publicité
Poster une réponse
Anonyme