obj mee geven aan include file
Hoe zat het ook al weer met het door geven van objecten aan includes?
Stel ik heb:
index.php
include: router.php
> hier maak ik een object aan genaamd $page
In mijn router initialiseer ik het object, en binnen het object (dus $page) wordt gekeken of er een bijpassende view pagina hoort. Als die aanwezig is, wordt deze binnen het object ge-include. Hoe kan ik nu de parameters oftewel het object $page mee geven aan diezelfde ge-include file?
include.php
index.php
Dat is niet wat ik zoek. Ik denk dat je het helemaal verkeerd hebt begrepen. Wat ik zoek is een methode om een object (instanceof class) mee te kunnen geven als obj in een include bestand.
Wellicht iemand anders een idee?
Meegeven als parameter.
2e optie is om dat object global te maken, maar dat is vies.
Ja ik weet dat global maken vies is, maar ik wil dus binnen de clas diezelfde instantie meegeven aan een include file. Andersom werkt het wel gewoon, zoals je zelf al aangaf, maar nu moet het dus om gekeerd. Kun je dus bij een include een extra parameter mee geven zoals het object?
Code (php)
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
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
<?php
class JeMoeder
{
private static $instance;
private $_sIets;
/**
* @return JeMoeder
*/
public static function getInstance()
{
if (self::$instance === null)
{
self::$instance = new self;
}
return self::$instance;
}
public function setIets($sIets)
{
$this->_sIets = $sIets;
}
public function getIets()
{
return $this->_sIets;
}
}
?>
class JeMoeder
{
private static $instance;
private $_sIets;
/**
* @return JeMoeder
*/
public static function getInstance()
{
if (self::$instance === null)
{
self::$instance = new self;
}
return self::$instance;
}
public function setIets($sIets)
{
$this->_sIets = $sIets;
}
public function getIets()
{
return $this->_sIets;
}
}
?>
Dan kan je binnen je class instance van JeMoeder op vragen bijv zo
Code (php)
Mocht niet lukken laat weten
http://php.net/manual/en/language.references.php
Wat je dan moet doen, is in het te includen bestand een instance van dat object opvragen, maar by reference, waardoor je het huidige bestand meekrijgt, en alle aanpassingen actief blijven op het origineel. Hetzelfde effect heb je met static (bah) en met singleton (minder, maar toch bah).
Niet luisteren naar Daan, hij weet niet waar hij het over hebt. Wat jij wilt doen is een object by reference meegeven, waardoor alle veranderingen actief blijven in het origineel. Neem hier eens een kijkje: Wat je dan moet doen, is in het te includen bestand een instance van dat object opvragen, maar by reference, waardoor je het huidige bestand meekrijgt, en alle aanpassingen actief blijven op het origineel. Hetzelfde effect heb je met static (bah) en met singleton (minder, maar toch bah).
mocht je geen singleton willen kan je ze evt in de constructor meegeven, zou ik persoonlijk niet doen. Kan evt method maken in de class die instances kan zetten en bewaren.
Gewijzigd op 08/08/2010 02:55:38 door Daan l
De scope van het object is namelijk belangrijk in dit geval.
Ik creer een object en wil dit mee geven in een include bestand binnen het object. Normaal zou het moeten werken omdat alle objecten binnen de scope vanaf de root gaan. Maar het probleem is dus dat het object binnen een ander bestand aangemaakt worden, wat dus betekent dat de scope verandert.
Maar goed, ik heb het inmiddels opgelost door alles drastisch te veranderen. Ik zag mezelf nog kloten met hetzelfde probleem, waardoor ik het wat meer mvc aangepakt heb.
In plaats van het includen van die bestanden heb ik er maar een class van gemaakt die de huidige $page extend, niet netjes, dat geef ik toe, maar het "doel" heiligt de middelen voor deze keer...
In ieder geval bedankt voor de feedback en hulp, ik ben er uit en hopelijk bots ik niet nog een keer tegen zo`n probleem aan.
ps. Ja door er een class van te maken en extenden pakt hij de params wel van $page, vond ik zelf ook wel raar en heb dus maar alle content laten genereren in een $var..
@Daan: Ik heb nooit gezegd dat jou methode niet werkt, ik heb gezegd dat jou methode omslachtig, en vies is. Referentie bestaat niet voor niets. Gebruik het dan ook. :)