Versio

scoop tussen classes

Overzicht Reageren

Marc Cools

Marc Cools

13/03/2009 12:55:00
Quote Anchor link
Hi,

Ik heb ongeveer deze code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$appl
= new Application();
//in Application::__construct() :
$this->config = new Configuration();
$this->uri = new Uriparser();
// nu wil ik het volgende ongeveer doen:
$this->uri->rewrite($this->config->get_rewriterules());
?>

Is dit mogelijk op een manier dat ik niet de < $this->config->get_rewriterules() > moet meegeven als parameter maar rechtstreeks vanuit < $this->uri->rewrite() > toegang heb tot de rewriterules?
Global gebruiken lijkt mij niet zo handig. Stel dat iemand niet $appl maar $cron gebruikt.

Deze code bestaat niet maar leek mij handig:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$appl
= new Application();
// enz; en dan in $this->uri->rewrite() :
$this->rewriterules = $this->caller->config->get_rewriterules();
?>

Let op het woord 'caller' dat zou moeten aangeven dat we een niveau naar omhoog dienen te gaan. Vergelijkbaar met folders waar we met './..' de bovenliggende map nemen.

Thanks
Marc
Gewijzigd op 01/01/1970 01:00:00 door Marc Cools
 
PHP hulp

PHP hulp

25/05/2012 15:15:27
Gesponsorde koppelingen:
 
Yoram

Yoram

13/03/2009 12:57:00
Quote Anchor link
Misschien weet het niet zeker dat $this-> moet $appl-> zijn omdat je daar boven een nieuwe class begint..

Je gebruikt dit toch buiten je class $appl ?? of zie / denk ik dat verkeert
Gewijzigd op 01/01/1970 01:00:00 door Yoram
 
Marc Cools

Marc Cools

13/03/2009 13:03:00
Quote Anchor link
Die $this is in de constructor van de class Application. Dus verwijzend naar interne variabelen.
Buiten de class, in een instance gemaakt met new ken ik het object toe aan $appl.
Gewijzigd op 01/01/1970 01:00:00 door Marc Cools
 
Yoram

Yoram

13/03/2009 13:03:00
Quote Anchor link
Sorry! had het helemaal verkeert begrepen!
 
Marc Cools

Marc Cools

13/03/2009 13:04:00
Quote Anchor link
Geen probleem.
 
Yoram

Yoram

13/03/2009 14:03:00
Quote Anchor link
Jaah dat zei ik in feite :P Maar staat die bij jou wel goed dan ? want jij begint hem toch buiten je class??
 
Jelmer rrrr

Jelmer rrrr

13/03/2009 14:10:00
Quote Anchor link
Marc Cools schreef op 13.03.2009 12:55:
Is dit mogelijk op een manier dat ik niet de < $this->config->get_rewriterules() > moet meegeven als parameter maar rechtstreeks vanuit < $this->uri->rewrite() > toegang heb tot de rewriterules?


Nee, dat is niet zomaar mogelijk. Je UriParser is niet bekend met de scope waarin hij zich bevindt.

Maar op zich is dat toch ook niet zo erg? Wat is je bezwaar tegen de manier die je zelf al aandraagt, om de rules handmatig mee te geven? Het voordeel hiervan is dat je je UriParser veel breder kan gebruiken, omdat hij niet direct afhankelijk is van je Application class.

Andere mogelijkheid is om bij het instantiƫren van je UriParser de instantie van Application mee te geven via de constructor. Dan heb je binnen UriParser altijd toegang tot $appl, maar dan maak je hem ook afhankelijk van deze opbouw. En je moet in Application de properties die UriParser wil gebruiken public maken.
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
<?php

class UriParser {
    protected $_delegate;
    
    public function __construct(Application $delegate)
    {

        $this->_delegate = $delegate;
    }

    
    public function rewrite()
    {

        $this->_delegate->config->get_rewriterules();
    }
}

?>
 
Marc Cools

Marc Cools

13/03/2009 15:22:00
Quote Anchor link
Door handmatig door te geven kan de class onafhankelijk gebruikt worden.
Anderzijds is het mijn eigen(zinnig) framework dat ik wil schrijven waarbij al die dingen aan elkaar vast hangen. Ik gebruik immers altijd de UriParser bij elke webapplicatie.

Moet ik nog eens goed over nadenken.

Bedankt voor jouw oplossing.
 



Overzicht Reageren