OOP: Interface values?
Beste,
Ik ben de magische wereld van OOP nog eens aan het verkennen...
Nou stuit ik direct op een onhandigheid. Ik heb namelijk bepaalde waardes, die ik in elk script wil hebben.
In mijn config bestand, wil ik vars hebben als, $adminEmail, $debug, $usersTable etc...
Is dit mogelijk? Ik had zelf wat 'theorieën' bedacht. namelijk, een constructor, een global *niet mijn idee geweest*, en gewoon, includen boven de class. En ik had dit gevonden:
Ziet er veelbelovend uit maar... is dit wat? Graag zou ik hulp krijgen, en mogelijk toelichting over hoe te gebruiken, en waarom.
Alvast enorm veel bedankt,
solow.
Ik ben de magische wereld van OOP nog eens aan het verkennen...
Nou stuit ik direct op een onhandigheid. Ik heb namelijk bepaalde waardes, die ik in elk script wil hebben.
In mijn config bestand, wil ik vars hebben als, $adminEmail, $debug, $usersTable etc...
Is dit mogelijk? Ik had zelf wat 'theorieën' bedacht. namelijk, een constructor, een global *niet mijn idee geweest*, en gewoon, includen boven de class. En ik had dit gevonden:
Code (php)
Ziet er veelbelovend uit maar... is dit wat? Graag zou ik hulp krijgen, en mogelijk toelichting over hoe te gebruiken, en waarom.
Alvast enorm veel bedankt,
solow.
Gesponsorde koppelingen:
Link voor phpdocs
Daarin staat in principe alle informatie die je nodig hebt. Als je toch nog vragen hebt, stel ze dan ;)
Daarin staat in principe alle informatie die je nodig hebt. Als je toch nog vragen hebt, stel ze dan ;)
Hoewel ik de vraagstelling niet helemaal begrijp,, ga ik toch even mij best doen om een antwoord te geven, (ik kan er dus volledig naast zitten)
Maar een interface is niet bedoeld om variablen in op te slaan of te declareren.
In een interface staan alleen maar niet geïmplementeerde functies, die in de class die er gebruik van maakt moeten worden geïmplementeerd.
Als je variablen wilt gaan gebruiken, zul je een abstracte klasse o.i.d. moeten gaan gebruiken.
Als het goed is (weet niet hoe het in PHP zit), kan je maar 1 extend (dus gebruik maken van abstracte klasse) gebruiken, maar meerdere implements (invoegingen van interfaces).
Een voorbeeld waarvoor een interface gebruikt kan worden is voor verschillende gebouwen.
Je kan dan bijvoorbeeld 2 interfaces maken.
1 voor de woningbouw vereniging.
1 voor het schildersbedrijf.
Dus je krijgt een interface WoningObject, en een interface OnderhoudsObject (om maar iets te noemen)
Een woning object zou een functie kunnen hebben van setMaxBewoners($i);
Een onderhouds object zou een functie kunnen hebben van doeVerf();
Als je nu een rijtjes huis heb, en een fabriek,
Dan zou een rijtjes huis onder zowel een WoningObject vallen, als onder een OnderhoudsObject.
Een fabriek zou alleen een OnderhoudsObject zijn.
Het is het makkelijkst als je dus een abstracte klasse gebouw zou maken, die een aantal variablen heeft, en dan zou je interfaces kunnen gebruiken om te zorgen dat ze nog extra functies hebben, die voor het specifieke object nodig zijn.
Hoop dat je hier iets aan heb,
Maar een interface is niet bedoeld om variablen in op te slaan of te declareren.
In een interface staan alleen maar niet geïmplementeerde functies, die in de class die er gebruik van maakt moeten worden geïmplementeerd.
Als je variablen wilt gaan gebruiken, zul je een abstracte klasse o.i.d. moeten gaan gebruiken.
Als het goed is (weet niet hoe het in PHP zit), kan je maar 1 extend (dus gebruik maken van abstracte klasse) gebruiken, maar meerdere implements (invoegingen van interfaces).
Een voorbeeld waarvoor een interface gebruikt kan worden is voor verschillende gebouwen.
Je kan dan bijvoorbeeld 2 interfaces maken.
1 voor de woningbouw vereniging.
1 voor het schildersbedrijf.
Dus je krijgt een interface WoningObject, en een interface OnderhoudsObject (om maar iets te noemen)
Een woning object zou een functie kunnen hebben van setMaxBewoners($i);
Een onderhouds object zou een functie kunnen hebben van doeVerf();
Als je nu een rijtjes huis heb, en een fabriek,
Dan zou een rijtjes huis onder zowel een WoningObject vallen, als onder een OnderhoudsObject.
Een fabriek zou alleen een OnderhoudsObject zijn.
Het is het makkelijkst als je dus een abstracte klasse gebouw zou maken, die een aantal variablen heeft, en dan zou je interfaces kunnen gebruiken om te zorgen dat ze nog extra functies hebben, die voor het specifieke object nodig zijn.
Hoop dat je hier iets aan heb,
Bedankt voor de uitleg. Ik heb er hierin wel wat aan op zich, maar vooral leer ik er wat van. Wat het nou is, het maakt mij niet uit of het een variabele is, of een interface value. het gaat me erom dat ik in 1 script waardes kan zetten *config.php* en dat ik deze in alle classes kan gebruiken.
Je kan functies gebruiken, of constanten (define) of een class. Die class kan je allemaal static methods (lees: veredelde functies) geven, of singleton (lees: veredelde functies, maar dan anders) maken.
Het is in mijn optiek allemaal even ranzig en even netjes. Functies en methods hebben als voordeel boven variabelen en constanten dat je bijvoorbeeld pas een database-verbinding hoeft aan te maken wanneer die ook daadwerkelijk nodig is. Constanten kunnen alleen maar scalar typen bevatten, wat voor configuratie op zich wel kan, maar voor een mix van configuratie en initialisatie niet gaat werken. (Met initialisatie bedoel ik vooral ipv je db gebruikersnaam & wachtwoord gewoon een 'new PDO' aanroep in je configuratie zetten)
Alle oplossingen die hier staan hebben als nadeel dat je de classes waarin je die configuratie gebruikt niet meer zonder diezelfde configuratie kan gebruiken. Dat kan je oplossen door geen configuratie-constanten in je classes te gebruiken: instellingen gewoon bij het aanmaken van het object meegeven aan de constructor.
Het is in mijn optiek allemaal even ranzig en even netjes. Functies en methods hebben als voordeel boven variabelen en constanten dat je bijvoorbeeld pas een database-verbinding hoeft aan te maken wanneer die ook daadwerkelijk nodig is. Constanten kunnen alleen maar scalar typen bevatten, wat voor configuratie op zich wel kan, maar voor een mix van configuratie en initialisatie niet gaat werken. (Met initialisatie bedoel ik vooral ipv je db gebruikersnaam & wachtwoord gewoon een 'new PDO' aanroep in je configuratie zetten)
Alle oplossingen die hier staan hebben als nadeel dat je de classes waarin je die configuratie gebruikt niet meer zonder diezelfde configuratie kan gebruiken. Dat kan je oplossen door geen configuratie-constanten in je classes te gebruiken: instellingen gewoon bij het aanmaken van het object meegeven aan de constructor.


