Versio

objecten

Overzicht Reageren

Robin de Vries

Robin de Vries

01/03/2009 15:58:00
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$oDb
= new database;
?>

en dit moet ik iedere functie van elke class herhalen, hoe voorkom ik dat?
 
PHP hulp

PHP hulp

25/05/2012 12:28:58
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Frank -

Frank -

01/03/2009 16:03:00
 
Robin de Vries

Robin de Vries

01/03/2009 16:04:00
Quote Anchor link
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
 
Joren de Wit
Beheerder

Joren de Wit

01/03/2009 16:43:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$oDb
= new database;
$oInstance->methode($oDb);
?>
 
Robin de Vries

Robin de Vries

01/03/2009 16:48:00
Quote Anchor link
dat is wel een mooie oplossing, maar is er geen manier om een superglobal aan te maken, of is dat af te raden?
 
Joren de Wit
Beheerder

Joren de Wit

01/03/2009 16:51:00
Quote Anchor link
Dan zou je de instantie $oDb natuurlijk ook in een sessievariabele kunnen zetten.
 
Robin de Vries

Robin de Vries

01/03/2009 16:53:00
Quote Anchor link
maar het gaat mij erom wat de veiligste, code is..

en
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
global $oDb = new database;
?>


werkt niet?
 
Joren de Wit
Beheerder

Joren de Wit

01/03/2009 17:01:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
function jouwMethod()
{

    global $deVariabele;
}

?>

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.
 
Robin de Vries

Robin de Vries

01/03/2009 17:03:00
Quote Anchor link
maar als ik op index.php (waar alle objecten worden ingeladen) neerzet
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$oDb
  = new database;
?>


dan kan ik met global het gebruiken. want dan is hij bij index.php gedefiniƫerd? toch?
 
Joren de Wit
Beheerder

Joren de Wit

01/03/2009 17:09:00
Quote Anchor link
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...
 
Robin de Vries

Robin de Vries

01/03/2009 17:12:00
Quote Anchor link
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?
 
Joren de Wit
Beheerder

Joren de Wit

01/03/2009 17:16:00
Quote Anchor link
Voorbeeldje:
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
<?php
class myClass
{
    public $sVar;
    
    public function __construct($sParam)
    {

        $this->sVar = $sParam;
    }
}


$oInstance = new myClass('parameter');
echo $oInstance->sVar;
?>
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Robin de Vries

Robin de Vries

01/03/2009 17:17:00
Quote Anchor link
duidelijk.
 



Overzicht Reageren