PHP присваивает $this другого класса

Мне было интересно, можно ли назначить другой объект $ this?

В CodeIgniter я вызываю другой контроллер из основного контроллера.

приложение/контроллеры/module.php

Class Module extends CI_Controller {
    public function __construct() {
        parent::__construct();
    }

    public function _remap($class, $args = array()) {
        // doing some checks that is there a valid file, class and method
        // assigning the $method.
        // including MY_Module class. I'am extending every module from this class.
        // then:
        $EG = new $class();
        call_user_func_array(array(&$EG, $method), array_slice($this->uri->rsegments, 3));
    }
}

В вызываемом классе:

Class Users extends MY_Module
{
    public function __construct() {
        parent::__construct();
    }

    public function index() {
        // Want to use this class and method like it is a codeigniter controller.
    }
}

МОЙ_Модуль:

Class My_Module {
    public function __construct() {
        $this =& CI_Controller::get_instance(); // Here is problem.
    }
}

Я хочу использовать объявление экземпляра класса для класса My_Module. Так что он не будет инициализировать одни и те же библиотеки и не будет тратить больше ресурсов.

Как я могу это сделать?

Спасибо за советы.

РЕДАКТИРОВАТЬ: я пытался расширить MY_Module из CI_Controller. Но поскольку он уже создан один раз, это вызывает проблемы.


person Valour    schedule 07.06.2011    source источник
comment
Не знаю, с чего начать, поэтому просто: Никогда больше не думайте о чем-то подобном. ;)   -  person KingCrunch    schedule 07.06.2011
comment
Скажите, пожалуйста, вы не работаете над PHP 4.x... Иначе в $this =& CI_Controller::get_instance(); амперсанд бесполезен, потому что в PHP 5.x все объекты всегда передаются по ссылке (как и должно быть)   -  person mkilmanas    schedule 07.06.2011


Ответы (2)


Вы не можете «внедрить» ссылку на ваш текущий объект $this. И даже если бы это было возможно, я бы настоятельно не советовал.

Просто назначьте ссылку на другую переменную и используйте ее.

public function __construct() {
    $yourSingleton = CI_Controller::get_instance(); 

}
person dynamic    schedule 07.06.2011
comment
но это не позволит мне использовать $this-> подобные операторы. Мне всегда приходится использовать как $this->CI->. и это вызовет проблемы с моими файлами просмотра. - person Valour; 07.06.2011

Это невозможно в PHP (как и должно быть).

Вы должны перефразировать свой вопрос примерно так:

У меня есть два класса, и оба они инициализируют одни и те же библиотеки (таким образом, используя больше ресурсов). Как я могу этого избежать?

[пример здесь]

person Evert    schedule 07.06.2011