|
|
|
| Добрый день. Пишу скрипт, у меня получается такая вещь: имеется класс EngineMYSQL и класс EngineSettings. Для работы класса EngineSetting необходимо что бы он мог обращаться к объекту класса EngineMYSQL. Вопрос заключается в следующем: как лучше организовать данное обращение.
Мой вариант:
class EngineMYSQL { ... }
class EngineSettings {
private $LinkEngineMYSQL;
function __construct( EngineMYSQL &$iObj )
{
$this->LinkEngineMYSQL = &$iObj;
}
function test()
{
$this->LinkEngineMYSQL->...
}
}
$MysqlObj = new EngineMYSQL();
$SettingsObj = new EngineSettings( $MysqlObj );
|
Но я не знаю, будет ли в данном случае создаваться копия объекта EngineMYSQL, а то это много ресурсов сьест. Подскажите правильно ли я сделал, или предложите свои варианты. | |
|
|
|
|
|
|
|
для: pavluxa09
(29.01.2011 в 02:18)
| | Хм... вряд ли они съедят много ресурсов, но вообще, класс EngineSettings напрашивается с статические классы, да и EngineSettings возможно тоже. Какие задачи решает каждый из классов? Может здесь вообще не нужно создавать объектов (их реально требуется несколько штук)? | |
|
|
|
|
|
|
|
для: cheops
(29.01.2011 в 13:02)
| | Та нет. Не требуется несколько штук | |
|
|
|
|
|
|
|
для: pavluxa09
(29.01.2011 в 13:53)
| | Если Вы работает с PHP 5, то явно передавать объект по ссылке не обязательно (больше того - нежелательно). Он и так будет передан именно таким образом.
Обратите внимание на типовой проект Singleton ("Одиночка"):
<?php
class EngineMYSQL
{
static private $i;
private function __construct()
{
}
public static function getInstance()
{
if(!isset(self::$i))
self::$i = new self();
return self::$i;
}
}
class EngineSettings
{
private $LinkEngineMYSQL;
function __construct( )
{
$this->LinkEngineMYSQL = EngineMYSQL::getInstance();
}
function test()
{
$this->LinkEngineMYSQL->...
}
}
|
(Код тоже для пятой версии PHP). | |
|
|
|
|
|
|
|
для: pavluxa09
(29.01.2011 в 13:53)
| | Хм... так может сделать методы в классах статические (static) и обращаться к ним через :: вместо ->. Это позволит не создавать объекты. | |
|
|
|