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 » » Объектно-ориентированное программирование » Принудительный вызов метода класса-потомка

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

1. MADONZY - 28 Января, 2015 - 10:18:57 - перейти к сообщению
Здравствуйте! Подскажи как, если это возможно, принудительно вызвать метод класса-потомка не изменяя базовый класс. На пример:

PHP:
скопировать код в буфер обмена
  1. <?
  2.  
  3.  
  4.     class A {
  5.        
  6.         function test($param) {
  7.             echo __CLASS__.' '.$param;
  8.         }
  9.        
  10.     }
  11.  
  12.     class B extends A {
  13.        
  14.         function test($param) {
  15.             echo __CLASS__.' '.$param;
  16.         }
  17.  
  18.     }
  19.  
  20.  
  21.  
  22.     $a = new A;
  23.     $a->test('some text'); // тут должен вызваться метод test() класса B: 'B some text'


или же со статическими методами:

PHP:
скопировать код в буфер обмена
  1. <?
  2.  
  3.  
  4.     class A {
  5.        
  6.         static function test($param) {
  7.             echo __CLASS__.' '.$param;
  8.         }
  9.        
  10.     }
  11.  
  12.     class B extends A {
  13.        
  14.         static function test($param) {
  15.             echo __CLASS__.' '.$param;
  16.         }
  17.  
  18.     }
  19.  
  20.     A::test('some text'); // тут должен вызваться статический метод test() класса B: 'B some text'


Может есть какой-то шаблон проэктирования для таких случаев?
Заранне, спасибо!
2. Ch_chov - 28 Января, 2015 - 10:45:32 - перейти к сообщению
У класса A может быть несколько наследников, поэтому никак.

MADONZY пишет:
Может есть какой-то шаблон проэктирования для таких случаев?

Ну так опишите свой случай.
3. MADONZY - 28 Января, 2015 - 11:01:37 - перейти к сообщению
Ch_chov пишет:
У класса A может быть несколько наследников, поэтому никак.

MADONZY пишет:
Может есть какой-то шаблон проэктирования для таких случаев?

Ну так опишите свой случай.


2 варианта:
1) Есть класс A который наследуется от класа Х. В нем есть метод test (возможно статический). Где-то далеко-далеко в коде этот метод вызывается. Класс A это член стандартных классов какого-то фреймвока, котовый я не хочу изменять. Я же хочу создать свой дополнительный класс B который наследует класс А и в нем я надпишу (возможно статический) метод test. И я хочу что-бы в том далеком-далеком месте где вызывается метод test класса А, не изменяя этот вызов, вызывался метод test класса B.

2) Есть класс A который наследуется от класа Х. В нем есть метод test (возможно статический). Где-то далеко-далеко в коде этот метод вызывается. Класс A это член стандартных классов какого-то фреймвока, котовый я не хочу изменять. Я же хочу создать свой дополнительный класс B который наследует класс X и в нем я надпишу (возможно статический) метод test. И я хочу что-бы в том далеком-далеком месте где вызывается метод test класса А, не изменяя этот вызов, вызывался метод test класса B.
4. armancho7777777 - 28 Января, 2015 - 12:21:55 - перейти к сообщению
MADONZY пишет:
PHP:
скопировать код в буфер обмена
  1. $a->test('some text'); // тут должен вызваться метод test() класса B: 'B some text'

Сами-то понимаете, чего хотите ?
Откуда классу A знать, что нужен метод именно этого дочернего класса, а не "С", или "D" ?
Создайте экземпляр объекта класса B и вызывайте.
5. MADONZY - 28 Января, 2015 - 13:06:06 - перейти к сообщению
armancho7777777 пишет:
MADONZY пишет:
PHP:
скопировать код в буфер обмена
  1. $a->test('some text'); // тут должен вызваться метод test() класса B: 'B some text'

Сами-то понимаете, чего хотите ?
Откуда классу A знать, что нужен метод именно этого дочернего класса, а не "С", или "D" ?
Создайте экземпляр объекта класса B и вызывайте.


В том то и дело что понимаю, но думал что народные умельцы что-то придумали Улыбка
6. Bio man - 28 Января, 2015 - 15:01:07 - перейти к сообщению
MADONZY пишет:
В том то и дело что понимаю, но думал что народные умельцы что-то придумали
Придумать то можно, но это противоречит базовым принципам ООП, и потому такой хернёй никто не страдает.
Смотри в сторону полиморфизма и порождающих паттернов.

 

Powered by ExBB FM 1.0 RC1