OOP med PHP?
jeg har et spørgsmål til php-oop?
hva' synes I?
jeg har en klasse der etabler forbindelse med database og varetager alle kald.
så har jeg en anden klasse der håndterer brugere på siden og den skal naturligvis benytte sig af database-klassen... men hvordan?
Hvad er mest korrekt?
1. bruger-klassen arver database-klassen
2 brugerklassen bruger funktioner/metoder i database-klassen?
hva' synes I?
jeg har en klasse der etabler forbindelse med database og varetager alle kald.
så har jeg en anden klasse der håndterer brugere på siden og den skal naturligvis benytte sig af database-klassen... men hvordan?
Hvad er mest korrekt?
1. bruger-klassen arver database-klassen
2 brugerklassen bruger funktioner/metoder i database-klassen?
Kommentarer7
Re: OOP med PHP?
Hvis din brugerklasse specifikt handler om databaseintegration med dine brugere, og at alle eller næsten alle operationer med brugerklassen skal igennem databasen, så giver det mening hvis den arver databaseklassen.
Hvis brugerklassen derimod også skal lave ting der ikke er fra databasen, på lige fod med database-operationerne (fx hvis den både skal håndtere database-operationer og session-data om den nuværende bruger), så giver det bedre mening at den kalder metoder fra databaseklassen snarere end at nedarve den, og det samme hvis du bruger en eventuel session-/cookie-klasse.
Re: OOP med PHP?
kan man iøvrigt ikke kun arve fra en klasse i php?
Re: OOP med PHP?
Re: OOP med PHP?
Derudover vil det jo betyde at du har en ny forbindelse til databasen hvergang du haandterer et database-objekt. F.eks. hvis du har et objekt til at haandtere brugere og et andet til at haandtere gaestebogsindlaeg med saa vil de have hver sin forbindelse til databasen ... det giver problemer.
Den rigtige maade at goere det paa er noget ala:
class Database()
{
// Stuph
}
class Brugere()
{
private $db;
public function __construct($db)
{
$this->$db=$db;
}
}
$db = new Database();
$bruger = new Brugere($db);
Haaber du fangede ideen i det ... det er saadan man goer hvis det skal goeres rigtigt :)
Re: OOP med PHP?
"Favour composition over inheritance".
Altså, undgå at nedarve som udgangspunkt med mindre du vitterligt kan forsvare det. I mange tilfælde vil komposition (det at instantiere en klasse som en lokal variabel inde i sig selv) eller aggregering (at benytte en instans af en klasse som er instantieret andetsteds) give lige så meget mening.
Dette råd giver specielt mening såfremt man snakker om single-inheritance sprog så som Java/C# - muligvis PHP, jeg er for doven til at slå det op.
(Basalt set, kan du kun arve fra én klasse og eventuelt implementere et antal interfaces, så har du med et single-inheritance sprog at gøre).
Hvorfor ? Well, igen, hvis det er et single-inheritance sprog så har du ikke opbrugt din ene værdifulde mulighed fra at arve fra en klasse, endvidere har du med komposition bedre kontrol over din klasses interface.
Såfremt du arver kan du ALDRIG indskrænke interfacet (dvs. skifte en public metod til private) - kun udvide det.
Derfor kan andre nu benytte din klasse og kalde metoder som du måske ikke ønsker de skal kalde direkte.
Ergo har du ødelagt indkapslingen af din kode - hvilket er fy-fy :)
Re: Re: OOP med PHP?
Re: OOP med PHP?
Derfor ;)