Maison > base de données > tutoriel mysql > Comment puis-je accéder correctement aux objets externes dans une classe PHP ?

Comment puis-je accéder correctement aux objets externes dans une classe PHP ?

Susan Sarandon
Libérer: 2025-01-18 00:10:38
original
574 Les gens l'ont consulté

How Can I Properly Access External Objects Within a PHP Class?

Utiliser des variables globales dans la classe

En PHP, les variables globales sont accessibles depuis l'intérieur d'une classe à l'aide du mot-clé global. Cependant, cela peut entraîner des problèmes de lisibilité et de maintenabilité du code. Considérez l'exemple de code suivant :

<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); // 连接数据库
include_once("pagi.php");

$pagination = new pagi();
$records = $pagination->get_records("SELECT * FROM `table`");</code>
Copier après la connexion

dans le pagi.php fichier :

<code class="language-php">class pagi {

    public function get_records($q) {
        global $db;

        $x = $db->query($q);
        return $db->fetch($x);
    }

}</code>
Copier après la connexion

Ce code tente d'utiliser une variable get_records en dehors de la classe pagi dans une méthode $db. Cependant, cela entraîne une erreur fatale car les variables globales ne sont pas accessibles via l'opérateur ->.

Injection de dépendance : une meilleure façon

Une meilleure façon d'accéder aux objets externes est l'injection de dépendances. Dans cette approche, l'objet externe est passé en paramètre au constructeur ou à la méthode de la classe. Par exemple :

<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); // 连接数据库
include_once("pagi.php");

$pagination = new Paginator($db);
$records = $pagination->get_records("SELECT the, fields, you, want, to retrieve FROM `table`");</code>
Copier après la connexion
<code class="language-php">class Paginator
{    
    protected $db;

    public function __construct(DB_MySQL $db)
    {
        $this->db = $db;
    }

    public function get_records($q) {
        $x = $this->db->query($q);
        return $this->db->fetch($x);
    }

}</code>
Copier après la connexion

Dans ce cas, l'objet $db est passé à la classe Paginator via le constructeur. Cela permet à une classe d'effectuer des requêtes en utilisant l'objet $db sans le définir comme variable globale ni créer une nouvelle instance au sein de la classe.

Conclusion

Bien que l'utilisation de variables globales puisse être pratique, l'injection de dépendances est une méthode plus flexible et plus facile à maintenir pour ajouter des fonctionnalités externes à une classe. En transmettant explicitement les dépendances, vous dissociez une classe d'une implémentation spécifique et facilitez son test et sa maintenance.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal