Darnit... I forgot I changed the error handler in my own scripts. Use this instead, sorry for posting bad code the first time around:

<?php

/**
* This is a class that can be used to describe classes, objects, methods,
* functions, parameters, properties, and even extensions.
* Example usage:
*
* $desc = new Describe();
* echo '<pre>';
* print_r($desc->describeExtension('standard', true));
*
* or
*
* $desc = new Describe();
* echo '<pre>';
* print_r($desc->describeObject($desc));
*/
class Describe
{
/**
* Wrapper function for private function _describeClass
*
* @param string $class The string name of a class
* @param bool $summary (optional) Print the summary info only. If false,
* then this function prints *everything* it finds.
* @return array with class description or an error
*/
public function describeClass($class, $summary = false)
{
if (class_exists($class)) {
$class = new Reflection_Class($class);
return Describe::_describeClass($class, $summary);
} else {
return "Could not describe class $class";
}
}


/**
* Wrapper function for private function _describeObject
*
* @param object $obj Any object
* @param bool $summary (optional) Print the summary info only. If false,
* then this function prints *everything* it finds.
* @return array with class description or an error
*/
public function describeObject(&$obj, $summary = false)
{
if (is_object($obj)) {
return Describe::_describeObject($obj, $summary);
} else {
return "Could not describe the object";
}
}


/**
* This function returns an array representation of an extension.
*
* @param string $extension Name of a loaded extension
* @param bool $summary (optional) Print the summary info only. If false,
* then this function prints *everything* it finds.
* @return array on success or an error on failure
*/
public function describeExtension($extension = 'standard', $summary = false)
{
if (extension_loaded($extension)) {
return Describe::_describeExtension(new Reflection_Extension($extension), $summary);
} else {
return "Could not describe the extension $extension";
}
}


/**
* Wrapper function for private function _describeFunction
*
* @param string $function Name of a function
* @param bool $summary (optional) Print the summary info only. If false,
* then this function prints *everything* it finds.
* @return array
*/
public function describeFunction($function, $summary = false)
{
if (function_exists($function)) {
return Describe::_describeFunction(new Reflection_Function($function), $summary);
} else {
return "Could not describe the function $function";
}
}


/**
* This function returns an array representation of the class / object.
*
* @param mixed $class_or_obj Either an object or the string name of a class
* @param string $method Name of a method in $class_or_obj
* @param bool $summary (optional) Print the summary info only. If false,
* then this function prints *everything* it finds.
* @return array
*/
public function describeMethod($class_or_obj, $method, $summary = false)
{
if (is_object($class_or_obj)) {
$class = get_class($class_or_obj);
} else {
$class = $class_or_obj;
}


if (class_exists($class) && function_exists($method)) {
return Describe::_describeMethod(new Reflection_Method($classname, $method));
} else {
return "Could not describe method $method";
}
}


    // }}}
    // {{{ _describeObject()

private function _describeObject(&$obj, $summary)
{
$class = new Reflection_Class(get_class($obj));
$desc = array();
if ($summary) {
$desc['name'] = $class->getName();
$desc['extends'] = is_string($ext = var_export($class->getParentClass(), 1)) ? $ext : 'none';
foreach($class->getProperties() as $prop) {
$desc['properties'][$prop->getName()] = Describe::_describeProperty($prop, true, $obj);
}
foreach ($class->getMethods() as $method) {
$desc['methods'][$method->getName()] = Describe::_describeMethod($method, true);
}
} else {
$desc['name'] = $class->getName();
$desc['extends'] = is_string($ext = var_export($class->getParentClass(), 1)) ? $ext : 'none';
$desc['comment'] = $class->getDocComment();
$desc['file'] = $class->getFileName();
$desc['start'] = $class->getStartLine();
$desc['end'] = $class->getEndLine();
$desc['instantiable'] = $class->isInstantiable() ? 'yes' : 'no';
$desc['internal'] = $class->isInternal() ? 'internal' : 'user-defined';
$desc['abstract'] = $class->isAbstract() ? 'abstract' : 'no';
$desc['final'] = $class->isFinal() ? 'final' : 'no';
$desc['interface'] = $class->isInterface() ? 'interface' : 'class';
$desc['implements'] = $class->getInterfaces();
$desc['constants'] = $class->getConstants();
foreach($class->getProperties() as $prop) {
$desc['properties'][$prop->getName()] = Describe::_describeProperty($prop, false, $obj);
}


foreach ($class->getMethods() as $method) {
$desc['methods'][$method->getName()] = Describe::_describeMethod($method, false);
}


            $desc['modifiers'] = $class->getModifiers();
        }

        return $desc;
    }

    // }}}
    // {{{ _describeClass()

private function _describeClass(Reflection_Class &$class, $summary)
{
$desc = array();
if ($summary) {
$desc['name'] = $class->getName();
$desc['extends'] = is_string($ext = var_export($class->getParentClass(), 1)) ? $ext : 'none';
foreach($class->getProperties() as $prop) {
$desc['properties'][$prop->getName()] = Describe::_describeProperty($prop, true);
}
foreach ($class->getMethods() as $method) {
$desc['methods'][$method->getName()] = Describe::_describeMethod($method, true);
}
} else {
$desc['name'] = $class->getName();
$desc['extends'] = is_string($ext = var_export($class->getParentClass(), 1)) ? $ext : 'none';
$desc['comment'] = $class->getDocComment();
$desc['file'] = $class->getFileName();
$desc['start'] = $class->getStartLine();
$desc['end'] = $class->getEndLine();
$desc['instantiable'] = $class->isInstantiable() ? 'yes' : 'no';
$desc['internal'] = $class->isInternal() ? 'internal' : 'user-defined';
$desc['abstract'] = $class->isAbstract() ? 'abstract' : 'no';
$desc['final'] = $class->isFinal() ? 'final' : 'no';
$desc['interface'] = $class->isInterface() ? 'interface' : 'class';
$desc['implements'] = $class->getInterfaces();
$desc['constants'] = $class->getConstants();
foreach($class->getProperties() as $prop) {
$desc['properties'][$prop->getName()] = Describe::_describeProperty($prop, false);
}
foreach ($class->getMethods() as $method) {
$desc['methods'][$method->getName()] = Describe::_describeMethod($method, false);
}


            $desc['modifiers'] = $class->getModifiers();
        }

        return $desc;
    }

    // }}}
    // {{{ _describeMethod()

private function _describeMethod(Reflection_Method &$method, $summary)
{
$desc = array();
if ($summary) {
foreach ($method->getParameters() as $param) {
$desc['parameters'][$param->getName()] = Describe::_describeParameter($param, $summary);
}
} else {
$desc['internal'] = $method->isInternal() ? 'internal' : 'user-defined';
$desc['abstract'] = $method->isAbstract() ? 'abstract' : 'no';
$desc['final'] = $method->isFinal() ? 'final' : 'no';
$desc['public'] = $method->isPublic() ? 'public' : 'no';
$desc['private'] = $method->isPrivate() ? 'private' : 'no';
$desc['protected'] = $method->isProtected() ? 'protected' : 'no';
$desc['static'] = $method->isStatic() ? 'static' : 'no';
$desc['constructor'] = $method->isConstructor() ? 'the constructor' : 'no, a regular method';
$desc['file'] = $name = $method->getFileName();
if ($statics = $method->getStaticVariables()) {
$desc['statics'] = $statics;
}
foreach ($method->getParameters() as $param) {
$desc['parameters'][$param->getName()] = Describe::_describeParameter($param, $summary);
}
$desc['comment'] = $method->getDocComment();
}


        return $desc;
    }

private function _describeParameter(Reflection_Parameter &$param, $summary)
{
$desc = array();
if ($summary) {
$desc['passed'] = $param->isPassedByReference() ? 'by reference' : 'by value';
} else {
$desc['name'] = $param->getName();
$desc['null'] = $param->allowsNull() ? 'allowed' : 'not allowed';
$desc['passed'] = $param->isPassedByReference() ? 'by reference' : 'by value';
$desc['class'] = $param->getClass();
}


        return $desc;
    }

private function _describeProperty(Reflection_Property &$prop, $summary, $obj = null)
{
$desc = array();
if ($summary) {
if (is_object($obj)) {
if ($prop->getDeclaringClass() == get_class($obj)) {
$desc['value'] = $prop->getValue($obj);
}
}
} else {
$desc['name'] = $prop->getName();
$desc['public'] = $prop->isPublic() ? 'public' : 'no';
$desc['private'] = $prop->isPrivate() ? 'private' : 'no';
$desc['protected'] = $prop->isProtected() ? 'protected' : 'no';
$desc['static'] = $prop->isStatic() ? 'static' : 'no';
$desc['default'] = $prop->isDefault() ? 'declared at compile time' : 'created at run-time';
$desc['modifiers'] = $prop->getModifiers();
$desc['class'] = $prop->getDeclaringClass();
$desc['string'] = $prop->toString();
}


        return $desc;
    }

    // }}}
    // {{{ _describeExtension()

    private function _describeExtension(Reflection_Extension &$ext)
    {
        $desc['name'] = $ext->getName();
        $desc['version'] = $ext->getVersion();
        $desc['ini_entries'] = $ext->getINIEntries();
        if ($summary) {
            return $desc;
        }

foreach ($ext->getFunctions() as $function) {
$desc['functions'][$function->getName()] = Describe::_describeFunction($function, true);
}


        $desc['constants'] = $ext->getConstants();
        return $desc;
    }

    // }}}
    // {{{ _describeFunction()

private function _describeFunction(Reflection_Function &$function, $summary)
{
$desc = array();
if ($summary) {
foreach ($function->getParameters() as $param) {
$desc['parameters'][$param->getName()] = Describe::_describeParameter($param, $summary);
}
} else {
$desc['name'] = $function->getName();
$desc['internal'] = $function->isInternal() ? 'internal' : 'user-defined';
$desc['user'] = $function->isUserDefined() ? 'user-defined' : 'internal';
$desc['file'] = $function->getFileName();
$desc['start'] = $function->getStartLine();
$desc['end'] = $function->getEndLine();
/**
if ($statics = $function->getStaticVariables()) {
$desc['statics'] = $statics;
}
*/


foreach ($function->getParameters() as $param) {
$desc['parameters'][$param->getName()] = Describe::_describeParameter($param, $summary);
}
$desc['returns'] = $function->returnsReference() ? 'reference' : 'value';
$desc['comment'] = $function->getDocComment();
}


        return $desc;
    }

}

?>

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Reply via email to