Ik heb een methode 'load' in de class 'Library' die een object kan openen uit de library en terugstuurt:
<?php
$db = $library->load('database');
?>Dat doet ie (erg versimpeld, zonder controle, enz) als volgt:
<?php
class Library {
public function load ($name) {
include_once($name.'.php');
$object = new $name();
return $object;
}
}
?>Alleen nu wil ik een object aanmaken waarvan de constructor parameters moet krijgen. Dus zo:
<?php
// object opvragen
$db = $library->load('database', array('localhost', 'mydatabase'));
// De load()-functie in de Library-class
public function load($name, $params = array()) {
include_once($name.'.php');
// Wat moet er hier komen??
// Zoiets werkt niet:
$object = new call_user_func_array($name, $params);
// En zoiets ook niet:
$object = call_user_func_array('new '.$name, $params);
// Dit werkt wel, maar dan kan je maar één argument doorgeven (een array dus)
$object = new $name($params);
return $object;
}
?>Moet ik dan echt de constructors herschrijven zodat ze de argumenten als een array kunnen ontvangen?
Een andere oplossing is om zoiets te doen:
<?php
$code = '$object = new $name(' . implode(', ', $params) . ');';
eval ($code);
?>alleen is dit denk ik niet de ideale oplossing. Het lijkt mij iig erg omslachtig. Weet iemand hier een oplossing voor??
Alvast bedankt!
Daan
Edit:
Ik zie dat ik hem per ongeluk heb aangemaakt bij 'design'. Dat moet natuurlijk 'OOP' zijn..
Mod edit:
Verplaatst...