Il faudrait que tu sois plus attentif ou que tu saches mieux interpréter les messages d'erreurs.
Regarde bien, il y a des différences entre mon exemple
1 2 3 4 5 6 7 8 9 10 11
| public function __construct($db_name) {
/* ls : la variable $pdo_options, ça date de ma formation de 2012 */
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;//important sur les configs récentes
$pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;//pour le mode objet
$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";//pour l'utf-8
$this->DB_NAME = $db_name;
parent::__construct('mysql:host=' . $this->HOST . ';dbname=' . $this->DB_NAME, $this->USER, $this->PASS, $pdo_options);
} |
et ton implémentation
1 2 3 4 5 6 7 8 9 10 11 12
| function __construct($db_name) {
/* ls : la variable $pdo_options, ça date de ma formation de 2012 */
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;//important sur les configs récentes
$pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;//pour le mode objet
$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";//pour l'utf-8
$this->$DB_NAME = $db_name;
parent::__construct('mysql:host=' . $this->$HOST . ';dbname=' . $this->$DB_NAME, $this->$USER,$this->$PASS, $pdo_options);
} |
Pour être plus clair:
$this->DB_NAME = $db_name;
est différent de
$this->$DB_NAME = $db_name;
et
parent::__construct('mysql:host=' . $this->HOST . ';dbname=' . $this->DB_NAME, $this->USER, $this->PASS, $pdo_options);
est différent de
parent::__construct('mysql:host=' . $this->$HOST . ';dbname=' . $this->$DB_NAME, $this->$USER,$this->$PASS, $pdo_options);
Est-ce que tu utilises un IDE? un IDE te signalerait immédiatement ce genre d'erreur (comme la coloration syntaxique de developpez.net te montre immédiatement les différences entre les codes).
Sur les globales: le principe même de la POO est de subdiviser un programme en petites unités indépendantes qui communiquent entre elles. L'existence des variables globales casse cette indépendance: toutes les unités deviennent dépendantes de cette variable globale.
Imagine qu'il y ait un bug dans une variable. Si elle est locale, ce bug n'affectera que l'unité (fonction, méthode, classe) qui la contient. Le bug est donc facile à trouver et à corriger: il suffit de regarder la fonction, méthode ou classe qui contient cette variable. Le problème est plus compliqué pour une variable globale: n'importe quelle partie de ton programme peut modifier ou supprimer cette variable. En cas de bug, l'investigation doit donc porter sur tout le programme, et non sur une simple fonction/méthode/classe. Bonne chance à toi si ton programme comporte des centaines de classes et de fichiers...
Bref, sur un programme simple, qui tient en deux-trois fichiers, l'utilisation de variables globales est mauvaise mais n'est pas catastrophique; mais si tu comptes progresser et avoir des programmes plus larges un jour, mieux vaut se débarasser de cette mauvaise habitude.
Attention: tout ceci est valable si tu écris Orienté Objet, ç'est-à-dire si tu organises tout ton code en classes non statiques. Si tu écris en procédural, même si tu utilises des objets, c'est moins important.
Partager