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. haveFun - 31 Января, 2015 - 04:22:29 - перейти к сообщению
привет. Радость
вижу никого до меня данный вопрос не интересовал.
допустим у меня есть родительский класс:
PHP:
скопировать код в буфер обмена
  1. namespace MainApplication;
  2. class Application {}

а так же один дочерний класс:
PHP:
скопировать код в буфер обмена
  1. namespace UserApplication;
  2. use MainApplication;
  3. class Application extend MainApplication\\Application {}

как мне из родительского класса вызвать метод дочернего?
пытаюсь так:
PHP:
скопировать код в буфер обмена
  1. namespace MainApplication;
  2. class Application {
  3.         public function includeApp($appName, $appMeth) { // ('User', 'Main')
  4.                 $obj = new \$appName.'Application'.\$appMeth();
  5.                 return $obj;
  6.         }
  7. }

но в результате ошибка
Цитата:
Parse error: syntax error, unexpected '$appName' (T_VARIABLE), expecting identifier (T_STRING) in .../_application.php on line 4

с синтаксом не могу разобраться. в мануале таких сложных примеров естественно не описано.
хотелось бы обращаться к методам при помощи одной строки, без формирования названия, типа
PHP:
скопировать код в буфер обмена
  1. $objName = '\'.$appName.'Application\'.$appMeth;
  2. $obj = new $objName;
2. Bio man - 31 Января, 2015 - 15:16:58 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $className = "\\{$appName}Application\\{$appMeth}";
  2. $obj = new $className();
3. Sail - 02 Февраля, 2015 - 10:03:45 - перейти к сообщению
haveFun пишет:
как мне из родительского класса вызвать метод дочернего?

В дочернем классе надо просто переопределить метод родительского.
В том случае, если уже есть гора функций, в качестве параметра ожидающих объект родительского класса, она не будет иметь ничего против получения в качестве параметра объекта дочернего класса.
4. haveFun - 03 Февраля, 2015 - 00:38:13 - перейти к сообщению
а можно пожалуйста пример?
5. qtk - 09 Февраля, 2015 - 17:41:13 - перейти к сообщению
Из родительского класса нельзя просто так вызвать метод дочернего. Только если создать объект дочернего классом в внутри родительского. Это само по себе не правильно и не имеет смысла. Дочерним класс в основном нужны для расширения функционала, а родительские содержат обычно базовые методы которые требуются всем дочерним классам.
6. Sanek_OS9 - 20 Марта, 2015 - 12:01:03 - перейти к сообщению
Может я что то не правильно понял но вот:
PHP:
скопировать код в буфер обмена
  1. class B{
  2.         public function test(){
  3.                 return $this->test2() ;
  4.         }
  5.         public function test2(){
  6.                 echo 'Метод test2 класса B' ;
  7.         }
  8. }
  9. class A extends B{
  10.         public function test2(){
  11.                 echo 'Метод test2 класса A' ;
  12.         }
  13. }
  14. $class = new A() ;
  15. $class->test() ;

Выведет Метод test2 класса A

 

Powered by ExBB FM 1.0 RC1