ФорумПрограммирование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;

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