<?php
/**
 *  base include file for SimpleTest
 *  @package    SimpleTest
 *  @subpackage UnitTester
 *  @version    $Id: reflection_php4.php,v 1.4 2010/12/14 17:35:44 moodlerobot Exp $
 */

/**
 *  Version specific reflection API.
 *  @package SimpleTest
 *  @subpackage UnitTester
 *  @ignore duplicate with reflection_php5.php
 */
class SimpleReflection {
    var $_interface;

    /**
     *    Stashes the class/interface.
     *    @param string $interface    Class or interface
     *                                to inspect.
     */
    function SimpleReflection($interface) {
        $this->_interface = $interface;
    }

    /**
     *    Checks that a class has been declared.
     *    @return boolean        True if defined.
     *    @access public
     */
    function classExists() {
        return class_exists($this->_interface);
    }

    /**
     *    Needed to kill the autoload feature in PHP5
     *    for classes created dynamically.
     *    @return boolean        True if defined.
     *    @access public
     */
    function classExistsSansAutoload() {
        return class_exists($this->_interface);
    }

    /**
     *    Checks that a class or interface has been
     *    declared.
     *    @return boolean        True if defined.
     *    @access public
     */
    function classOrInterfaceExists() {
        return class_exists($this->_interface);
    }

    /**
     *    Needed to kill the autoload feature in PHP5
     *    for classes created dynamically.
     *    @return boolean        True if defined.
     *    @access public
     */
    function classOrInterfaceExistsSansAutoload() {
        return class_exists($this->_interface);
    }

    /**
     *    Gets the list of methods on a class or
     *    interface.
     *    @returns array          List of method names.
     *    @access public
     */
    function getMethods() {
        return get_class_methods($this->_interface);
    }

    /**
     *    Gets the list of interfaces from a class. If the
     *    class name is actually an interface then just that
     *    interface is returned.
     *    @returns array          List of interfaces.
     *    @access public
     */
    function getInterfaces() {
        return array();
    }

    /**
     *    Finds the parent class name.
     *    @returns string      Parent class name.
     *    @access public
     */
    function getParent() {
        return strtolower(get_parent_class($this->_interface));
    }

    /**
     *    Determines if the class is abstract, which for PHP 4
     *    will never be the case.
     *    @returns boolean      True if abstract.
     *    @access public
     */
    function isAbstract() {
        return false;
    }

    /**
     *    Determines if the the entity is an interface, which for PHP 4
     *    will never be the case.
     *    @returns boolean      True if interface.
     *    @access public
     */
    function isInterface() {
        return false;
    }
        
    /**
     *    Scans for final methods, but as it's PHP 4 there
     *    aren't any.
     *    @returns boolean   True if the class has a final method.
     *    @access public
     */
    function hasFinal() {
        return false;
    }

    /**
     *    Gets the source code matching the declaration
     *    of a method.
     *    @param string $method       Method name.
     *    @access public
     */
    function getSignature($method) {
        return "function &$method()";
    }
}
?>