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. SindBAD - 29 Июня, 2011 - 18:38:28 - перейти к сообщению
Всем привет.
Потребовалось изменить в 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::_(...), и поэтому переопределить его не удаётся. Можно как-то это обойти?
2. DeepVarvar - 29 Июня, 2011 - 20:04:22 - перейти к сообщению
напишите внутри самого JRoute добавьте в конец перечисления передаваемых параметров свой дополнительный (например ,$myparam = false)
И прямо сам метод и расширяйте по условию: if ($myparam) {.....
ну и там где надо добавляйте при вызове свое true.
3. SindBAD - 29 Июня, 2011 - 20:56:36 - перейти к сообщению
Без вмешательство в JRoute никак? Ядро трогать не хочется, а так бы я тупо метод переписал.
4. EuGen - 29 Июня, 2011 - 21:16:10 - перейти к сообщению
Насколько я понимаю, Вы явно вызываете статический метод класса (с указанием собственно того класса, из которого он вызывается).
Поэтому нужно либо изменить вызов, либо код метода. Так как Вы не хотите менять код метода, то остается только изменять то, как он вызывается.
5. SindBAD - 29 Июня, 2011 - 21:21:39 - перейти к сообщению
Ясно. Никак, значит...
Тут дело к сожалению не в том, хочу я или не хочу, а в том, что код ядра реализован топорно. Если я изменю его, то последующие обновления могут поломать мои доработки. Хуки ядра тоже не предусмотрены. А в скриптах joomla данный метод везде вызывается только как JRoute::_() , и это тоже не перепишешь - это почти весь фронтенд движка.
Вот такая петрушка...(

 

Powered by ExBB FM 1.0 RC1