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

[PHP5] declaration statique sur plusieurs lignes

9 réponses
Avatar
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

9 réponses

Avatar
Bruno Desthuilliers
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;

Avatar
Antoine Polatouche
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);

Avatar
Olivier Miakinen
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 ?


Avatar
Mickael Wolff
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

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


Avatar
Antoine Polatouche
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 ;-)

Avatar
Bruno Desthuilliers
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...


Avatar
Antoine Polatouche
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.

Avatar
Olivier Miakinen
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.