obj mee geven aan include file

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pieter Jansen

Pieter Jansen

07/08/2010 17:37:32
Quote Anchor link
Beste leden,

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

PHP hulp

19/04/2024 12:33:47
 
Niek s

niek s

07/08/2010 18:40:08
Quote Anchor link
Automatisch.

include.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$test
= "BIER";
?>


index.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
include 'include.php';

echo $test; // output: BIER
?>
 
Pieter Jansen

Pieter Jansen

07/08/2010 19:42:20
Quote Anchor link
Beste Niek,

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?
 
Niek s

niek s

07/08/2010 19:59:56
Quote Anchor link
ach, binnen in die class dus.

Meegeven als parameter.
2e optie is om dat object global te maken, maar dat is vies.
 
Pieter Jansen

Pieter Jansen

07/08/2010 20:03:50
Quote Anchor link
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?
 
Daan l

Daan l

08/08/2010 00:42:32
Quote Anchor link
Je kan beter een singleton maken van je object zodat je deze kan opvragen

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
<?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;
    }
}

?>


Dan kan je binnen je class instance van JeMoeder op vragen bijv zo

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
<?php
$oJeMoeder
= JeMoeder::getInstance();

$oJeMoeder->setIets('testing');


include ('eenfile.php');

// IN DE FILE

class eenFile
{
    public function getDoeIets()
    {

        return JeMoeder::getInstance()
                ->
getIets();
    }
}


$oNew = new eenFile();
echo $oNew->getDoeIets();

?>


Mocht niet lukken laat weten
 
Wesley Overdijk

wesley Overdijk

08/08/2010 00:49:23
Quote Anchor link
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: 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).
 
Daan l

Daan l

08/08/2010 02:54:42
Quote Anchor link
Wesley jij snapt het niet, als je een object mee geeft zonder reference en later buiten de class gebruikt is hij gewoon geupdated. Dus volgens mij weet je niet echt waar je het over hebt.

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
 
Pieter Jansen

Pieter Jansen

08/08/2010 03:20:31
Quote Anchor link
Bedankt voor de info, maar het idee achter Singleton is ook niet echt wat ik zoek. Wesley zit er een stuk dichterbij met references. Iets wat me niet onbekend in de oren klinkt, maar het is hier zeg maar een mogelijkheid van refereren buiten de normale scope.

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..
 
Wesley Overdijk

wesley Overdijk

08/08/2010 12:40:16
Quote Anchor link
@Merijn: Ach ja, als het werkt voor je dat werkt het voor je :) Kijk ook eens naar de autoloader trouwens. Als je een autoloader icm een Registry gebruikt heb je vrij veel speling, en geen includes meer.

@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. :)
 



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.