Variabele in class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Koko

koko

06/03/2007 19:20:00
Quote Anchor link
hoi,

Ik heb in mijn site een class geïnitialiseerd (is dit de correcte term) als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
require_once("core/classes/database.php");
$db = new Database;
?>


Nu wil ik in andere classes ook gebruik maken van deze variabele, maar zonder deze telkens als global te moeten aanduiden in elke function.

Bestaat hier een mogelijkheid toe?

Dit werkt niet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
var $db;
$this->db->execQuery($SQL);
?>
 
PHP hulp

PHP hulp

22/12/2024 12:12:24
 
Martijn B

Martijn B

06/03/2007 19:46:00
Quote Anchor link
Een mooie manier is om een centrale klasse (engine) te maken. Alle attributen van deze klasse kennen elkaar en de engine kent alle attributen.

Dit ziet er ongeveer zo uit:
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
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
class CEngine
{
   public $oMySQL, oBlaats;

   function
__construct
   {
       $this->oMySQL = new CMySQL($this);
       $this->oBlaat = new CBlaat($this);
   }
}


class CMySQL
{
   private oEngine;

   function
__construct( CEngine _oEngine )
   {

       $this->oEngine = _oEngine;
   }
}


class CBlaat
{
   private oEngine;

   function
__construct( CEngine _oEngine )
   {

       $this->oEngine = _oEngine;
   }
}

?>


edit:

In PHP4 moet je even letten op de references, dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$this
->oEngine = _oEngine;
?>

wordt dan b.v.:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$this
->oEngine =& _oEngine;
?>


Dit is niet de enige aanpassen voor PHP4!
Als je PHP5 hebt dat gaat het allemaal gewoon werken.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
 
Koko

koko

06/03/2007 20:07:00
Quote Anchor link
euhm :-S

Dit is me even boven t petje...
Ziet er wel mooi uit :p, maar kan je het even uitleggen aub?
 
Stien ss

stien ss

06/03/2007 21:21:00
Quote Anchor link
Ik gebruik hier altijd het Registry pattern voor, werkt vrij gemakkelijk,

Je maakt een classe waaraan je attributen toe kan voegen en kan verwijderen, deze classe in een singleton.

Dan kan je in elke classe deze attributen uit deze singleton class lezen, en zijn ze dus door heel je website beschikbaar.

Ik zal de classe die ik altijd gebruik bij scripts zetten, misschien heb je er wat aan, zal het in ieder geval wat duidelijker maken.

Deze manier lijkt wel veel op die van martijn, alleen is het misschien is het wat flexibeler.
Gewijzigd op 01/01/1970 01:00:00 door stien ss
 
Koko

koko

06/03/2007 22:55:00
Quote Anchor link
Hoi,

Dus:

Als ik deze regels:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class CEngine
{
   public $oMySQL, oBlaats;

   function
__construct
   {
       $this->oMySQL = new CMySQL($this);
       $this->oBlaat = new CBlaat($this);
   }
}

?>


toepas (met de juiste namen) dan zou het moeten lukken?

Is dat dan in mijn geval:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
class CEngine
{
   public $db;

   function
__construct
   {
       $this->db = new Database($this);
   }
}

?>
 
Frank -

Frank -

06/03/2007 23:16:00
Quote Anchor link
Offtopic: Wanneer je PHP 5 gebruikt, kijk dan ook eens naar PDO als database class. Dat is in PHP 5 ingebakken, dat is een stuk handiger dan het wiel opnieuw uitvinden.

Succes!
 
Koko

koko

06/03/2007 23:19:00
Quote Anchor link
Hoi,

Dank je, maar dit zal voor een andere keer zijn... of als ik tijd over heb. Maar eens ik wat verder werk aan het eindwerk (nadat de punten zijn gegeven), bekijk ik het eens ;-)

Kan je me toevallig een idee geven of mijn code van net boven jouw post klopt?
 
Martijn B

Martijn B

07/03/2007 08:30:00
Quote Anchor link
@koko:

Het idee is eigelijk dat in de Engine klasse alles staat wat iedere classe nodig heeft. Iedere klasse beschikt dus over letterlijk dezelfde engine(ofwel gereedschapkist). Als je alleen je database klasse als centrale klasse wilt zien dan zou ik van de engine je database klasse maken. Maar ik denk dat je wel meer dingen hebt die je per klasse wilt gebruiken.

Je code zou moeten werken als je PHP5 hebt.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.