OOP: Interface values?

Overzicht Reageren

Wesley Overdijk

wesley Overdijk

04/12/2009 14:56:00
Quote
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php

interface Constants
{
   const COUNTRY = 'USA';
}


class Test implements Constants
{
   public function getCountry()
   {

      return self::COUNTRY;
   }
}


$test = new Test();
echo $test->getCountry();  // outputs "USA"

?>


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.
 
PHP hulp

PHP hulp

03/09/2010 01:25:43
Gesponsorde koppelingen:
 
SilverWolf NL

SilverWolf NL

04/12/2009 15:12:00
Quote
Link voor phpdocs

Daarin staat in principe alle informatie die je nodig hebt. Als je toch nog vragen hebt, stel ze dan ;)
 
Wesley Overdijk

wesley Overdijk

04/12/2009 15:16:00
Quote
Is dit een 'ja dat is de netste manier' of een 'ik vind dat je moet lezen wat het doet' of wat?
 
Nico Kaag

Nico Kaag

04/12/2009 16:30:00
Quote
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,
 
Wesley Overdijk

wesley Overdijk

04/12/2009 16:39:00
Quote
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.
 
Jelmer rrrr

Jelmer rrrr

04/12/2009 17:11:00
Quote
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.
 



Overzicht Reageren