Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как правильнее и оптимизированее работать с классами в данном случае
 
 автор: pavluxa09   (29.01.2011 в 02:18)   письмо автору
 
 

Добрый день. Пишу скрипт, у меня получается такая вещь: имеется класс 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, а то это много ресурсов сьест. Подскажите правильно ли я сделал, или предложите свои варианты.

  Ответить  
 
 автор: cheops   (29.01.2011 в 13:02)   письмо автору
 
   для: pavluxa09   (29.01.2011 в 02:18)
 

Хм... вряд ли они съедят много ресурсов, но вообще, класс EngineSettings напрашивается с статические классы, да и EngineSettings возможно тоже. Какие задачи решает каждый из классов? Может здесь вообще не нужно создавать объектов (их реально требуется несколько штук)?

  Ответить  
 
 автор: pavluxa09   (29.01.2011 в 13:53)   письмо автору
 
   для: cheops   (29.01.2011 в 13:02)
 

Та нет. Не требуется несколько штук

  Ответить  
 
 автор: The Electronic Cat   (29.01.2011 в 14:39)   письмо автору
 
   для: 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).

  Ответить  
 
 автор: cheops   (29.01.2011 в 16:54)   письмо автору
 
   для: pavluxa09   (29.01.2011 в 13:53)
 

Хм... так может сделать методы в классах статические (static) и обращаться к ним через :: вместо ->. Это позволит не создавать объекты.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования