PHP programmation orientée objet base de données se connecter
J'ai juste commencé à apprendre le concept de la programmation orientée Objet, et j'ai écrit cette classe de fonctions.
Il fonctionne bien, mais je suis intéressé à savoir si j'ai fait cela correctement...
Voici mon code:
class Database{
const DB_HOSTNAME = 'localhost';
const DB_USERNAME = 'root';
const DB_PASSWORD = 'password';
const DB_NAME = 'shop';
protected $_db_connect;
protected $_sql;
protected $_result;
protected $_row;
function db_connect(){
$this->_db_connect = mysql_connect(self::DB_HOSTNAME,self::DB_USERNAME,self::DB_PASSWORD) or die(mysql_error());
}
function slect_db(){
mysql_select_db(self::DB_NAME) or die(mysql_error());
}
function sql(){
$this->_sql = 'SELECT * FROM users';
}
function query(){
$this->_result = mysql_query($this->_sql);
}
function fetch_array(){
while($this->_row = mysql_fetch_array($this->_result)){
$username = $this->_row['user_USERNAME'];
echo "<ul>";
echo "<li>".$username."</li>";
echo "</ul>";
}
}
function db_close(){
mysql_close($this->_db_connect);
}
}
$database = new Database();
$database->db_connect();
$database->slect_db();
$database->sql();
$database->query();
$database->fetch_array();
$database->db_close();
s'il vous Plaît, n'utilisez pas
Évitez d'utiliser SELECT *
toujours utiliser le modèle de conception singleton lors de la création de la base de données d'accès pour de meilleures performances
Je ne pense pas que cela prête à la bonne OO design. Considérer que la classe que vous avez écrit n'est pas particulièrement génériques, depuis votre base de données détails de connexion sont juste constantes codées en dur. Aussi, la seule instruction SQL que cette classe peut exécuter est
Des Questions de ce genre sont plus adaptés pour les l'Examen du Code de la Pile d'Échange du site
mysql_*
fonctions dans le nouveau code. Il n'est plus maintenu et sont officiellement obsolète. Voir le rose boîte? En savoir sur le préparées au lieu de cela, et d'utiliser les PDO ou MySQLi - cet article vous aider à décider lequel. Si vous choisissez AOP, voici un bon tutoriel.Évitez d'utiliser SELECT *
toujours utiliser le modèle de conception singleton lors de la création de la base de données d'accès pour de meilleures performances
Je ne pense pas que cela prête à la bonne OO design. Considérer que la classe que vous avez écrit n'est pas particulièrement génériques, depuis votre base de données détails de connexion sont juste constantes codées en dur. Aussi, la seule instruction SQL que cette classe peut exécuter est
SELECT * FROM users
. Est-ce l'intention? J'avais envisager d'étendre cette classe avec d'autres classes qui contiennent SQL spécifique, ou à faire de la fonction SQL accepter une chaîne de requête SQL. Aussi, votre base de données de classe ne devrait pas être en train de faire le rendu de l'affichage (dans fetch_array). en.wikipedia.org/wiki/SOLID_(objet oriented_design)Des Questions de ce genre sont plus adaptés pour les l'Examen du Code de la Pile d'Échange du site
OriginalL'auteur PiraTa | 2013-12-22
Vous devez vous connecter pour publier un commentaire.
Veuillez utiliser PDO ou MySQLi que c'est plus sécurisé et mysql_* fonctions sont obsolètes comme indiqué ci-dessus, j'ai fourni quelques génériques de code à l'aide de PDO pour vous aider avec cette nouvelle entreprise. Comme indiqué dans les commentaires, vous ne devriez pas être en écho les données si vous êtes à la recherche d'un design orienté objet, ce que vous devriez faire c'est d'après la requête, retourner les lignes que vous avez récupéré et à partir de là utiliser quelque chose comme une boucle foreach pour ensuite l'affichage de vos données. Faites votre base de données de la classe de cette manière, assurez-vous également que plusieurs connexions de base de données ne sont pas ouverts à la fois! Remarque, ce code est juste pour vous référence, et doit être testée avant l'utilisation dans la production ou quoi que ce soit en direct.
config.php:
database.class.php:
index.php:
OriginalL'auteur ZZPLKF
La réponse par Sieu Phan est correct mais il ne fait pas vraiment vous assurer d'avoir une seule connexion ouverte (auriez-vous d'inclure le
config.php
fichier plusieurs fois il serait créer plusieurs connexions).Il est possible d'améliorer la manière de vous connecter à des bases de données à l'aide d'auto-chargement injection de dépendance et de conteneurs. Voici une façon d'utiliser Auryn pour vous connecter à votre base de données, tout en étant sûr qu'il ya seulement une connexion ouverte et ne pas avoir à manuellement nécessitent des fichiers dans votre application.
Je ne couvrira que les AOP et Auryn ici. Il y a d'autres l'injection de dépendance des conteneurs et notamment la mysqli extension pour se connecter à la base de données, mais le contenu devrait vous aider à l'aide d'un autre conteneur si vous le souhaitez.
La base de données de la classe
Avoir une base de données de la classe est superflu. Le
\PDO
classe est déjà en fournissant toutes les méthodes nécessaires pour interroger la base de données. Avoir une classe de base de données permet vous fait répéter toutes les fonctions qu'il assure déjà, et en fait les limites de vos actions (ou vous fait créer plusieurs fonctions) si vous souhaitez par exemple utiliser plusieurs récupérer les styles en fonction de vos besoins dans une méthode spécifique.L'Injection De Dépendance
Si vous ne l'avez pas déjà, avoir un lire sur l'injection de dépendance. Le point est que, lorsqu'une classe a besoin d'accéder à la base de données, il ne devrait pas être la peine de la construction de la
\PDO
objet, il doit être construit avec elle:Avis que j'ai de passer directement de la
\PDO
objet, pas une classe wrapper. De cette façon, j'ai toujours accès à l'ensemble de ses capacités, pas seulement un sous-ensemble de fonctions définies par l'utilisateur.Conteneur D'Injection De Dépendance
Un conteneur d'injection de dépendance vous permet de développer vos classes, de leur donner les objets dont ils ont besoin, et qui vous donne une grande flexibilité sur la façon de construire ces objets. Ici, je vais seulement mettre l'accent sur la configuration et l' partage un
\PDO
objet par l'utilisation de Auryn.Je suppose que vous avez installé le nécessaire Auryn de la classe, de la façon la plus facile est d'utiliser compositeur. C'est hors de la portée de cette réponse, il existe plusieurs ressources sur la façon de l'utiliser.
Créer l'injecteur
Définir la
\PDO
les paramètres de classeVous pouvez soit écrire les paramètres de configuration directement ici, ou de les obtenir à partir d'un fichier de configuration. J'aime avoir une config.fichier ini et à l'aide de
parse_ini_file()
pour obtenir mes options de configuration, comme je peux facilement changer de base de données par l'édition d'un fichier de configuration.Partager la
\PDO
objetCette partie est vraiment important. Cette lignes de l'injecteur de donner la même
\PDO
objet à chaque fois qu'il est chargé de la construction d'une classe qui a besoin d'une connexion. Notez que l'ordre des lignes n'est pas important, vous pouvez partager la classe avant de la définir, seulement assurez-vous de vous créer une base de données nécessitant des classes après l'écriture de ces deux lignes.Créer vos objets
Que c'est. L'injecteur permettra de créer votre objet mappeur, de la création de la
\PDO
objet si elle ne l'avez pas déjà fait, en passant l'instance existante si elle l'a fait.Chargement automatique
En supposant que vous avez utilisé compositeur, vous pouvez faire usage de c'est génial de l'autochargeur. Sinon, vous pouvez aussi vous rouler propre autochargeur.
Le point ici est d'arrêter d'avoir
require()
partout dans votre code, surtout si vous avez des complexes les hiérarchies de classe, que vous devriez avoir dans un seule la responsabilité de l' conformes système de classe.L'emballage jusqu'à
Avec cette configuration, vous pouvez maintenant utiliser la
\PDO
objet dans vos classes, tout en étant assuré qu'il n'y aura qu'une seule instance par requête, sans avoir à exiger des fichiers partout, et sans l'aide d'un singleton anti-modèle.OriginalL'auteur Félix Gagnon-Grenier
OriginalL'auteur Amit HJ Dimensions
OriginalL'auteur Siwakorn Takeaw
OriginalL'auteur morteza
Un
OriginalL'auteur Siwakorn Takeaw