phpbar.de logo

Mailinglisten-Archive

[php] Unbekannte Klasse

[php] Unbekannte Klasse

Hinrich Donner php_(at)_phpcenter.de
Mon, 14 Oct 2002 15:06:43 +0200


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