Kann jemand ein perfektes Beispiel für ein grundlegendes "Benutzer" -Objektsystem geben, das PDO verwendet?

8

Ich möchte den idealen Rahmen für ein System sehen, das eine Gruppe von Objekten (dh Benutzer) hat, wobei die Daten in einer Datenbank enthalten sind. Mir wurde geraten, eine Benutzerklasse und eine UserMapper-Klasse zu haben, und das ist mein Verständnis davon, wie es aussehen sollte:

user.class.php     

%Vor%

main.php

%Vor%

Aber das scheint ein bisschen chaotisch in Bezug auf die Main.php Seite. Kann ich nicht ein PDO-Objekt erstellen und dieses in allen meinen Skripten definieren? Sowie ein UserMapper Objekt? Oder jedes Mal, wenn ich einen Benutzer aus der Datenbank holen will, muss ich ein neues userMapper-Objekt erstellen, dann findByUserId (wie oben). Oder gibt es einen einfacheren Weg, dies zu tun?

Wenn ich ein UserGroup-Objekt innerhalb der Klasse User aufrufen möchte, wie würde ich das tun? (Dies müsste auch über PDO mit der Datenbank verbunden werden). Das Folgende scheint chaotisch zu sein:

%Vor%     
Tom 14.10.2013, 18:13
quelle

3 Antworten

1

Eine Sache, an die ich denken kann, ist, diese Klasse zu einem Singleton zu machen und den $ user über der Deklaration der Klasse zu erstellen. Wenn Sie also diese Klasse einschließen, haben Sie dieses Benutzerobjekt.

    
Gilad_Gr 15.10.2013 11:47
quelle
1
  

Kann ich kein PDO-Objekt erstellen und dieses in allen meinen definieren?   Skripte? Sowie ein UserMapper Objekt?

Sie suchen eigentlich nach einem Front Controller.

Das heißt, um die gleiche Instanziierung der gleichen Klassen zu vermeiden, sollten Sie sie vorbereitet haben. Die meisten Leute machen das normalerweise in bootstrap.php , das "optimiert" alle erforderlichen Abhängigkeiten.

Aber eine Front-Controller-Implementierung enthält auch einen Dispatcher und einen Router. Ich werde nicht tiefer darauf eingehen, sondern mich auf das Problem konzentrieren, das Sie stattdessen zu lösen versuchen.

Fabrikmuster

Es abstrahiert grundsätzlich die Instanziierungslogik. Die Vorteile sind: 1) Sie können die Instanziierung von Objekten verzögern. 2) Sie vermeiden den globalen Zustand, der für das Komponententesten schlecht ist. Die vereinfachte Version würde wie folgt aussehen:

%Vor%

Und schließlich

Eine sehr vereinfachte Version von bootstrap-er würde aussehen wie,

%Vor%

Sie würden einfach in alle Skripte einbeziehen, die auf Benutzer zugreifen müssen

%Vor%     
Yang 15.10.2013 13:03
quelle
1

Sie müssen stattdessen FETCH_CLASS verwenden, und Sie brauchen keinen userMapper, erweitern Sie einfach PDO und legen Sie dann den rechten Abrufmodus in einer Klasse fest.

Vergessen Sie nicht, die Klassendefinition verfügbar zu machen oder verwenden Sie einen Autoloader

%Vor%

FETCH_PROPS_LATE ist da, um den Konstruktor zuerst in Ihrer Klasse abgefeuert zu bekommen. Aber Sie brauchen keinen Konstruktor in Ihrem Fall, also verlieren Sie ihn einfach. Wenn du dich entscheidest, es zu behalten, dann solltest du einen Blick darauf werfen hier zuerst.

Hoffe das hilft viel Glück

    
ghousseyn 17.12.2013 20:13
quelle

Tags und Links