инициализация класа

Тема в разделе "PHP Pro", создана пользователем unsiker, 24 июн 2011.

Статус темы:
Закрыта.
  1. unsiker

    unsiker

    Регистр.:
    6 июн 2008
    Сообщения:
    465
    Симпатии:
    172
    У меня есть 3 масива $config, $lang, $data. Нужно написать калас, который будет работать с этими данными. Подскажите как инициализировать клас в PHP Что бы ему были доступны вышеуказаные масивы?
    Вариант global просьба не предлагать.
     
  2. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    php 5.3
    PHP:
    $config = array();
    $lang   = array();
    $data   = array();

    class 
    someClass
    {
        static public function & 
    getConfig() use ($config)
        {
            return 
    $config;
        }
    }

    вроде как тут можно use писать
     
  3. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    PHP:
    $config = array(); 
    $lang   = array(); 
    $data   = array(); 

    class 
    someClass {
        public function 
    someClass(&$config, &$lang, &$data) { 
            
    $this->config = &$config;
            
    $this->lang   = &$lang;
            
    $this->data   = &$data;
        }
    }
    $obj = new someClass($config$lang$data);
     
    unsiker нравится это.
  4. unsiker

    unsiker

    Регистр.:
    6 июн 2008
    Сообщения:
    465
    Симпатии:
    172
    Хорошо, а если $data у меня не масив а объект класа.
    тоесть
    PHP:
    $config = array(); 
    $lang   = array(); 
    $data   = new DataClass;  
    Можно ли в someClass использовать $data в привычном виде?
    тоесть как $data->function();
    а не $this->data->function();
     
  5. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    PHP:
    $config = array();
    $lang = array();
    $data = new DataClass;
    class 
    someClass
    {
        public function 
    __construct( &$config, &$lang, &$data )
        {
            
    $this->config $config;
            
    $this->lang $lang;
            
    $this->data $data;
        }
        public function 
    __call$func$args )
        {
            if ( 
    method_exists$this->data$func ) )
            {
                return 
    call_user_func_array( array( $this->data$func ), $args );
            }
            else
            {
                die( 
    "Method ${func} not found" );
            }
        }
    }
     
    unsiker нравится это.
  6. unsiker

    unsiker

    Регистр.:
    6 июн 2008
    Сообщения:
    465
    Симпатии:
    172
    Miraage
    Я так понимаю:
    PHP:
    public function __call$func$args 
    Это перегрузка вызова, но у меня стоит PHP 5.2.4 и без этой функции можно написать: $data->function(); Является ли public function __call обязательной?
    Да и еще что означает значек амперсанд (&) в __construct( &$config, &$lang, &$data )? Это указатели?
     
  7. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    __call появилась в 5 версии пхп. перехватывет обращение к несуществующем методу.

    амперсанд - ссылка. если ты изменишь внтури класса значение $this->config, то и глобальная переменная $config изменится тоже
     
  8. PHPCod3r

    PHPCod3r

    Регистр.:
    7 июн 2010
    Сообщения:
    261
    Симпатии:
    25
    Вообще с передачей параметров по ссылке есть нюантсы вот например

    Перейти по ссылке

    так что тут надо быть внимательным....
     
Статус темы:
Закрыта.