Die Methoden sollten Objekte mit den beschriebenen Methoden zurückgeben, dann erhalten Sie, was Sie wollen.
Also, solange $DB
ein Objekt ist, das eine comments()
-Methode hat, ist dieser Teil gültig. Wenn diese comments()
ein Objekt zurückgibt, das eine id()
-Methode hat, ist auch dieser Teil gültig. Dann muss id()
ein Objekt zurückgeben, das die limit()
-Methode hat.
In Ihrem speziellen Fall möchten Sie vielleicht etwas wie das hier machen:
class DB {
public function comments() {
// mach Vorbereitungen, die das Objekt dazu bringen, die "comments"-Tabelle auszuwählen...
return $this;
}
public function id($string) {
// damit umgehen ...
return $this;
}
public function limit($int) {
// auch das
return $this;
}
public function execute() {
$success = try_to_execute_accumulated_db_commands();
return $success;
}
}
$DB = new DB();
$DB->comments()->id(" > 3")->limit(10);
In meinem Beispiel würde jede Methode (auch hier nicht dargestellt) das Objekt selbst zurückgeben, damit Befehle verkettet werden können. Wenn die Konstruktion der Datenbankabfrage abgeschlossen ist, werten Sie die Abfrage tatsächlich aus, indem Sie execute()
aufrufen, das (in meinem Fall) einen boolean-Wert zurückgeben würde, der den Erfolg der Datenbankausführung darstellt.
Benutzer nickohm schlug vor, dass dies eine fluent interface genannt wird. Ich muss zugeben, dass dies ein neuer Begriff für mich ist, aber das sagt wahrscheinlich mehr über mein Wissen aus als über die Verwendung des Begriffs. ("Ich schreibe einfach nur Code, wissen Sie...")
Hinweis: $this
ist eine 'magische' Variable, die auf das derzeit aktive Objekt verweist. Wie der Name schon sagt, gibt sie einfach sich selbst als Rückgabewert für die Methode zurück.