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

Статус
В этой теме нельзя размещать новые ответы.

unsiker

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

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

вроде как тут можно use писать
 
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);
 
Хорошо, а если $data у меня не масив а объект класа.
тоесть
PHP:
$config = array(); 
$lang   = array(); 
$data   = new DataClass;

Можно ли в someClass использовать $data в привычном виде?
тоесть как $data->function();
а не $this->data->function();
 
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" );
        }
    }
}
 
Miraage
Я так понимаю:
PHP:
public function __call( $func, $args )
Это перегрузка вызова, но у меня стоит PHP 5.2.4 и без этой функции можно написать: $data->function(); Является ли public function __call обязательной?
Да и еще что означает значек амперсанд (&) в __construct( &$config, &$lang, &$data )? Это указатели?
 
__call появилась в 5 версии пхп. перехватывет обращение к несуществующем методу.

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

Вообще с передачей параметров по ссылке есть нюантсы вот например

так что тут надо быть внимательным....
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху