ООП обращение ко всем классом с помощью одного статистического

Discussion in 'PHP' started by Orelx, 28 Jul 2013.

  1. Orelx

    Orelx New Member

    Joined:
    14 Aug 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте, есть ли способ обращаться к различным классам с помощью одного класса. Например как в фремворке YII
    Yii :: app()->nameclass->method
     
  2. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    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");
    ?>
     
  3. Orelx

    Orelx New Member

    Joined:
    14 Aug 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Спасибо, но немного не то, есть классы которые вызваны include
    И к ним необходимо получать доступ
    CF :: app()->class->method
     
  4. Orelx

    Orelx New Member

    Joined:
    14 Aug 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Я думаю узнать все имена классов которые вызваны и уже в __get проверять его на существование и вызывать
     
  5. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    Что?
     
  6. Orelx

    Orelx New Member

    Joined:
    14 Aug 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    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();
               
    // И т.д
         
    }
    }
     
  7. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    Из 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;
        }
     
  8. Orelx

    Orelx New Member

    Joined:
    14 Aug 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Так это загрузчик классов, посмотрел в Yii функция app() возвращает метод return self::$_app; значит классы и методы присваиваются $_app методу, только еще не нашел в каком месте