Je suis un débutant dans la programmation PHP et j'aimerais aider à une petite question. Veuillez consulter le code ci-dessous:
ma question est si la création de liens de DB individuels Pour chacune des méthodes de l'objet est la meilleure façon d'aller? Y a-t-il un moyen meilleur ou alternatif de faire cela? J'espère que je l'ai bien expliqué. P> serait correct? P>
$x = new Account("localhost", "root", "");
5 Réponses :
Je ne conseillerais pas de créer vos connexions de base de données de cette façon. Créez une connexion et injectez cela dans l'objet en l'utilisant. Vous n'avez pas besoin de créer une nouvelle connexion pour chaque objet.
code de code: p> devrait changer code> code> à ressembler à: P> class Account {
protected $connection;
public function __construct(mysqli $connection) {
$this->connection = $connection;
}
public function register() {
// use $this->connection for db
}
public function login() {
// use $this->connection for db
}
}
Vous avez oublié de fermer la connexion.
@Gabrielsantos Non, je ne l'ai pas fermé exprès. Et s'il existe un autre objet qui doit utiliser cette connexion? Ensuite, nous devons ouvrir la connexion à nouveau. Le code qui a créé l'objet de connexion doit être responsable de la fermeture de la connexion.
Vous pouvez utiliser un membre statique et tous vos objets partagent une connexion de base de données. P>
Voir aussi PHP - une couche d'abstraction dB utilise une classe statique de la classe VS objet singleton? p>
Je n'utiliserais ni ni (classe statique ni singleton).
Downvote pour singleton. Aucune raison d'introduire une connexion de base de données dans la portée globale avec statique
@Charlessprayberry d'accord d'accord à nouveau.
Si vous vouliez le réduire et le garder Néater / plus gérable, vous pouvez mettre le code MySQL Connect dans sa propre méthode et l'appelez comme:
<?php
class Account
{
private $connection;
private function connect()
{
$this->$connection = mysql_connect("localhost","root",""); // Create Connection
}
public function register()
{
$this->connect();
if (!$this->$connection) // Check connection
{
die(mysql_error());
}
mysql_close($this->$connection); // Close Connection
}
public function login()
{
$this->connect();
if (!$this->$connection) // create connection
{
die(mysql_error());
}
mysql_close($this->$connection); //close connection
}
}
?>
Downvoted parce que finalement, vous créez toujours la connexion à la base de données chaque fois qu'une fonction est appelée.
@Carlessprayberry d'accord avec vous.
@Carlessprayberry j'ai mal interprété la question initiale
Vous pouvez utiliser des codes comme: d'autres requêtes serait ici p> créer une connexion unique sur chaque page suffit . Plus d'une connexion ou de déconnexion de SQL Server et de déconnexion peut encore entraîner des performances réduites. p> p>
Je suggère:
public function __construct(mysqli $connection) {
$this->connection = $connection;
if(!$this->$connection) {
die(mysql_error());
}
}
public function __destruct() {
mysql_close($this->$connection);
}
Je ne suis pas sûr que je recommanderais d'utiliser mourir dans cette situation (ou de toute OO).
@cbuckley il est seulement à des fins d'échantillon.
Mon seul préoccupation était que cela pourrait être un mauvais exemple de régler un programmeur PHP débutant, OOP ou autre.
Non ce n'est pas. mourir n'ont pas de relation avec OOP.
La manipulation des exceptions fait partie intégrante de OOP. Die () produit immédiatement des erreurs fatales. Voir Stackoverflow.com/questions/3845494/PHP-OOP- Exceptions-or-di e
Je sais, mais je ne peux jamais faire un bloc de try..catch. Une fois, je devrai appeler mourir ();
Laissez-nous Continuez cette discussion en chat
Il suffit d'utiliser
mysql_connect () code> etmysql_close () code> au début et à la fin de votre programme complet. Il n'est pas nécessaire d'instancier une connexion à chaque méthode.@liqual: votre commentaire pourrait être une réponse!
@idiqual Vous ne devriez pas encourager l'utilisation de
MySQL _ code> du tout, en particulier pour que quelqu'un vient d'entrer dans la langue et commence un nouveau projet.Si vous souhaitez garder DB à la classe de comptabilité, connectez-vous dans votre
__ construire code> et implémentez__ destruct code> méthode pour détruire la connexion lorsque l'objet est détruit.Utilisez Singleton Motif. Exemple Stackoverflow.com/Questtions/8685896/...