je voudrais rendre un tableau (ou plus précisément un tableau associatif) accessible en lecture seulement :
$a = array('foo' => 'bar', 'dev' => 'null');
Comment faire ?
Sachant que :
- la fonction define() ne permet que de définir des constantes alphanumériques ;
- le mot-clé final n'existe pas.
Merci d'avance !
# pas compris
Posté par NeoX . Évalué à 1.
rendre un tableau php en lecture seule :
suffit de pas ecrire dedans, non ?
ou peut-etre de le mettre en variable privée afin qu'il ne soit pas accessible en dehors de ta fonction
(mais sans plus d'info sur ce que tu veux faire, ca va etre dure de t'aider)
le mot cle "final", il sort d'ou lui ?
quel est censé etre son role ?
[^] # Re: pas compris
Posté par santos . Évalué à 2.
Le but : mon tableau contient toutes les options globales de mon application web. En début de page, les options sont lues en base de données, puis stockées dans ce tableau, pour être facilement accessibles ( $OPTIONS['monOption'] )
Verrouiller ce tableau en lecture seule n'est pas une nécessité absolue, je trouve simplement cela plus propre. Et comme on peut le faire en Java, j'aimerais le faire également en PHP.
Est-ce plus clair comme ça ?
[^] # Re: pas compris
Posté par Krunch (site web personnel) . Évalué à 5.
class Config {
private static $config = array('foo' => 'bar', ...);
public static get(string $key) {
return $config[$key];
}
}
Tout code voulant accéder au tableau ne peut utiliser que get() qui ne fait que lire et tout le contenu est fixé à l'initialisation. La syntaxe pour accéder au tableau reste simple (bien qu'on se rende bien compte que c'est pas directement un tableau) et c'est le plus important je pense :
get('foo')
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Singleton
Posté par santos . Évalué à 3.
J'espère que les futures versions de PHP apporteront la possibilité de rendre finale une variable de type complexe (tableau, objet,...).
[^] # Re: Singleton
Posté par NeoX . Évalué à 2.
je ne vois pas vraiment l'interet de mettre le tableau en lecture seule.
vu que :
- tu ne vas pas ecrire dedans autrement qu'a partir du code (que tu maitrises vu que tu l'ecris)
- que selon comment est fait le code, tu reecris ton tableau à chaque rafraichissement de la page (en meme temps que tu refais le connect à ta base de données)
mais il y a peut-etre une subtilité qui m'echappe :(
une autre piste pourrait etre de faire une boucle sur les elements de ton tableau et de faire un define(parametre,valeur);
pour chaque element du tableau
mais autant que je sache le define peut aussi etre surchargé
[^] # Re: Singleton
Posté par santos . Évalué à 3.
Deux cas de figures m'intéressent :
- celui d'une bibliothèque réutilisable, dont l'utilisateur ne touche pas au contenu (ni même ne le regarde, il se contente de la doc) ;
- celui d'un CMS, framework ou autre système dans lequel des utilisateurs tiers vont écrire des modules additionnels qui seront inclus dans la page.
C'est inutile d'aller chercher les informations plusieurs fois en base de données parce que c'est certain qu'elles n'auront pas changé entre le début et la fin de l'exécution du script.
Mais c'est gênant que du code tiers puissent les modifier.
Exemple, mon application comprend une API SOAP, hébergée sur un autre serveur. L'adresse de ce serveur est renseignée à l'aide d'un formulaire, dans l'espace d'administration, et stockée en base de données. Plusieurs portions de mon code ont besoin de cette information.
Sur le principe, cela me dérange qu'un bout de code puisse, volontairement ou non, modifier cette adresse (que je stocke donc dans un tableau d'options globales). Et ça me dérange aussi d'aller chercher cette information plusieurs fois en base de données.
[^] # Re: Singleton
Posté par Laurent Morel . Évalué à 2.
Si php poursuit son chemin pour rejoindre Java, c'est effectivement possible... :-)
Pari : on verra le "finally { ... } avant le "final" ?
(Par exemple php 5.3 late static binding : permet de faire des appels de méthodes dynamiques, enfin !)
[^] # Re: Singleton
Posté par santos . Évalué à 2.
Et à choisir, je préfère voir arriver le finally avant le final.
# Pas vraiment possible
Posté par Jean B . Évalué à 4.
référencés ici: http://www.php.net/manual/en/function.define.php#89455
[^] # Re: Pas vraiment possible
Posté par santos . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.