[PHP] Variabele class laden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gertjuhh
  • Registratie: April 2004
  • Laatst online: 26-04 09:14
Ik wil een nieuwe instance aanmaken van een variabele class.
Nu kan dit heel makkelijk in php met de volgende code
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Foo {
    public function __construct() {
        // do iets
    }
}

class Bar {
    public function __construct($a, $b) {
        // do iets
    }
}

$sClass = 'Foo';
$oFoo = new $sClass();


Dit gaat goed voor Foo, maar Bar heeft parameters nodig.

Ik weet op voorhand niet om welke class het gaat of hoeveel parameters er mee gegeven gaan worden, dit moet in theorie een oneindig aantal kunnen zijn.

Nu kan ik dit op 2 manieren doen:
- Foo en Bar __construct's 1 parameter geven, dan een array meegeven met hierin alle parameters
- eval() gebruiken om de class te laden

Optie 1 is nog aanvaardbaar, maar ook niet de beste als je het mij vraagt.
Optie 2 is uit den boze voor redenen die een ieder hier wel bekend zullen zijn.

Heeft er iemand een beter oplossing voor die ik over het hoofd zie??

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
gertjuhh schreef op maandag 01 december 2008 @ 21:58:
Heeft er iemand een beter oplossing voor die ik over het hoofd zie??
Googelen geeft dit. Maar ik vraag me wel af waar je mee bezig bent als je variabele classes aan het instantieren bent in PHP. Serialisatie opnieuw aan het uitvinden? :)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 14:12

Kettrick

Rantmeister!

pedorus schreef op maandag 01 december 2008 @ 22:06:
[...]

Googelen geeft dit. Maar ik vraag me wel af waar je mee bezig bent als je variabele classes aan het instantieren bent in PHP. Serialisatie opnieuw aan het uitvinden? :)
Dit kan een prima oplossing zijn voor bijvoorbeeld een MVC, waar je je controller a.d.h.v. een get variabele aanmaakt, en zo zijn er vast nog 100 gevallen te bedenken :).

Ik zou echter wel de conventie aanhouden om altijd constructors zonder parameters te gebruiken, anders wordt het wel wat lastig te onderhouden :X

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-09 23:58

TeeDee

CQB 241

RoeLz schreef op maandag 01 december 2008 @ 22:11:
[...]
Ik zou echter wel de conventie aanhouden om altijd constructors zonder parameters te gebruiken, anders wordt het wel wat lastig te onderhouden :X
Is er serieus een conventie om parameterloze constructors te hebben? Is dit in PHP zo of ook in C#?
storeman schreef op maandag 01 december 2008 @ 22:29:
Ik neem aan dat Roelz het heeft over deze specifieke situatie. Ik mag niet hopen dat dit een of andere andere conventie is, dan zou ik daar graag eea over lezen.
Daarom ;)

[ Voor 28% gewijzigd door TeeDee op 01-12-2008 22:31 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 12:59
Ik neem aan dat Roelz het heeft over deze specifieke situatie. Ik mag niet hopen dat dit een of andere andere conventie is, dan zou ik daar graag eea over lezen.

"Chaos kan niet uit de hand lopen"


Acties:
  • 0 Henk 'm!

  • gertjuhh
  • Registratie: April 2004
  • Laatst online: 26-04 09:14
pedorus schreef op maandag 01 december 2008 @ 22:06:
[...]

Googelen geeft dit. Maar ik vraag me wel af waar je mee bezig bent als je variabele classes aan het instantieren bent in PHP. Serialisatie opnieuw aan het uitvinden? :)
Ik had uiteraard al op google gezocht, maar zonder resultaat.
Bedankt voor de links, ik ga ze eens bestuderen.

Acties:
  • 0 Henk 'm!

Verwijderd

Begin eens met het vertellen wat je aan het maken bent en waarvoor je dit nodig hebt. Dikke kans dat je op het verkeerde spoor zit als je hulp nodig hebt.

Acties:
  • 0 Henk 'm!

  • Thomasje
  • Registratie: Augustus 2002
  • Laatst online: 29-05-2024

Thomasje

Semacode

Aangezien je geen standaard aanroep gebruikt van de contructor zou ik een functie maken die een variable set.

PHP:
1
2
3
4
$sClass = 'Bar';
$oBar = new $sClass(); 

$oBar->setParameters($a, $b);

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Met de Reflection API is het mogelijk om een nieuwe instantie van een class aan te maken met een variabel aantal argumenten via de ReflectionClass klasse (en dan nog specifiek de newInstanceArgs methode).

Maar ik denk dat je beter over het design van je klassen na moet denken zoals Cheatah al aangeeft. Het is beter om uit te gaan van een bepaalde interface / abstracte klasse voor het instantiëren van een variabele klasse. Op die manier weet je zeker welke methodes er geïmplementeerd zijn.

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 15:31

orf

Zomaar een hint waar je mogelijk iets aan hebt:

call_user_func(array(className'', 'method'), 'arg1', 'arg2');
call_user_func_array();

php.net
Pagina: 1