OVH Cloud OVH Cloud

Variables de session, refactoring, style

7 réponses
Avatar
Pierre Maurette
Bonjour,

Je suis en train de m'amuser à faire évoluer un petit projet, et
j'admets que le codage et les tests sont pratiquement antérieurs à
l'analyse.

J'ai une centaine de variables. Elles contiennent les caractéristiques
visuelles d'une page HTML, essentiellement d'un CSS. L'utilisateur
navigue de page en page pour modifier ces variables. C'est en fait une
sorte de panier de site marchand. Je dois donc en faire des variables
de session.
- *Question 1*: est-ce bien la bonne solution ?
Comme je l'ai expliqué, je suis parti d'une feuille CSS éditable à une
page de define(), pour en arriver pour l'instant à cette idée de
"libre-service". J'ai donc dû "refactorer" plusieurs fois mon code. Par
exemple la dernière étape fut de passer de $Variable à
$_SESSION['Variable'], en utilisant des fonctions de
recherche-remplacement, qui imposent de finir à la main.
- *Question 2*: qu'existe-t-il comme outil de refactoring, qui m'aurait
remplacé tous les $xxxxxx en $_SESSION['xxxxxx'] ?
- *Question 3*: est-il possible, pour alléger l'écriture et donc
améliorer la lisibilité, faire un truc du genre:
for (toutes les variables de session) $Var = $_SESSION['Var'];
en quelques lignes, sans faire une ligne par variable bien entendu.
Si c'est possible, j'imagine que c'est relativement coûteux. Oui ?
Donc, dernière question, promis: y a-t-il une solution de type
remplacement de texte dans le source (préprocesseur, en C) ?
for (toutes les variables de session) define('Var',
'$_SESSION['Var']');
(toujours pareil, en une ou deux lignes).

Merci d'avance

--
Pierre Maurette

7 réponses

Avatar
loufoque
Pierre Maurette a dit le 02/10/2005 à 14:15:

- *Question 2*: qu'existe-t-il comme outil de refactoring, qui m'aurait
remplacé tous les $xxxxxx en $_SESSION['xxxxxx'] ?


Tous les éditeurs textes qui supportent le rechercher/remplacer avec des
expressions régulières.

- *Question 3*: est-il possible, pour alléger l'écriture et donc
améliorer la lisibilité, faire un truc du genre:
for (toutes les variables de session) $Var = $_SESSION['Var'];


extract($_SESSION);

en quelques lignes, sans faire une ligne par variable bien entendu.
Si c'est possible, j'imagine que c'est relativement coûteux. Oui ?


C'est surtout inutile et moche.

Avatar
fdap
Pierre Maurette wrote:
Bonjour,

Je suis en train de m'amuser à faire évoluer un petit projet, et
j'admets que le codage et les tests sont pratiquement antérieurs à
l'analyse.

J'ai une centaine de variables. Elles contiennent les caractéristiques
visuelles d'une page HTML, essentiellement d'un CSS. L'utilisateur
navigue de page en page pour modifier ces variables. C'est en fait une
sorte de panier de site marchand. Je dois donc en faire des variables de
session.
- *Question 1*: est-ce bien la bonne solution ?
Comme je l'ai expliqué, je suis parti d'une feuille CSS éditable à une
page de define(), pour en arriver pour l'instant à cette idée de
"libre-service". J'ai donc dû "refactorer" plusieurs fois mon code. Par
exemple la dernière étape fut de passer de $Variable à
$_SESSION['Variable'], en utilisant des fonctions de
recherche-remplacement, qui imposent de finir à la main.


Plutôt qu'une centaine de variable, pourquoi pas une tableau de
paramètres ou une classe ?

- *Question 2*: qu'existe-t-il comme outil de refactoring, qui m'aurait
remplacé tous les $xxxxxx en $_SESSION['xxxxxx'] ?


Si ton éditeur propose une fonction de remplacement par expressions
régulières, oui. Sous emacs, eclipse, jedit, etc. c'est possible.

