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]   

> Описание: От него зависит ядро моей CMS
STRELOK
Отправлено: 13 Января, 2010 - 12:22:58
Post Id



Гость


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


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




Можно ли каким то образом формировать поля и методы у класса?
 
 Top
JustUserR
Отправлено: 13 Января, 2010 - 14:38:48
Post Id



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


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


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




STRELOK пишет:
Можно ли каким то образом формировать поля и методы у класса?
Однако философский вопрос - я всегда думал что класс как правило состоит из свойств (В вашей термилоногии полей) и методов - и собственно все ООП на этом и базируется Улыбка
Если вы имеете в виду чтобы поля и методы имел сам класс а не его экземпляры то это тоже возможно - просто укажите слово static в определении - а если речь идет о динамических переменных то объявляйте их ИМЯ_КЛАССА::$ИМЯ_ПЕРЕМЕННОЙ (Также можно обращаться и к статическим методам)


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
STRELOK
Отправлено: 13 Января, 2010 - 15:05:44
Post Id



Гость


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


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




Вот класс::переменная это возможно то что нужно. Не подскажешь где можно конкретно об этом прочитать?

Да, и сразу меня интересует вот какой вопрос. Может это и глупоУлыбка Но, известно имя класса и имя модуля где этот класс определен. Возможно ли каким то образом, создать экземпляр этого класса только по его имени?
 
 Top
JustUserR
Отправлено: 13 Января, 2010 - 20:51:15
Post Id



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


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


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




STRELOK пишет:
Вот класс::переменная это возможно то что нужно. Не подскажешь где можно конкретно об этом прочитать?
Это очень распространенный вопрос - можете в любом поисковике поискать PHP ООП
STRELOK пишет:
Да, и сразу меня интересует вот какой вопрос. Может это и глупо Но, известно имя класса и имя модуля где этот класс определен. Возможно ли каким то образом, создать экземпляр этого класса только по его имени?
Возможно - например с помощью eval("\$var_name= new $class_name"); где в переменной $class_name хранится имя класс а экзамепляр будет создан в переменной $var_name


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
STRELOK
Отправлено: 13 Января, 2010 - 21:35:26
Post Id



Гость


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


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




JustUserR пишет:
Возможно - например с помощью eval("\$var_name= new $class_name"); где в переменной $class_name хранится имя класс а экзамепляр будет создан в переменной $var_name

Спасибо
 
 Top
Nestor
Отправлено: 13 Января, 2010 - 22:35:41
Post Id



Частый гость


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


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




Можно и без eval.

PHP:
скопировать код в буфер обмена
  1. $newClass_1 = new $className;
  2. $newClass_2 = new $className($param1,$param2,...,$paramN);


-----
Aurus CMS
 
 Top
movEAX
Отправлено: 14 Января, 2010 - 09:44:41
Post Id



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


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


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




JustUserR пишет:
я всегда думал что класс как правило состоит из свойств (В вашей термилоногии полей) и методов


(C#) Поле - это поле) ; свойство реализует методы get() и set(); метод , он и в Африке метод.

STRELOK пишет:
Можно ли каким то образом формировать поля и методы у класса?


Ну, можно использовать полиморфизм, если это конечно то, что тебе нужно)
CODE (text):
скопировать код в буфер обмена
  1. class base{
  2.     protected $a = '1';
  3.  
  4.     private function __construct(){}
  5.  
  6.     protected function b(){
  7.          return 'b';
  8.     }
  9.  
  10.  
  11.     protected function a(){
  12.          return $this->a;
  13.     }
  14.  
  15.     public function write(){
  16.         echo $this->b().$this->a();
  17.     }
  18. }
  19.  
  20. class Extended extends base{
  21.     protected $a = '2';
  22.  
  23.     public function __construct(){}
  24.     protected function b(){
  25.         return 'B';
  26.     }  
  27. }
  28.  
  29. $obj = new Extended;
  30.  
  31. $obj->write();


-----
армия.. самое убогое место
 
 Top
STRELOK
Отправлено: 14 Января, 2010 - 10:01:24
Post Id



Гость


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


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




movEAX пишет:
JustUserR пишет:
я всегда думал что класс как правило состоит из свойств (В вашей термилоногии полей) и методов


(C#) Поле - это поле) ; свойство реализует методы get() и set(); метод , он и в Африке метод.

STRELOK пишет:
Можно ли каким то образом формировать поля и методы у класса?


Ну, можно использовать полиморфизм, если это конечно то, что тебе нужно)
CODE (text):
скопировать код в буфер обмена
  1. class base{
  2.     protected $a = '1';
  3.  
  4.     private function __construct(){}
  5.  
  6.     protected function b(){
  7.          return 'b';
  8.     }
  9.  
  10.  
  11.     protected function a(){
  12.          return $this->a;
  13.     }
  14.  
  15.     public function write(){
  16.         echo $this->b().$this->a();
  17.     }
  18. }
  19.  
  20. class Extended extends base{
  21.     protected $a = '2';
  22.  
  23.     public function __construct(){}
  24.     protected function b(){
  25.         return 'B';
  26.     }  
  27. }
  28.  
  29. $obj = new Extended;
  30.  
  31. $obj->write();

спасибо, но мне нужно формировать поля и методы (в первую очередь поля) во время работы скрипта в зависимости от например подключенных компонентов. Перечитал еще раз внимательно статью о ООП 5пыха на этом сайте(который стал уже вроде настольной книги - спасибо админамУлыбка). Буду использовать перегрузку методов гет и сет.
 
 Top
movEAX
Отправлено: 14 Января, 2010 - 20:08:23
Post Id



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


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


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




STRELOK пишет:
спасибо, но мне нужно формировать поля и методы (в первую очередь поля) во время работы скрипта в зависимости от например подключенных компонентов. Перечитал еще раз внимательно статью о ООП 5пыха на этом сайте(который стал уже вроде настольной книги - спасибо админамУлыбка). Буду использовать перегрузку методов гет и сет.

Приглянись к шаблонам проектирования, наверняка что-нибудь приглянется.

Список литературы:
+ Паттерны проектирования (Э. Гамма Р. Хелм Р. Джонсон Дж. Влиссидес) - классика,
+ PHP Objects Patterns and Practice (Apress)
+ PHP Hacks Tips and Tools For Creating Dynamic Websites (OReilly)


-----
армия.. самое убогое место
 
 Top
ZYM
Отправлено: 15 Января, 2010 - 01:43:04
Post Id


Новичок


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


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




Ну да, всё правильно, поля класса - это константы его экземпляров. Имеет смысл выносить в константы все статичные данные, что идентичны и повторяется более 1 раза в коде =) на сколько я помню. Тем более, если они используются в методах класса.
 
 Top
JustUserR
Отправлено: 15 Января, 2010 - 10:52:24
Post Id



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


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


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




ZYM пишет:
Поля класса - это константы его экземпляров
Не совсем - динамические поля класса (Не статические) являются как раз свойствами экзмепляров класса - причем у каждого экземпляра они имеют свои значения и методы выполняются у каждого экземепляра для его своих значений
Статические поля и методы класса это обычные переменые и функции но с пространством имен в виде класса (Уж такая в PHP реализация пространств имен - в Perlе для этого используются пакеты) - то есть заместо $my_var имеет classname::$my_var и заместо my_func() имеет classname::my_func() и все


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный 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