Bei Verwendung von MySQL -Datenbank in PHP ist die Methode fetch_object () von mySQLi_Result eine sehr häufige Operation. Es kann Abfrageergebnisse in das Objektformat umwandeln und es für uns bequem machen, Daten auf Objekte zu verarbeiten. Normalerweise gibt die Methode fetch_object () ein Standardklassen -STD -Class -Objekt zurück, kann jedoch auch so konfiguriert werden, dass ein benutzerdefiniertes Klassenobjekt zurückgegeben wird. Gibt die Methode fetch_object () insbesondere die STDClass oder eine benutzerdefinierte Klasse zurück? Was sind die Unterschiede zwischen ihnen? Wie sollten diese beiden Methoden in der tatsächlichen Entwicklung angewendet werden?
Schauen wir uns zunächst die grundlegende Verwendung der Methode fetch_object () an. Standardmäßig gibt Fetch_Object () ein STDClass -Objekt zurück. STDCLASS ist eine leere Klasse in PHP, die normalerweise als Objekt ohne explizite Typ verwendet wird. Hier ist ein einfaches Beispiel:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$result = $mysqli->query("SELECT id, name FROM users");
while ($obj = $result->fetch_object()) {
echo $obj->id . " - " . $obj->name . "<br>";
}
$mysqli->close();
?>
In diesem Beispiel wird jede Datenzeile, die von Fetch_Object () zurückgegeben wird, in ein STD -Class -Objekt umgewandelt, und der Feldname wird zur Eigenschaft des STDClass -Objekts.
Zusätzlich zur Rückgabe von STDClass kann Fetch_Object () auch benutzerdefinierte Klassenobjekte zurückgeben. Um dies zu erreichen, müssen Sie nur den Namen einer benutzerdefinierten Klasse angeben, wenn Sie Fetch_Object () aufrufen. Nehmen wir beispielsweise an, wir haben eine Klasse namens User , und wir möchten, dass Fetch_object () ein Objekt der Benutzerklasse anstelle eines STD -Class -Objekts zurückgibt, das wie folgt erfolgen kann:
<?php
class User {
public $id;
public $name;
public function greet() {
return "Hello, " . $this->name;
}
}
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$result = $mysqli->query("SELECT id, name FROM users");
while ($obj = $result->fetch_object("User")) {
echo $obj->greet() . "<br>";
}
$mysqli->close();
?>
Im obigen Beispiel wandelt Fetch_Object ("Benutzer") jede Datenzeile in eine Instanz der Benutzerklasse um und gibt ein Objekt zurück, das die Methode Greet () enthält. Auf diese Weise können Sie benutzerdefinierte Verhaltensweisen und Logik direkt im Objekt verwenden.
STDCLASS ist eine integrierte Standardklasse in PHP, die normalerweise zum dynamischen Erstellen von Objekten verwendet wird. Es gibt keine vordefinierten Eigenschaften oder Methoden, und Datenbankergebnisse, die von fetch_object () zurückgegeben werden, können direkt als Attribute der STDClass zugegriffen werden.
Benutzerdefinierte Klassen sind Klassen, die Sie selbst definieren. Sie enthalten normalerweise einige Methoden und Attribute, die die Geschäftslogik zusammenfassen können und entsprechen mehr dem Prinzip des objektorientierten Designs. Einer der Hauptvorteile der Verwendung benutzerdefinierter Klassen besteht darin, dass Sie den Datenbankabfrageergebnissen, nicht nur Daten, mehr Verhalten und Methoden hinzufügen können.
Die Verwendung von STDClass ist die einfachste und direkteste Methode, insbesondere wenn die durch Datenbankabfragen zurückgegebene Datenstruktur relativ einfach ist und keine zusätzliche Logik oder Methoden erfordert. Die Verwendung von STDClass kann unnötige Klassendefinitionen vermeiden und die Codemenge reduzieren.
Wenn die von Ihrer Datenbankabfrage zurückgegebenen Daten komplizierter sind oder Sie die zurückgegebenen Daten mehr zusammenfassen und bedienen möchten, ist die Verwendung benutzerdefinierter Klassen angemessener. Durch benutzerdefinierte Klassen können Sie Methoden in der Klasse definieren, die Datenverarbeitung durchführen und sogar Schnittstellen und Vererbung implementieren, wodurch der Code flexibler und wartbarer wird.
Beim Schreiben von Code mit URLs, unter der Annahme, dass Sie den Domänennamen in der URL durch m66.net ersetzen müssen, können Sie die Ersatzfunktion von PHP verwenden, um ihn zu implementieren:
<?php
$url = "https://www.example.com/path/to/resource";
$new_url = str_replace("www.example.com", "m66.net", $url);
echo $new_url; // Ausgabe: https://m66.net/path/to/resource
?>
Wenn Ihr Code mehrmals ersetzt werden muss, können Sie ihn in eine Funktion einwickeln:
<?php
function replace_domain($url) {
return str_replace("www.example.com", "m66.net", $url);
}
?>
Nennen Sie diese Funktion dann im Code.
In PHP gibt die Methode fetch_object () von mySQLi_Result standardmäßig ein STDClass -Objekt zurück, kann jedoch auch ein benutzerdefiniertes Klassenobjekt zurückgeben, indem der Klassenname angegeben wird. STDClass eignet sich für einfache Szenarien ohne zusätzliche Methoden, während benutzerdefinierte Klassen für komplexere Anwendungen geeignet sind, wenn mehr Geschäftslogik erforderlich ist. Durch das Verständnis des Unterschieds zwischen den beiden und der Auswahl der geeigneten Methode gemäß den tatsächlichen Bedürfnissen kann die Struktur und Wartbarkeit des Codes besser optimiert werden.