возможнсть переопределять системные методы

Рейтинг: 3.8297  
Отложено
Предложил Кудин Александр 21.12.2012 13:06:20

возможнсть переопределять системные методы

а если бы во всех штатных компонентах, да и в ядре не использовались бы стaтические методы - это жалкое подобие ооп,
а везде вначале создавался объект, тот же СiblockElement   например и с ним шла работа

И

лежал бы гденить каталог, в котором КАЖДЫЙ класс типа

class СiblockElement extends system_CIblockElement { // пустышка}
т.е. все классы наследовались бы  от системных классов(которые менять нельзя - часть ядра),
а сам этот каталог чтобы НЕ ЯВЛЯЛСЯ ЧАСТЬЮ ЯДРА,   (ну или не каталог, а 1  файл со списком всех классов -пустышек - не суть как организовать )
т.е. если мне нужно переопределить какие методы в СiblockElement  то я в нём бы переопределил, или добавил свои методы, и во всём ядре, во всех компонентах это бы работало

тут конечно нужно потходить с умом, чтобы при обновлении допустим структура бд может поменять или ещё  что ... но в целом, была бы сама ВОЗМОЖНОСТЬ  это делать...
очень часто помогла бы я думаю

как думаете?

Рейтинг: 0  
Зайцев Артемий 21.12.2012 17:43:07
Что мешает сделать нaоборот?

Если вам надо расширить функционал стандартного класса, применяйте наследование иначе:
class СMyIblockElement extends СMyIblockElement { // ваши методы}

Используйте СMyIblockElement везде, где вам надо.

----------

Если вы сделаете, как у вас написано:
class СiblockElement extends system_CIblockElement { // пустышка}

То СIblockElement::GetList заменит ваш system_CIblockElement::GetList, и у вас ничего не получится поменять в СIblockElement через родителя.
Рейтинг: 1.3303  
Кудин Александр 21.12.2012 18:44:42
Что мешает сделать нооборот?

Если вам надо расширить функционал стандартного класса, применяйте наследование иначе:
class СMyIblockElement extends СMyIblockElement { // ваши методы}

Используйте СMyIblockElement везде, где вам надо.
но во всех системных компонентах будет вызываться СIblockElement, с непереопределёнными методами

То СIblockElement::GetList заменит ваш system_CIblockElement::GetList, и у вас ничего не получится поменять в СIblockElement через родителя.

не совсем поняли идею
system_CIblockElement - системный класс ( как сейчас СIblockElement ) , который нельзя менять

в файле, который подключается всегда в ядре написано
class СiblockElement extends system_CIblockElement { }

(
СiblockElement - везде используется и может нами редактироваться если захотим ) и этот файл мы могли бы редактировать....

допустим захотел я поменять принцип формирования detail_page_url на свой, написал бы


class СiblockElement extends system_CIblockElement {
  function GetList(){
 
parent::GetList()
  //  и тут следом бы поменял принцип формирования нужного поля
 }
}
- И СРАЗУ БЫ ВЕЗДЕ ! и в админке, и во всех компонентах (в т.ч. в штатных ) это поле стало бы такое как я захотел


Рейтинг: -0.5505  
Долганин Антон 23.12.2012 14:53:46
Мне кажется, не стоит спешить с предложениями и выкладками по поводу "жалкого ядра", а подождать новое ядро.
Рейтинг: 0.9171  
Абросимов Илья 03.10.2013 15:22:09
Сейчас версия 12.5.11, а необходимость в переопределении к сожалению не отпала - некоторые методы хотелось бы соптимизировать под большую нагрузку, при этом не переписывая стандартные, уже внедренные и настроенные компоненты.