objecten
ik wil graag een object 1x definiƫren, en dan in alle functies van alle klassen kunnen gebruiken.
het moet een soort superglobal worden,
nu heb ik
en dit moet ik iedere functie van elke class herhalen, hoe voorkom ik dat?
het moet een soort superglobal worden,
nu heb ik
en dit moet ik iedere functie van elke class herhalen, hoe voorkom ik dat?
Gesponsorde koppelingen:
en dat object moet je dan via parent:: gebruiken, kan dit ook met gewoon oDb ofzo?
Gewijzigd op 01/01/1970 01:00:00 door Robin de Vries
Je wilt een bepaalde instantie van een klasse in verschillende methods van verschillende klassen gebruiken? De meest gangbare manier is dan om het object als parameter aan de betreffende method mee te geven.
Om verder te gaan op jouw voorbeeld van een database connectie, je maakt natuurlijk niet binnen elke methode een nieuwe verbinding met de database, dat is nergens voor nodig. Geef de instantie die de database verbinding bevat mee als parameter:
Om verder te gaan op jouw voorbeeld van een database connectie, je maakt natuurlijk niet binnen elke methode een nieuwe verbinding met de database, dat is nergens voor nodig. Geef de instantie die de database verbinding bevat mee als parameter:
dat is wel een mooie oplossing, maar is er geen manier om een superglobal aan te maken, of is dat af te raden?
Dan zou je de instantie $oDb natuurlijk ook in een sessievariabele kunnen zetten.
maar het gaat mij erom wat de veiligste, code is..
en
werkt niet?
en
werkt niet?
Nee dat zal inderdaad niet werken. Als je binnen een method een variabele van buiten de method wilt gebruiken, zul je hem binnen de global scope moeten halen met de volgende regel:
Op deze manier kun je $deVariabele, die buiten jouwMethod() gedeclareerd is, binnen jouwMethod() gebruiken. Voorwaarde is natuurlijk wel dat $deVariabele reeds gedeclareerd is voordat je jouwMethod() aanroept.
En dat is direct de reden waarom het niet verstandig is om het op deze manier aan te pakken. Voordat je jouwMethod() kunt gebruiken, moet je dan altijd zorgen dat $deVariabele gedeclareerd is. Dat gaat zeker voor bugs in je scripts zorgen en die zouden wel eens erg lastig terug te vinden zijn.
Veel beter is het dan om $deVariabele gewoon als parameter aan jouwMethod() mee te geven.
Op deze manier kun je $deVariabele, die buiten jouwMethod() gedeclareerd is, binnen jouwMethod() gebruiken. Voorwaarde is natuurlijk wel dat $deVariabele reeds gedeclareerd is voordat je jouwMethod() aanroept.
En dat is direct de reden waarom het niet verstandig is om het op deze manier aan te pakken. Voordat je jouwMethod() kunt gebruiken, moet je dan altijd zorgen dat $deVariabele gedeclareerd is. Dat gaat zeker voor bugs in je scripts zorgen en die zouden wel eens erg lastig terug te vinden zijn.
Veel beter is het dan om $deVariabele gewoon als parameter aan jouwMethod() mee te geven.
maar als ik op index.php (waar alle objecten worden ingeladen) neerzet
dan kan ik met global het gebruiken. want dan is hij bij index.php gedefiniƫerd? toch?
dan kan ik met global het gebruiken. want dan is hij bij index.php gedefiniƫerd? toch?
Jep, maar wat is dan het probleem om $oDb gewoon als parameter aan je methods mee te geven?
Dat global idee gaat juist in tegen de hele OOP gedachte, namelijk dat stukken code eenvoudig herbruikbaar moeten zijn. En dat verminder je in jouw geval aangezien je met jouw oplossing vereist dat er altijd een variabele genaamd $oDd met de juiste inhoud gedeclareerd is voordat je de betreffende methods kunt gebruiken.
Het probleem is dat de variabele $oDb altijd precies die naam moet hebben en je daar nooit vanaf kunt wijken in je scripts. Gevolg: een klein spelfoutje of verandering qua naamgeving en je scripts werken niet meer. Dat probleem heb je niet als je de variabele als paramter aan je methods meegeeft, dan maakt het niets uit welke naam de variabele in het procedurele script heeft...
Dat global idee gaat juist in tegen de hele OOP gedachte, namelijk dat stukken code eenvoudig herbruikbaar moeten zijn. En dat verminder je in jouw geval aangezien je met jouw oplossing vereist dat er altijd een variabele genaamd $oDd met de juiste inhoud gedeclareerd is voordat je de betreffende methods kunt gebruiken.
Het probleem is dat de variabele $oDb altijd precies die naam moet hebben en je daar nooit vanaf kunt wijken in je scripts. Gevolg: een klein spelfoutje of verandering qua naamgeving en je scripts werken niet meer. Dat probleem heb je niet als je de variabele als paramter aan je methods meegeeft, dan maakt het niets uit welke naam de variabele in het procedurele script heeft...
ok, je hebt me overtuigt :) dat gaat dus parameter werk worden...
dan nog 1 dingetje, hoe geef je een parameter mee met een construct function?
dan nog 1 dingetje, hoe geef je een parameter mee met een construct function?
duidelijk.



