PHP назначает $ this другого класса - PullRequest
2 голосов
/ 07 июня 2011

Мне было интересно, можно ли назначить другой объект для $ 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.
    }
}

my_module:

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

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

Как мне это сделать?

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

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

Ответы [ 2 ]

5 голосов
/ 07 июня 2011

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

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

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

}
1 голос
/ 07 июня 2011

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

Вы должны перефразировать ваш вопрос в нечто более похожее на это:

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

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

...