lundi 6 février 2012

Des constantes par vraiment constantes

Concernant les entrées de configurations et leurs niveaux d'abstractions.

Il est important de les choisir correctement sous peine d'être obligé de faire des pirouettes et des hacks pourris. Immuable ou volatile, côté serveur ou côté client ; voici une liste des différents types d'entrées de configuration avec une tentative d'explication de leurs domaines d'application.
Variable d'environnement. serveur, admins :
Les variables d'environnement, il y en a plusieurs. Dans le plus bas niveau on trouve celles qui dépendent du user qui exécute PHP.
On y trouve peu de choses intéressantes à part USER justement, HOME et ce que les admins auront bien voulus y mettre. On y accèdera avec getenv() plutôt que par la super globale $_ENV (qui n'est pas immuable).
Variable apache ou var. d'environnement déclaré par le serveur web. serveur, admins :
Typiquement, on y mettra l'information concernant l'environnement de production ou de développement, mais il ne faut pas s'arrêter là.
Idéalement on y mettra les informations concernant les différents serveurs utilisés par l'application par exemple : les accès aux bases de données, la liste des serveurs memcache. Tout ce qui est dépendant des admins peut être ajouté dans des variables d'environnement. Y accéder avec getenv() aussi.
Constante PHP. application, devs :
Piège ! Une constante en PHP (ou avec n'importe quel langage interprété) reste immuable seulement dans le contexte d'exécution du script. Hors, à chaque hit, on a un nouveau contexte, donc potentiellement des nouvelles valeurs.
Il faut éviter d'y mettre des informations concernant le client comme le choix de la langue (même si c'est très pratique). Les constantes devraient être réservées au domaine de l'application. Exemple : caractéristiques activées ou non, utilisation de REST plutôt que XML-RPC pour un web-service. Modifiable uniquement par les développeurs, sont utilisation devrait ce limiter à leur domaine, c.a.d : le code.
Les variables concernant la requête du client. client :
$_SERVER, $_COOKIE : on y trouve les entrées de configuration du client comme les langues qu'il accepte, ses précédents cookies ou son type de navigateur. $_GET, $_POST : contiennent tout ce qui a été demandé par le client.
Ce sont des superglobales, on peut y accéder de partout et on peut les modifier. Il faut en profiter. La langue du client doit s'y trouver par exemple et plus globalement ; tout ce qui est propre au client et qui était auparavant des constantes devrait devenir des entrées de ces super globales.
Sans conclusion.

Aucun commentaire:

Enregistrer un commentaire