Variables globales vs statiques en PHP
Je suis de la création d'un cadre de base en PHP. J'ai besoin de passer des données à la page en cours dans les différentes fonctions, de leur permettre de modifier et l'enregistrer, puis passer à la page à afficher. J'ai été à l'origine de la planification pour le stockage des données dans une variable globale comme $GLOBALS['data']
mais je commence à penser que l'utilisation d'un mondial est une mauvaise idée. Donc, je pense qu'à la place je vais mettre une variable statique dans le système de classe, et l'accès à l'aide system::$data
. Donc, ma question est, qui serait le mieux et pourquoi?
Ce:
$GLOBALS['data'] = array();
$GLOBALS['data']['page_title'] = 'Home';
echo $GLOBALS['data']['page_title'];
Ou ceci:
class system
{
public static $data = array()
}
function data($new_var)
{
system::$data = array_merge(system::$data, $new_var);
}
data(array('page_title' => 'Home'));
echo system::$data['page_title'];
source d'informationauteur Kyle Piontek
Vous devez vous connecter pour publier un commentaire.
Il n'y a vraiment pas de différence entre une variable globale et une
public static
variable. La variable de classe est préfixée un petit peu mieux, mais qui ne fait guère de différence. Les deux sont accessibles n'importe où, à tout moment, et les deux sont l'état global.Il se trouve que je viens d'écrire un article complet sur le sujet:
Comment Ne Pas Tuer Votre Capacité De Test À L'Aide De La Statique
Vous déjà sens qu'il y a un problème de mettre tout cela en globals. Bien que vous avez développé quelques idées pour encapsuler les choses dans une classe.
Je pense que c'est un bon point de départ. Nous allons ajouter plus de piquant à la cuisson pour obtenir ce plus à l'aise au début:
Vous avez créé un objet maintenant que vous pouvez transmettre vos données. Il suffit de passer
$data
de la région où il est nécessaire. Pas de mondial ou global variable statique nécessaire.Vous pouvez même faire ce type de plus concret, plus tard, s'étendant à partir de
ArrayObject
avec votre propre type.