Mailinglisten-Archive |
Hi, man kann ja Methoden aus Klassen indirekt aufrufen. Allerdings habe ich noch keine Möglichkeit gesehen, dass man eine Klasse indirekt erzeugen kann. Daher helfe ich mir zur Zeit mit eval() über die runden, was ja aber recht lahm ist. Habe ich was übersehen? Hintergrund: Ein System besteht aus Modulen. Welche Module vorhanden sind, ist nicht bekannt. Dennoch sollen sie instanziert werden: class _module { function _module($name) { $this->_name = $name; } // more interface } class foo extends _module { function foo() { $this->_module('foo'); } } class modules { function modules() { $this->_registerAll(); } function _isChild($class, $suggested_parent = 'tisModule') { $parent = get_parent_class($class); if (empty($parent)) return false; if (strcasecmp($parent, $suggested_parent) == 0) return true; return $this->_isChild($parent, $suggested_parent); } // function _registerAll() // // Register all user classes // // input none // returns number of classes registered // function _registerAll() { // Init something // $this->_objs = array(); // Get list of classes // $classes = get_declared_classes(); // Check on parent if it is a TIS module // $found = 0; foreach ($classes as $class) { if (!$this->_isChild($class, 'tisModule')) continue; // Increment counter // ++$found; // Parent is tisModule, so we need to make a instance. // eval() is slow but there is no other solution right // now. // $eval = '$this->_objs[] =& new '.$class.'();'; eval($eval); } // Finished // return $found; } } -- Hinrich Donner
php::bar PHP Wiki - Listenarchive