Hoi,

Naast Laravel probeer ik ook nog voor mijn ander project een User Class te bouwen.
Ik probeer veel te lezen, maar moet nog veel leren ivm OOP.

Heb momenteel dit:
<?php
/*
* Classes ..
*/
Class User
{
public $_username, $_password;
public $_permissions = Array();

public function __construct() {
# Construct
}

public function GetUsername() {
# De username opvragen
}

public function SetUsername() {
# De username invoeren
}

public function GetPassword() {
# De password opvragen
}

public function SetPassword() {
# De password invoeren
}

}

Class Login extends DataMapper
{
public $_username, $_password;

public function CheckUserByUsernamePassword() {
# Kijken of de gebruiker juist wachtwoord & gebruikersnaam heeft ingevuld.
}
}

Class DataMapper extends User
{
# Hier worden de query's gemaakt.

public function UserDataByUsername() {
# Een gebruiker zijn info ophalen
}
public function AddUser() {
# Nieuwe gebruiker aanmaken
}
public function EditUserByUsername() {
# Een gebruiker bewerken
}
public function DeleteUserByUsername() {
# Een gebruiker verwijderen
}

# Hier komen dan nog meer functies.
}



Class Database extends DataMapper
{
# Class om query's af te handelen.

}
?>

Wat kan beter, en mis ik nog iets?
Mvg,
Diov
Je kunt beter een data mapper meegeven aan een login class, in plaats van te laten extenden. Dus een Login class krijgt een User object, en een DataMapper object en probeert te kijken of er een match is
GEEN public properties.
Helemaal opvallend dat je er wel een underscore voor zet, wat over het algemeen betekent dat het een private property is. De conventie van de underscore moet je zelf bepalen (of je het wil gebruiken), maar als je het doet, maak het dan ook private natuurlijk.
Als ik jou was, zou ik de methods in camelCase schrijven, zonder begin hoofdletter, dus getUsername() ipv GetUsername(), setUsername() ipv SetUsername() etc.
Je begrijpt extenden verkeerd. Extenden betekend "is een". Dus bijv. "Een UserMapper IS EEN DataMapper". Wat jij nu hebt is "Een Database IS EEN DataMapper" en "Een DataMapper IS EEN User" en "Een Login IS EEN DataMapper". Dat betekend dus eigenlijk "Een Database IS EEN User" en "Een Login IS EEN User". Geen van deze statements kloppen natuurlijk :)

Oplossing: Maak van IS EEN, HEEFT EEN: "Een Login HEEFT EEN DataMapper" en "Een UserDataMapper HEEFT EEN User" of verwijder/verander gewoon de hele relatie: "Een DataMapper HEEFT EEN Database"

De HEEFT EEN relatie doe je gewoon door een object mee te geven:
<?php
class Login
{
private $userMapper;

public function __construct(DataMapper $mapper)
{
$this->userMapper = $mapper;
}
}

// gebruik
$db = new Database(...);
$mapper = new UserMapper($db);
$login = new Login($mapper);
?>

Als laatst zou ik niet kiezen voor Login, aangezien je in die klasse waarschijnlijk ook de logout wil doen. Gebruik bijv. Authentication.

Reageren