ФорумПрограммированиеPHP для идиотов → что за нах?

что за нах?

  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 8 февраля 2009 г. 13:10

    функция __autoload (точнее своя заданная через spl_autoload_register) ищет какойто левый класс (при том 2 раза по всем директориям), который я негде не указывал - e2_865. так как ф-ция выполняет поиск по кучам каталогов, то код тормозится на 0.001 секунду. что за нах?????????
    вот класс коре
    
    class Core
    {
        private static $_instance = null;
        private $_loaded = array();
        private $_tools = array();
        private $_configs = null;
        
    	public static function __instance($configs = null)
    	{
            if (self::$_instance == null)
                self::$_instance = new self();
            $core = self::$_instance;
            if ($core->_configs == null)
                $core->_configs = $configs;
            return self::$_instance;
    	}
        
        public static function load($file, $dir = '')
        {
            $core = self::__instance();
    		$config = $core->_configs['core'];
            $config['_main'] = $core->_configs['_main'];
            if (!isset($core->_loaded[$file]))
            {
                if (isset($dir) && is_readable($dir . $file . '.php'))
                {
                    include_once $dir . $file . '.php';
                    $this->_loaded[$file] = $dir . $file . '.php';
                }
                else if (is_array($config['dirs']))
                {
                    foreach ($config['dirs'] as $dir)
                    {
                        echo $dir . $file . '.php<br>';
                        if (is_readable($dir . $file . '.php'))
                        {
                            include_once $dir . $file . '.php';
                            $core->_loaded[$file] = $dir . $file . '.php';
                            break;
                        }
                    }
                }
            }
            else
                include_once $core->_loaded[$file];
        }
        
        public function set($key, $value, $instance = '__instance')
        {
            if (!isset($this->_tools[$key]))
                $this->_tools[$key] = array($value, $instance);
        }
        
        public function get($key, $args = null)
        {
            if (isset($this->_tools[$key]))
            {
                $class = $this->_tools[$key][0];
                $instance = $this->_tools[$key][1];
                $obj = $this->_factory($key, $class, $args, $instance);
                $obj->__core = self::__instance();
                return $obj;
            }
        }
        
        protected function _factory($key, $class, $args, $instance)
        {
            if (is_object($class))
                return $class;
                
            if (!class_exists($class))
                $this->load($class);
            if (class_exists($class))
            {
                if (isset($this->_configs[$key]) &#38;&#38; is_callable(array($class, '__configure')))
                    call_user_func(array($class, '__configure'), $this->_configs[$key]);
                if (is_callable(array($class, $instance)))
                    return call_user_func_array(array($class, $instance), $args);
                else if ($args == null)
                    return new $class();
                else
                {
                    $reflection = new ReflectionClass($class);
                    return $reflection->newInstanceArgs($args);
                }
            }
        }
    }
    


    если я уберу эти строчки из метода _factory то все ок:
    
    if (is_callable(array($class, $instance)))
    return call_user_func_array(array($class, $instance), $args);
    


    PS аутолоадер это Core::load
    http://77.39.20.54/
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 8 февраля 2009 г. 15:06, спустя 1 час 55 минут 49 секунд

    А $instance разве имя метода?
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 8 февраля 2009 г. 15:13, спустя 6 минут 26 секунд

    $instance - это переменная, в которой имя метода. если этого метода нет, то условие не выполняется…..
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 9 февраля 2009 г. 2:41, спустя 11 часов 28 минут 31 секунду

     
               if (isset($this->_configs[$key]) && is_callable(array($class, '__configure')))
                   call_user_func(array($class, '__configure'), $this->_configs[$key]);
               if (is_callable(array($class, $instance)))
                   return call_user_func_array(array($class, $instance), $args);
               else if ($args == null)
                   return new $class();
               else
               {
                   $reflection = new ReflectionClass($class);
                   return $reflection->newInstanceArgs($args);
               }  

    else if точно с пробелом нужно?
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 9 февраля 2009 г. 2:49, спустя 8 минут 17 секунд

    походу js при сабмите формы отправки сообщения меняет амперсанд  на &#38;

Пожалуйста, авторизуйтесь, чтобы написать комментарий!