L'utilisation de PDO dans les classes
J'ai un peu de classes qui effectuer quelques requêtes MySQL et préparées. Cependant, je suis perdu dans comment intégrer mon objet PDO au sein de ces classes. Par exemple, je veux faire quelque chose comme ceci:
<?php
$dbh = new PDO(...);
class Foo extends PDO {
public $dbh;
public function bar() {
$this->dbh->prepare('SELECT * FROM table');
$this->dbh->execute();
}
}
?>
Malheureusement, il ne fonctionne pas. Quelqu'un peut-il suggérer une élégante façon de le faire? Merci pour votre temps. Désolé, je suis nouveau sur ce, merci de laisser des commentaires si vous êtes confus au sujet de n'importe quoi et je vais faire de mon mieux pour y répondre!
- Est-ce que votre classe Foo vraiment étendre la classe PDO? Ou une instance de FOO simplement l'utilisation et de l'instance de PDO. Votre exemple qui ressemble plus à de l'aide que de l'étendre.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez instancier votre connexion à la base de données dans une classe qui implémenter le pattern singleton.
La connexion sera effectué qu'une fois, et cette classe est facilement accessible par tous vos autres objets /scripts.
j'utilise une classe appelée "Noyau dur" dans l'exemple suivant;
cette classe prennent des paramètres d'une classe statique appelée "Config", où vous pouvez stocker votre configuration:
dans tous vos scripts /objets vous suffit d'obtenir l'instance de Base et ensuite d'interroger la DB
Si vous avez besoin de plus d'informations sur singleton regarde la doc PHP http://php.net/manual/en/language.oop5.patterns.php
$core = null;
?Ici est surtout un travail complet cut & pâte exemple de Guillaume Boschini's réponse ci-dessus.
Un peuplé de la table DB (MySQL):
Dans /DBLibrary/pdocore.php:
Dans /objectsLibrary/SYS_UserAddress.php:
Le post ci-dessus m'a vraiment aidé. Ce post, je vais faire maintenant, aurait réussi à me faire à l'endroit où je voulais être plus rapide. C'est tout. Si quelque chose ne va pas, je serai là pour le résoudre.
$dbh
n'est pas dans le champ d'application deFoo
, faire ceci à la place:Aussi,
Foo
n'a pas besoin de s'étendrePDO
.Foo
ne seront instanciés à la fois, d'où un seul AOP connexion.Bar
,Moo
,Cow
,Barn
et ils ont aussi besoin de faire des requêtes de base de données, donc ce ne serait pas +4 db connections? Merci pour coller avec moisingleton
. Lire à ce sujet sur Wikipédia et si vous avez encore des question poser une autre question ici.j'ai trouvé une meilleure solution :
lorsque vous avez un AOP de connexion à l'extérieur de votre classe et ne peux utiliser que la connexion à l'intérieur de la classe , envoyer l'objet PDO pour le constructeur en tant que paramètre
///c'est mon aop connexion
///im la création de l'instance de cette classe comme un obj
/////l'intérieur de la classe :::simplifié