à l'aide de global DB variable à l'intérieur de classes en PHP
Comment puis-je utiliser la variable DB à l'intérieur de la classe?
Disons que j'ai dans mon config.php
$dbh = new PDO("mysql:host=localhost;dbname=mydb", "root", "");
et je veux l'utiliser $dbh à l'intérieur de la classe comme suit (MyClass.php)
class MyClass
{
public function DoSomething($plogin_id)
{
$sql = "SELECT * FROM mytable WHERE login_id = :login_id";
$stmt = $dbh->prepare($sql); //line 14
$stmt->bindParam(':login_id', $plogin_id, PDO::PARAM_STR);
}
}
Et à l'intérieur de mon index.php fichier que je suis en utilisant ce MyClass comme suit:
include "config.php";
$MyObject = new MyClass();
$login_result = $MyObject->DoSomething("admin");
Il me donne l'erreur:
Erreur fatale: Appel d'une fonction membre
prepare() sur un non-objet dans
C:\xampp\htdocs\MyProject\admin\includes\classes\MyClass.php
sur la ligne 14
OriginalL'auteur Ali | 2010-12-16
Vous devez vous connecter pour publier un commentaire.
Vous devez passer les
$dbh
objet deMyClass
en quelque sorte. Puisque vous ne voulez pas utiliser de variables globales, je vous suggère de passer àMyClass
'constructeur.Votre MyClass et index.php pourrait ressembler à quelque chose comme ceci:
C'est fondamentalement un modèle appelé l'injection de dépendance. Voir cet excellent tutoriel pour plus d'info sur ce que c'est.
OriginalL'auteur Jan Hančič
Vous pouvez introduire dans votre fonction à l'aide de:
Cependant, il pourrait être une meilleure idée de l'ajouter à la classe, comme ceci:
et puis:
Ou de l'introduire dans votre fonction au temps d'appel:
Et puis:
OriginalL'auteur Spiny Norman
C'est la méthode la plus courante:
Approche Alternative:
Créer un singleton pour la connexion de base de données. Et vous l'utiliser à la place d'une variable globale:
Vous plaidez en faveur de l'utilisation de variables globales.
Je n'ai pas voté, mais le problème qui vous fait répondre à l'intitulé de la question, mais disons que l'OP a mal compris le problème, son problème est en fait de ne pas utiliser cette
le globals faisait partie de l'OP question ....
Avez-vous lu la question?! C'est la pour utiliser des variables globales dans une fonction. Météo c'est une bonne ou une mauvaise chose, c'est un tout autre problème.
OriginalL'auteur Alin Purcaru