Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: получить родител я в класс (ООП)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Вездеход
Отправлено: 12 Ноября, 2010 - 09:51:47
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




есть основной класс EYE

PHP:
скопировать код в буфер обмена
  1. class EYE {
  2.         private static $me;
  3.         function __construct() { self::$me =& $this; }
  4.         public static function &get_me() { return self::$me; }
  5. }
  6.  


и функция для получения копии этого класса:
PHP:
скопировать код в буфер обмена
  1. function & get_eye() { return EYE::get_me(); }


// такие коды я взял из Code Igniter


и теперь самое главное.
в классе EYE есть переменная config, которая является классом с конфигурацией системы
для вызова названия системы например можно вызвать: $EYE->config->title

а есть например в классе EYE переменная db, которая содержит функции для работы с базой.
например для конекта к базе надо вызвать $EYE->db->connect();

так вот. при создании класса (в __construct) мне надо прописать пару значений:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. class db extends EYE {
  4.         public $pref = 0;
  5.         var $EYE;
  6.         function __construct() {
  7.                 $this->EYE = & get_eye();              
  8.                 $this->pref = $this->EYE->config->db['pref'];
  9.         }      
  10. }
  11. ?>
  12.  


но это не работает!
если я сделаю в конструкторе так: print_r($this->EYE) , то получаю класс EYE, в котором есть конфиги... норм вроде все. но вызвать их у меня не получается... кто нибудь может подсказать как это делается?

т.е. грубо говоря что мне нужно
есть основной родительский класс
есть классы, которые наследуют этот самый родительский класс
мне нужно чтоб в этих классах был доступен полностью родительский класс, его функционал и переменные...

-------------------------------- -------------------------------- -------------------------------- -------------------------------- -------------------------------- ------------


(Добавление)
попытка объяснить задачу №2
---

дан основной класс PARENT_CLASS
в нем при создании (в __construct() ) создаются переменные :
$this->db = new db();
$this->config = new config();
$this->uri = new uri();

и т.д.
каждый из этих классов создается таким образом:
class %CLASSNAME% extends PARENT_CLASS {
// тут какие то коды
}


таким образом я могу обращаться к примеру к конфигам так:
$PARENT_CLASS->config->foo

при использовании на сайте вообщем все просто.

но мне нужно чтобы например в классе db был доступен класс config
обратиться так: parent::config я не могу, так как мне нужно конкретные данные.
поэтому мне нужно чтобы в классе db была переменная PARENT_CLASS которая была бы ссылкой на класс PARENT_CLASS
чтобы я мог в любом месте класса db получить нужные мне например конфиги:
$PARENT_CLASS->config->db_name

но вот как это сделать.. я не знаю

как вариант делать в каждой функции так:
global $PARENT_CLASS
но это согласитесь не очень удобно, проще чтобы сразу в классе была копия родительского класса...

(Отредактировано автором: 12 Ноября, 2010 - 10:41:17)



-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
DeepVarvar Супермодератор
Отправлено: 12 Ноября, 2010 - 10:41:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Вездеход пишет:
но это не работает!
А ошибки выводит какие или просто белый экран???
(Добавление)
DeepVarvar пишет:
global $PARENT_CLASS
!!!!!!!!!!!!!!! О, народ, а у меня те же вопросы!!! Как-то это делается, гдето я видел, но вот не помню...
(Добавление)
Эээ, вроде нашол:
класс $PARENT_CLASS должен быть абстрактным... Эх некогда разбираться...

http://phpclub[dot]ru/detail/article/oop_classes
 
 Top
OrmaJever Модератор
Отправлено: 12 Ноября, 2010 - 13:22:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




случайно написал пост.

(Отредактировано автором: 12 Ноября, 2010 - 13:27:54)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Вездеход
Отправлено: 12 Ноября, 2010 - 13:30:55
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




DeepVarvar
ссылку почитал, спасибо
полезно, но ответа там не нашел.. ((


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
Вездеход
Отправлено: 13 Ноября, 2010 - 07:40:57
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




даже не верится что никто не знает...(((


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
Варяг
Отправлено: 13 Ноября, 2010 - 09:11:18
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




не совсем понятно в чем проблема. при наследовании переменные становятся доступными в классе-наследнике. Для вызова методов (насколько я понимаю) нужно создать объект класса. В PHP 5 создаются ссылки на объекты, поэтому клоны нужно делать самому.
Область видимости задается доступностью переменных.
PHP:
скопировать код в буфер обмена
  1.  
  2. class EYE{
  3.  
  4. public $db;
  5. function __construct(){
  6. $this->db='name';
  7. }
  8. }
  9.  
  10. class bd extends EYE{
  11. //просто так мы не получим name, нам нужно вызвать конструктор EYE.
  12. function __construct() {
  13. parent::__construct();
  14. }
  15. }
  16.  


могу ошибаться, т.к. не использовал пока это
 
 Top
JustUserR
Отправлено: 14 Ноября, 2010 - 01:57:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Вездеход пишет:
И функция для получения копии этого класса
Приведенная вами функциия обеспечивающая предполагаемых действий по получению копии экземпляра данного класса не осуществляет выполнение целевой фунциональности - при этом причиной такого проявления выполняемого кода является особенности механизма представления ООП-объектов в языка PHP5 Дело в том что основание хранение ресурсных элементов обеспечивется в соответствии с задаваемыми пространствами имен и текущими областями видимости - в частности конструкция класса является оболочной для именованной области элементов с включением функций промежуточной обработки информационных полей - для обеспечения работоспособности системы активный свойств properties Таким образом фактическая реализация копирования экземпляра может быть обеспечена при услови выполнение операций присваивания для информационных полей простых типов - и генерации соответствующих функций промежуточной обработки


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB