Heim >Datenbank >MySQL-Tutorial >Wie kann ich innerhalb einer PHP-Klasse ordnungsgemäß auf externe Objekte zugreifen?

Wie kann ich innerhalb einer PHP-Klasse ordnungsgemäß auf externe Objekte zugreifen?

Susan Sarandon
Susan SarandonOriginal
2025-01-18 00:10:38574Durchsuche

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

Globale Variablen in der Klasse verwenden

In PHP kann mit dem Schlüsselwort global aus einer Klasse heraus auf globale Variablen zugegriffen werden. Dies kann jedoch zu Problemen bei der Lesbarkeit und Wartbarkeit des Codes führen. Betrachten Sie das folgende Codebeispiel:

<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>

in pagi.php Datei:

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

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

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

}</code>

Dieser Code versucht, eine get_records-Variable außerhalb der pagi-Klasse in einer $db-Methode zu verwenden. Dies führt jedoch zu einem schwerwiegenden Fehler, da über den Operator -> nicht auf globale Variablen zugegriffen werden kann.

Abhängigkeitsinjektion: Ein besserer Weg

Eine bessere Möglichkeit, auf externe Objekte zuzugreifen, ist die Abhängigkeitsinjektion. Bei diesem Ansatz wird das externe Objekt als Parameter an den Konstruktor oder die Methode der Klasse übergeben. Zum Beispiel:

<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>
<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>

In diesem Fall wird das $db-Objekt über den Konstruktor an die Paginator-Klasse übergeben. Dadurch kann eine Klasse Abfragen mithilfe des $db-Objekts durchführen, ohne es als globale Variable festzulegen oder eine neue Instanz innerhalb der Klasse zu erstellen.

Fazit

Während die Verwendung globaler Variablen praktisch sein kann, ist die Abhängigkeitsinjektion eine flexiblere und einfacher zu verwaltende Methode zum Hinzufügen externer Funktionalität zu einer Klasse. Durch die explizite Übergabe von Abhängigkeiten entkoppeln Sie eine Klasse von einer bestimmten Implementierung und erleichtern das Testen und Warten.

Das obige ist der detaillierte Inhalt vonWie kann ich innerhalb einer PHP-Klasse ordnungsgemäß auf externe Objekte zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn