Файл: onlinepoisk.wm-scripts.ru/vendor/AR/lib/Reflections.php
Строк: 76
<?php
/**
 * @package ActiveRecord
 */
namespace ActiveRecord;
use ReflectionClass;
/**
 * Simple class that caches reflections of classes.
 *
 * @package ActiveRecord
 */
class Reflections extends Singleton
{
    /**
     * Current reflections.
     *
     * @var array
     */
    private $reflections = array();
    /**
     * Instantiates a new ReflectionClass for the given class.
     *
     * @param string $class Name of a class
     * @return Reflections $this so you can chain calls like Reflections::instance()->add('class')->get()
     */
    public function add($class=null)
    {
        $class = $this->get_class($class);
        if (!isset($this->reflections[$class]))
            $this->reflections[$class] = new ReflectionClass($class);
            
        return $this;
    }
    /**
     * Destroys the cached ReflectionClass.
     *
     * Put this here mainly for testing purposes.
     * 
     * @param string $class Name of a class.
     * @return void
     */
    public function destroy($class)
    {
        if (isset($this->reflections[$class]))
            $this->reflections[$class] = null;
    }
    
    /**
     * Get a cached ReflectionClass.
     *
     * @param string $class Optional name of a class
     * @return mixed null or a ReflectionClass instance
     * @throws ActiveRecordException if class was not found
     */
    public function get($class=null)
    {
        $class = $this->get_class($class);
        if (isset($this->reflections[$class]))
            return $this->reflections[$class];
        throw new ActiveRecordException("Class not found: $class");
    }
    /**
     * Retrieve a class name to be reflected.
     *
     * @param mixed $mixed An object or name of a class
     * @return string
     */
    private function get_class($mixed=null)
    {
        if (is_object($mixed))
            return get_class($mixed);
        if (!is_null($mixed))
            return $mixed;
        return $this->get_called_class();
    }
}
?>