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]   

> Без описания
haveFun
Отправлено: 31 Января, 2015 - 04:22:29
Post Id



Гость


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


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




привет. Радость
вижу никого до меня данный вопрос не интересовал.
допустим у меня есть родительский класс:
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;
 
 Top
Bio man
Отправлено: 31 Января, 2015 - 15:16:58
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




PHP:
скопировать код в буфер обмена
  1. $className = "\\{$appName}Application\\{$appMeth}";
  2. $obj = new $className();
 
 Top
Sail
Отправлено: 02 Февраля, 2015 - 10:03:45
Post Id



Участник


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


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




haveFun пишет:
как мне из родительского класса вызвать метод дочернего?

В дочернем классе надо просто переопределить метод родительского.
В том случае, если уже есть гора функций, в качестве параметра ожидающих объект родительского класса, она не будет иметь ничего против получения в качестве параметра объекта дочернего класса.
 
 Top
haveFun
Отправлено: 03 Февраля, 2015 - 00:38:13
Post Id



Гость


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


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




а можно пожалуйста пример?
 
 Top
qtk
Отправлено: 09 Февраля, 2015 - 17:41:13
Post Id


Частый гость


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


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




Из родительского класса нельзя просто так вызвать метод дочернего. Только если создать объект дочернего классом в внутри родительского. Это само по себе не правильно и не имеет смысла. Дочерним класс в основном нужны для расширения функционала, а родительские содержат обычно базовые методы которые требуются всем дочерним классам.
 
 Top
Sanek_OS9
Отправлено: 20 Марта, 2015 - 12:01:03
Post Id



Гость


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


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




Может я что то не правильно понял но вот:
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
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB