N Abend,
ich dachte eigentlich, dass ich OOP relativ gut verstanden hätte, wurde aber eines besseren belehrt. Deswegen suche ich jemanden, der mir hier ein bisschen helfen kann.
Ich teste gerade ein wenig mit Models ala Laravel, d.h. Aufrufe sehen so aus:
Ich dachte mir, das kann ich auch und hab munter losprogrammiert und aktuell sieht die Klasse auch recht gut aus (Unsauberkeiten sind zu entschuldigen). Allerdings scheitere ich an dem statischen Aufruf, der (zumindest bei Laravel) irgendwie keiner ist. Da ich mich die letzten Stunden vergeblich durch den Laravel-Code gekämpft habe um die Logik zu verstehen, bräuchte ich Hilfe von jemanden mit mehr Ahnung.
Ich weiß es ist eigentlich nur eine Spielerei, aber ich würde gern das Konzept verstehen.
Alles anzeigen
Konkret müsste ich also den statischen Aufruf an das Objekt durchreichen, da die anderen Funktionen dann ja auf diesem Objekt arbeiten können, allerdings stirbt PHP bereits beim Aufruf (logischerweise). Wie kann ich das abfangen?
ich dachte eigentlich, dass ich OOP relativ gut verstanden hätte, wurde aber eines besseren belehrt. Deswegen suche ich jemanden, der mir hier ein bisschen helfen kann.
Ich teste gerade ein wenig mit Models ala Laravel, d.h. Aufrufe sehen so aus:
Ich weiß es ist eigentlich nur eine Spielerei, aber ich würde gern das Konzept verstehen.
PHP-Quellcode
- abstract class Model {
- protected $query;
- protected $table;
- protected $columns = ['*'];
- protected $whereCondition;
- public function __construct() {
- $this->getTable();
- }
- public function find($int) {
- return $this->where('id', $int)->get();
- }
- public function select($columns) {
- $this->columns = is_array($columns) ? $columns : func_get_args();
- return $this;
- }
- public function where($key, $value, $operator = '=') {
- $this->whereCondition = $key . ' ' . $operator . ' ' . $value;
- return $this;
- }
- public function get() {
- $this->query = 'SELECT ' . implode(', ', $this->columns) . ' FROM ' . $this->table . ' WHERE ' . $this->whereCondition;
- return $this;
- }
- }
- class User extends Model {}
- // klappt wunderbar
- $user = new User();
- $user->select('id', 'name')->where('mail', 'asdf@asdf.de')->get();
- // so hätte ichs gern
- $user = User::select('id', 'name')->where('mail', 'asdf@asdf.de')->get();