Здравствуйте, есть ли способ обращаться к различным классам с помощью одного класса. Например как в фремворке YII Yii :: app()->nameclass->method
PHP: <?php /** * */ class Test { public function print_($line) { print $line; } } $obj = new Test(); $vars = get_defined_vars(); //Список определенных переменных class App { function __get($name) //Переопределяем метод для получения членов класса которых нету { global $vars; if (array_key_exists($name, $vars)) { //Ищем в локальных относительно файла return $vars[$name]; } elseif (array_key_exists($name, $GLOBALS)) { //Ищем в глобальных return $GLOBALS[$name]; } } } $a = new App(); $a->obj->print_("Call obj"); ?>
Спасибо, но немного не то, есть классы которые вызваны include И к ним необходимо получать доступ CF :: app()->class->method
Я думаю узнать все имена классов которые вызваны и уже в __get проверять его на существование и вызывать
PHP: include_once SYS . 'confast_router.php'; include_once SYS . 'confast_errors.php'; include_once SYS . 'confast_registry.php'; include_once SYS . 'confast_view.php'; include_once SYS . 'confast_request.php'; include_once SYS . 'confast_message.php'; include_once SYS . 'confast_static.php'; class MyClass { function action_index() { // Обращение к классам выше CF :: app()->router->controller; CF :: app()->errors->get_error_codes(); CF :: app()->view->get_name_view(); // И т.д } }
Из Yii PHP: public static function autoload($className) { // use include so that the error PHP file may appear if(isset(self::$classMap[$className])) include(self::$classMap[$className]); elseif(isset(self::$_coreClasses[$className])) include(YII_PATH.self::$_coreClasses[$className]); else { // include class file relying on include_path if(strpos($className,'\\')===false) // class without namespace { if(self::$enableIncludePath===false) { foreach(self::$_includePaths as $path) { $classFile=$path.DIRECTORY_SEPARATOR.$className.'.php'; if(is_file($classFile)) { include($classFile); if(YII_DEBUG && basename(realpath($classFile))!==$className.'.php') throw new CException(Yii::t('yii','Class name "{class}" does not match class file "{file}".', array( '{class}'=>$className, '{file}'=>$classFile, ))); break; } } } else include($className.'.php'); } else // class name with namespace in PHP 5.3 { $namespace=str_replace('\\','.',ltrim($className,'\\')); if(($path=self::getPathOfAlias($namespace))!==false) include($path.'.php'); else return false; } return class_exists($className,false) || interface_exists($className,false); } return true; }
Так это загрузчик классов, посмотрел в Yii функция app() возвращает метод return self::$_app; значит классы и методы присваиваются $_app методу, только еще не нашел в каком месте