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
Форумы портала PHP.SU :: Версия для печати :: Очень интересный вопрос по ООП
Форумы портала PHP.SU » PHP » Программирование на PHP » Очень интересный вопрос по ООП

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

1. STRELOK - 13 Января, 2010 - 12:22:58 - перейти к сообщению
Можно ли каким то образом формировать поля и методы у класса?
2. JustUserR - 13 Января, 2010 - 14:38:48 - перейти к сообщению
STRELOK пишет:
Можно ли каким то образом формировать поля и методы у класса?
Однако философский вопрос - я всегда думал что класс как правило состоит из свойств (В вашей термилоногии полей) и методов - и собственно все ООП на этом и базируется Улыбка
Если вы имеете в виду чтобы поля и методы имел сам класс а не его экземпляры то это тоже возможно - просто укажите слово static в определении - а если речь идет о динамических переменных то объявляйте их ИМЯ_КЛАССА::$ИМЯ_ПЕРЕМЕННОЙ (Также можно обращаться и к статическим методам)
3. STRELOK - 13 Января, 2010 - 15:05:44 - перейти к сообщению
Вот класс::переменная это возможно то что нужно. Не подскажешь где можно конкретно об этом прочитать?

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

Спасибо
6. Nestor - 13 Января, 2010 - 22:35:41 - перейти к сообщению
Можно и без eval.

PHP:
скопировать код в буфер обмена
  1. $newClass_1 = new $className;
  2. $newClass_2 = new $className($param1,$param2,...,$paramN);
7. movEAX - 14 Января, 2010 - 09:44:41 - перейти к сообщению
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();
8. STRELOK - 14 Января, 2010 - 10:01:24 - перейти к сообщению
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пыха на этом сайте(который стал уже вроде настольной книги - спасибо админамУлыбка). Буду использовать перегрузку методов гет и сет.
9. movEAX - 14 Января, 2010 - 20:08:23 - перейти к сообщению
STRELOK пишет:
спасибо, но мне нужно формировать поля и методы (в первую очередь поля) во время работы скрипта в зависимости от например подключенных компонентов. Перечитал еще раз внимательно статью о ООП 5пыха на этом сайте(который стал уже вроде настольной книги - спасибо админамУлыбка). Буду использовать перегрузку методов гет и сет.

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

Список литературы:
+ Паттерны проектирования (Э. Гамма Р. Хелм Р. Джонсон Дж. Влиссидес) - классика,
+ PHP Objects Patterns and Practice (Apress)
+ PHP Hacks Tips and Tools For Creating Dynamic Websites (OReilly)
10. ZYM - 15 Января, 2010 - 01:43:04 - перейти к сообщению
Ну да, всё правильно, поля класса - это константы его экземпляров. Имеет смысл выносить в константы все статичные данные, что идентичны и повторяется более 1 раза в коде =) на сколько я помню. Тем более, если они используются в методах класса.
11. JustUserR - 15 Января, 2010 - 10:52:24 - перейти к сообщению
ZYM пишет:
Поля класса - это константы его экземпляров
Не совсем - динамические поля класса (Не статические) являются как раз свойствами экзмепляров класса - причем у каждого экземпляра они имеют свои значения и методы выполняются у каждого экземепляра для его своих значений
Статические поля и методы класса это обычные переменые и функции но с пространством имен в виде класса (Уж такая в PHP реализация пространств имен - в Perlе для этого используются пакеты) - то есть заместо $my_var имеет classname::$my_var и заместо my_func() имеет classname::my_func() и все

 

Powered by ExBB FM 1.0 RC1