- *Question 3*: est-il possible, pour alléger l'écriture et donc
améliorer la lisibilité, faire un truc du genre:
for (toutes les variables de session) $Var = $_SESSION['Var'];
en quelques lignes, sans faire une ligne par variable bien entendu.
Si c'est possible, j'imagine que c'est relativement coûteux. Oui ?
Donc, dernière question, promis: y a-t-il une solution de type
remplacement de texte dans le source (préprocesseur, en C) ?
for (toutes les variables de session) define('Var', '$_SESSION['Var']');
(toujours pareil, en une ou deux lignes).


Avec un tableau ou une classe (SPL - Iterator) il est plus facile
d'itérer sur un groupement de paramètres.

Guillaume Ponçon
--
Besoin de repères pour une utilisation pro de PHP ?
http://www.fnac.com/Shelf/article.asp?PRID73586
Le 17 octobre dans votre librairie informatique !

Avatar
Clifden
Bonjour,

Je suis en train de m'amuser à faire évoluer un petit projet, et
j'admets que le codage et les tests sont pratiquement antérieurs à
l'analyse.

J'ai une centaine de variables. Elles contiennent les caractéristiques
visuelles d'une page HTML, essentiellement d'un CSS. L'utilisateur
navigue de page en page pour modifier ces variables. C'est en fait une
sorte de panier de site marchand. Je dois donc en faire des variables de
session.
- *Question 1*: est-ce bien la bonne solution ?


Une manière simple de résoudre grandement ton problème serait de
factoriser toutes ces variables pour les mettre dans une seule de type
tableau. Par exemple $styles. Tu accederai ensuite aux différentes
propriétés par $styles['bg_color'], $styles['font_color'], etc... Tu
pourrais meme mettre le tableau à plusieurs dimensions pour "classer"
les données.

Comme je l'ai expliqué, je suis parti d'une feuille CSS éditable à une
page de define(), pour en arriver pour l'instant à cette idée de
"libre-service". J'ai donc dû "refactorer" plusieurs fois mon code. Par
exemple la dernière étape fut de passer de $Variable à
$_SESSION['Variable'], en utilisant des fonctions de
recherche-remplacement, qui imposent de finir à la main.
- *Question 2*: qu'existe-t-il comme outil de refactoring, qui m'aurait
remplacé tous les $xxxxxx en $_SESSION['xxxxxx'] ?


Une commande sed avec regexp sous linux te permet de faire ce genre de
manip, mais avec un EDI je ne sais pas.

- *Question 3*: est-il possible, pour alléger l'écriture et donc
améliorer la lisibilité, faire un truc du genre:
for (toutes les variables de session) $Var = $_SESSION['Var'];
en quelques lignes, sans faire une ligne par variable bien entendu.
Si c'est possible, j'imagine que c'est relativement coûteux. Oui ?
Donc, dernière question, promis: y a-t-il une solution de type
remplacement de texte dans le source (préprocesseur, en C) ?
for (toutes les variables de session) define('Var', '$_SESSION['Var']');
(toujours pareil, en une ou deux lignes).


Tu as plus ou moins l'équivalent sous PHP avec l'emploi de la syntaxe $$var.
Dans ce cas, il te faut:
* avoir une variable tableau contenant le nom de toutes tes variables:
$tab=array('bg_color','font_color', etc... );
* faire:
foreach ($tab as $v)
$$v=(isset($_SESSION[$v]))?$_SESSION[$v]:"";

Cela va te creer autant de variables que de d'entrées dans le tableau
$tab. l'écriture est compacte, mais tu voulais une solution en 2 lignes ;-)

Dans le cas ou tu fais comme j'ai dis en 1), il te suffirait de faire:
foreach ($styles as $k=>$v)
$styles[$k]=(isset($_SESSION[$k]))?$_SESSION[$k]:"";


Merci d'avance



De rien.

Avatar
Pierre Maurette
Je vous remercie tous les trois.

Vous me suggérez la mise en tableau des données. Une sructuration est
prévue, pour l'instant j'en suis à l'inventaire. Cette structuration
existe pour l'instant dans les noms, je pourrai ainsi tester mes
recherches - remplacement. J'ai un peu de mal avec les tableaux en PHP,
je pense trop en C.
Une petite question : faut-il utiliser une classe sans fonction ou un
tableau "à la php" pour traduire l'idée de "struture" du C par exemple
?

Je vais me mettre sérieusement (une fois de plus, comme "Belle du
seigneur" ou "Ulysse" ;-) ) aux expresssions régulières.
Me confirmez-vous que je peux en une passe, ou alors deux, passer de
$xxxxxx à $_SESSION['xxxxxx'] ?

Pour le changement de nom, ce que vous me proposez est effectivement
coûteux. Puisque j'ai des variables de session, je les copie
physiquement dans des variables locales simplement pour alléger le
listing, c'est effectivement un peu dommage. Je vais laisser tomber.

--
Pierre Maurette
Avatar
Clifden
Je vous remercie tous les trois.

Vous me suggérez la mise en tableau des données. Une sructuration est
prévue, pour l'instant j'en suis à l'inventaire. Cette structuration
existe pour l'instant dans les noms, je pourrai ainsi tester mes
recherches - remplacement. J'ai un peu de mal avec les tableaux en PHP,
je pense trop en C.
Une petite question : faut-il utiliser une classe sans fonction ou un
tableau "à la php" pour traduire l'idée de "struture" du C par exemple ?



*Si* tu es en PHP5, tu peux alors faire la chose suivante:

class styles {
private $names=array('bg_color','font_color',etc...);
private $datas=array();

public function __construct() {
// le code qui va bien pour mettre dans le tableau $datas les
// valeurs qui sont dans $_SESSION;
foreach ($names as $v)
$this->datas[$v]=$_SESSION[$v];
}

public function __get($name) {
return $this->datas[$name];
}

public function __set($name,$value) {
$this->datas[$name]=$value;
}

public function __destruct() {
foreach ($this->datas as $k=>$v)
$_SESSION[$k]=$v;
}
}

// exemple d'utilisation:

// init de la classe et recup des infos
$truc=new styles();

// affiche la valeur d'une propriété de style
echo $truc->bg_color;

// modifie cette propriété
$truc->bg_color='#FFFFFF';

Ainsi, tu as une classe propre, qui sait comme une grande recuperer ses
infos de la variable $_SESSION, qui est capable de te fournir les
différentes valeur (magic function __get), qui laisse les modifier
(__set) et qui le script une fois fini, remet tout dans $_SESSION.

Pourquoi PHP5? Car cela permet d'utiliser __get et __set qui facilite
grandement la syntaxe et l'utilisation de la classe.

Avatar
Pierre Maurette
[...]
Ainsi, tu as une classe propre, qui sait comme une grande recuperer ses infos
de la variable $_SESSION, qui est capable de te fournir les différentes
valeur (magic function __get), qui laisse les modifier (__set) et qui le
script une fois fini, remet tout dans $_SESSION.

Pourquoi PHP5? Car cela permet d'utiliser __get et __set qui facilite
grandement la syntaxe et l'utilisation de la classe.
OK, merci, je vais étudier ça. Par chance, j'ai fait du C++ et même un

peu de Java.
Je suis en "PHP Free" ;-), c'est à dire du 4.3.10 :
http://assembleur.maurette.free.fr/administration/info.php

Pour les expressions régulières, ça le fait sans problème. C'est le
genre de truc qu'il faut se farcir une fois. Il me semble qu'en
apprenant 20% des possibilités, on résoud 95% des problèmes.
Mon souci de convertir les $xxxxxx en $_SESSION['xxxxxx'] se régla
facilement : chercher $([a-z, A-Z, 0-9]+) et remplacer par
$_SESSION['$1'] (ou $_SESSION['1'] selon les outils, pas trop compris
pourquoi). A moi de ne pas utiliser d'underscore en début de variable,
mais ça me semblait déjà devoir être une règle.

Bonne journée, et encore merci

--
Pierre Maurette

Avatar
loufoque
Pierre Maurette a dit le 03/10/2005 à 14:39:
Je suis en "PHP Free" ;-), c'est à dire du 4.3.10 :


ou 5.0.3