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]   

> Без описания
SindBAD
Отправлено: 29 Июня, 2011 - 18:38:28
Post Id


Новичок


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


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




Всем привет.
Потребовалось изменить в Joomla метод ядра.
PHP:
скопировать код в буфер обмена
  1. <?
  2. JRoute{
  3.         function _($url, $xhtml = true, $ssl = null){
  4.                 ...
  5.                 return $url;
  6.         }
  7. }
  8.  

Добавил плагином такой код:
PHP:
скопировать код в буфер обмена
  1. class SEFreplaceRoute extends JRoute{
  2.         function _($url, $xhtml = true, $ssl = null){
  3.                 $url = parent::_($url, $xhtml, $ssl);
  4.                 ...
  5.                 return $url;
  6.         }
  7. }

Но загвоздка в том, что в двмжке метод всегда вызывается без объявления класса,
JRoute::_(...), и поэтому переопределить его не удаётся. Можно как-то это обойти?
 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Июня, 2011 - 20:04:22
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




напишите внутри самого JRoute добавьте в конец перечисления передаваемых параметров свой дополнительный (например ,$myparam = false)
И прямо сам метод и расширяйте по условию: if ($myparam) {.....
ну и там где надо добавляйте при вызове свое true.
 
 Top
SindBAD
Отправлено: 29 Июня, 2011 - 20:56:36
Post Id


Новичок


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


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




Без вмешательство в JRoute никак? Ядро трогать не хочется, а так бы я тупо метод переписал.
 
 Top
EuGen Администратор
Отправлено: 29 Июня, 2011 - 21:16:10
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Насколько я понимаю, Вы явно вызываете статический метод класса (с указанием собственно того класса, из которого он вызывается).
Поэтому нужно либо изменить вызов, либо код метода. Так как Вы не хотите менять код метода, то остается только изменять то, как он вызывается.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
SindBAD
Отправлено: 29 Июня, 2011 - 21:21:39
Post Id


Новичок


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


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




Ясно. Никак, значит...
Тут дело к сожалению не в том, хочу я или не хочу, а в том, что код ядра реализован топорно. Если я изменю его, то последующие обновления могут поломать мои доработки. Хуки ядра тоже не предусмотрены. А в скриптах joomla данный метод везде вызывается только как JRoute::_() , и это тоже не перепишешь - это почти весь фронтенд движка.
Вот такая петрушка...(
 
 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