классы php - как можно было бы загружать объект «модуль» в существующий объект только тогда, когда это необходимо? - PullRequest
1 голос
/ 16 июля 2011

Хорошо, поэтому у меня есть следующая настройка кода, которая, кажется, работает нормально:

пользовательский обработчик "module":

class user_handler
{
    private $dbo;

    public function __construct($dbo)
    {
        $this->dbo = $dbo;
    }

    public function user_table_method()
    {
        $this->dbo->generic_db_method();
    }
}

класс соединения:

class connection
{
    private $dbc;

    public $user;

    public function __construct()
    {
        $this->dbc = 'connection';
        $this->user = new user_handler($this);
    }

    public function generic_db_method()
    {
        echo '<p>doing stuff with ' . $this->dbc . '</p>';
    }
}

Тогда я могу получить доступ к методам пользовательских обработчиков, например:

$dbc = new connection();
$dbc->user->user_table_method();

Мой вопрос такой:

Было бы возможно с помощью метода в классе connectionсоздать _user объект только тогда, когда он необходим?

Я думаю о методе, который будет использоваться следующим образом:

$dbc->add_handle('user', 'user_handler');

, который создаст новое открытое свойствоВызывается user с нуля и устанавливается как новый user_handler объект:

// in more detail
public function add_handle($name, $module)
{
    if(!isset($this->/*somehow use $name*/))
    {
        $this->/*somehow use $name*/ = new /*somehow use $module*/();
    }
}

.. поэтому новый способ его установки будет выглядеть так:

$dbc = new connection();
$dbc->add_handle('user', 'user_handler');
$dbc->user->user_table_method();

Спасибозаблаговременно!(смотря на php 5.2 и выше)

1 Ответ

1 голос
/ 16 июля 2011
public function add_handle($name, $module)
{
    if(!isset($this->$name))
    {
        $this->$name = new $module();
    }
}

Тогда вы бы просто сделали то, что думали:

$dbc = new connection();
$name = 'user';
$module = 'somemodule';
$dbc->add_handle($name, $module);
$dbc->user->user_table_method();

Я также переименовал его из $ _user в $ user, как я уже упоминал в комментарии, поскольку он общедоступен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...