Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ООП перегрузка функций, __set,__get 
:(
    Опции темы
acdcee
Дата 5.5.2008, 02:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.7.2007

Репутация: нет
Всего: 1



Добрый вечер!

Вот не давно на толкнулся на такую бяку

есть класс:

Код

class Registry
{
    private $data = array();

     public function __set($name, $value)
    {
        $this->data[$name] = $value;
    }
    
    public function __get($name)
    {
        return @$this->data[$name];
    }
    
    static function instance() {
        static $instance;
        $instance = new Registry();
        return $instance;
    }
}

$Registry = Registry::instance();


смысл тут понятен но расскажу. Так вот для того что бы вызывать к примеру вот такой класс Mysql($dbname,$dbpassw,$dbuser,$dbname);
в других классах или функциях не удобно, желания юзать константы нету. так вот и пришла идея написать регистратор не явных классов определить их и дальше уже орудовать с ними. Так вот проблема вот в это и заключается пример:

Код

$Registry->DB = new Mysql($dbhost,$dbname,$dbuser,$dbpassw);
print_r(Registry::instance());


если написать print_r($Registry);
то все нормально показывает то что нужно и все рабоает. Но! Если написать print_r(Registry::instance()); то показывает что перменная $this->data пустая.

Почему так?????  smile  smile  smile  Уже и проверку делал $inctance типа if(!isset($instance)) { $instance = new Registry(); }. но увы ничего не помогает.  smile  smile 
PM MAIL   Вверх
awers
Дата 5.5.2008, 03:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: 21
Всего: 31



http://ru.wikipedia.org/wiki/singleton
незачто )

Добавлено через 13 секунд
Код

<?php
class Singleton {
  // object instance
  private static $instance;
 
  private function __construct() {}
 
  private function __clone() {}
 
  public static function getInstance() {
    if (self::$instance === null) {
      self::$instance = new self;
    }
    return self::$instance;
  }
 
  public function doAction() {
    ...
  }
}
 
//usage
Singleton::getInstance()->doAction();
?>


PM MAIL WWW ICQ Skype   Вверх
acdcee
Дата 5.5.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.7.2007

Репутация: нет
Всего: 1



Спасибо буду пробывать )))
PM MAIL   Вверх
acdcee
Дата 5.5.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.7.2007

Репутация: нет
Всего: 1



И так после долгих мучений smile родилось следуйщее

Код

class Registry {
    
    private $data = array();
    
    public function __construct() {}
    
    public function __set($name, $value) {
        $this->data[$name] =& $value;
    }
    
    public function __get($name) {
        return $this->data[$name];
    }
    
    public static function &instance() {
        static $instance;
        if(!isset($instance)) {
            $instance = new Registry();
        }
        return $instance;
    }
}

$Registry =& Registry::instance();


работает по ссылке странно можно назвать но логично. Теперь что же будет если написать такое $Registry->DB = new Mysql($dbname, ...);
А вот что:
Код

$Registry->DB = new Mysql($dbname, ...);

//а дальше можно уже юзать вот 

class MyClass {

          ....
          function GetFunction() {
                $db = Registry::instance()->DB;
                //или $db = Registry::instance(); а дальше $db['DB']->sql_query и т.д
          }
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0425 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.