Zunächst einmal ist OOP nicht viel anders als prozedural. Der Hauptunterschied besteht darin, dass anstelle von Daten und Funktionen, die mit den Daten arbeiten, Objekte vorhanden sind, die die Daten kapseln, sowie die Operationen, die für diese Daten gültig sind.
In seinem Kern kapselt OOP prozedurale Programmierung jedoch mit dem Unterschied, dass der prozedurale Teil innerhalb von Objekten und nicht auf Anwendungsebene stattfindet.
Um von prozeduralen auf OOP zu migrieren, müssen Sie Ihren Code nur in logisch zusammenhängenden Teilen trennen. Im Falle von Datenbanken passiert in der Regel jede Datenbanktabelle eine Klasse (in MVC-Frameworks heißt das Daten) Modell). Wenn Sie beispielsweise eine Tabelle mit der Bezeichnung users
haben, haben Sie möglicherweise eine entsprechende User
Klasse.
class User {
private $id;
private $alsoOtherProperties;
public function __construct($dbconnection, $id) {
//Load the user from id
}
/* Setters and getters and other function here which operate on the user */
}
Anschließend erstellen Sie eine Instanz eines Benutzers, den Sie aus der $ id für die Datenbankverbindung erstellen. Der einfachste Weg ist, das zu tun, was Sie bereits tun, um die ID zu erhalten. Von hier aus auf Ihre Daten werden auf dem User
Objekt in Betrieb sein und nicht auf einer Datenbank Ergebnis. Auf diese Weise müssen Sie sich keine Gedanken über die Änderung der Datenbankstruktur machen, da Sie das Modell nur so aktualisieren können, dass es mit der neuen Struktur arbeitet, und der Rest des Codes muss nicht geändert werden.
Zum Beispiel, sagen Sie die „letztes angemeldet“ Spalte für einen Benutzer zum Zeitpunkt der Log-in aktualisiert werden sollen:
//Other code around here
$ID = $db->real_escape_string(strip_tags(stripslashes($_GET['ID'])));
$user = new User($db,ID);
$user->setLastLogin(time());
$user->save();
In diesem Beispiel gibt es zwei Funktionen definiert in der Klasse User
zusätzlich zu der Konstruktor, der die letzte Anmeldezeit einstellen soll und dann die Datenbankzeile aktualisieren soll, die dem Benutzer entspricht.Wie Sie sehen können, hat dies keine MySQL-spezifische Logik und der zugrunde liegende Code in der Benutzerklasse kann entweder eine MySQL-Datenbank oder eine Textdatei aktualisieren oder nichts tun (z. B. wenn nur Tests ausgeführt werden).
Hinweis: Dies ist nur ein Beispiel, wahrscheinlich nicht sehr gut, Sie sollten wirklich wirklich OOP studieren, um mehr darüber zu erfahren.
Wäre es möglich, sobald ein Benutzer die user.php besucht, um die ID dann an user_c.php zu senden? Wenn ich zum Beispiel die user.php? ID = 2 besuche, würde sie user_c.php? ID = 2 enthalten und die ID auch an diese Datei schicken? – Lachlan
Fragen Sie, wie man etwas wie $ record = MyClass :: find ($ _ GET ['ID']) ''? Sie sollten nicht direkt auf GET-Parameter in einer Klasse verweisen - es sei denn, der Zweck dieser Klasse ist z. Parsing der aktuellen URL. Sie müssen der Frage Code hinzufügen, damit sie hier behandelt wird. – AD7six
Angenommen, Sie haben Ihre Klasse instanziiert und vorausgesetzt, Sie haben (prozedural) mit PHP-Funktionen gearbeitet, können Sie Ihre Argumente an die Methode eines Objekts übergeben: '$ myResult = $ myInstance-> myMethod ($ myArgument);' – Burki