Переопределение функций в 1c-bitrix

Рейтинг: 5.2261  
На голосовании
Предложил Пользователь 105345 11.09.2014 09:48:51

Переопределение функций в 1c-bitrix

Не первый раз возникла нужда переопределить функцию.

Необходимо к примеру что-то внести в функцию, добавить.
Пробовал через init.php, но ни какой проверки видимо при объявлении функций не стоит. Только при подключении модулей.

Предлагаю дать возможность переопределять функции битрикса, не трогая ядро.

Рейтинг: 0  
Пользователь 9700 12.09.2014 02:23:29
Неоднократно просили об этом, из последних мой запрос на DI контейнер, что по сути решит и вашу задачу.
http://idea.1c-bitrix.ru/overriding-functions-in-the-1cbitrix/

Сейчас вашу задачу можно решить только с использованием runkit
http://php.net/manual/ru/function.runkit-function-redefine.php
http://php.net/manual/ru/function.runkit-method-redefine.php
Рейтинг: 0  
Пользователь 105345 12.09.2014 07:34:13
Спасибо. Я это уже читал тоже.
Но хотелось бы, чтобы разработчики битрикса написали. Там в последующих версиях может меняться, а при обновлении битрикса все бы работало хорошо.
Рейтинг: 0.2296  
Пользователь 11948 12.09.2014 09:53:22
А я вот бы боязно относился к этому. Представляете какой начнется ад, если в Маркетплейсе все ринутся переопределять ядро? Я думаю, Битрикс по этой же причине не трогает это.
Рейтинг: 0.0844  
Пользователь 105345 12.09.2014 15:07:43
Я имею ввиду, что к примеру предусматривается определенный файл (например рядом с iniit.php), в котором я могу переопределить функции любые. Осторожно относиться надо, если каждый через php будет переопределять в любом месте - вот тогда думаю хаос будет.
Рейтинг: 0.288  
Пользователь 11948 12.09.2014 16:10:14
Хорошо, Владислав, это принято :) но вот что еще есть - идеология продукта (как и в любом продукте). Вот приходит новичок, торопится быстрее начать делать сайты. Возникает сложность. Что он делает? А лезет и переопределяет функцию, доволен. Но проблема в том, что он НЕ учится, и дальше продолжает лабать что-то свое, абсолютно не по идеологии. Как решить эту проблему?

Я согласен, фишка нужная, сам не откажусь, но лет через 5 она столько гемора принеет, что страшно представить.
Рейтинг: 0.0726  
Пользователь 11948 12.09.2014 16:10:58
Так что лучше runkit. Там его каждый использует с пониманием риска уже, и на свою совесть.
Рейтинг: 0.0726  
Пользователь 11948 12.09.2014 16:14:58
Есть тупики реальные, типа такого http://idea.1c-bitrix.ru/ciblockreplacedetailurl-is-it-possible-to-intrude-into/ в таких случаях я пытаюсь как-то добиться внедрения точечного переопределения, а не универсального.  
Рейтинг: 0.2154  
Пользователь 9700 13.09.2014 16:58:01
+Долганин Антон
runkit хорошо, но он есть не везде и РНР надо собирать с ним.

На счет переопределений классов и методов не вижу больших проблем если использовать контейнер DI.
Да, в теории что то могут сломать, но там всегда будет видно откуда "ноги растут". э

Сейчас же есть ряд задач, которые без переопределения ядра НИКАК (нормально) не решить, и это печалит.
Рейтинг: 0  
Пользователь 11948 13.09.2014 18:18:09
Михаил, а как быть с идеологической проблемой, которую я описал?
Рейтинг: 0  
Пользователь 9700 14.09.2014 19:25:29
Антон, да и сейчас проблема и без возможности переопределений есть, когда новички лезут и переопределяют ядро.
Да чего таить, сам этим на паре проектов занимаюсь, ибо Битрикс уже 2й год не может дописать 1 строчку.

Тут больше надо показать подход(учебный курс), как можно правильно переопределять медоды и функции.
Рейтинг: 0  
Пользователь 11948 14.09.2014 19:33:10
Ок, ближе к примеру подойдем - если они полезут в гетлисты и начнут дописывать туда JOIN'ы, что тогда?

надо показать подход(учебный курс)
А как там описать опыт?

Я еще раз акцент сделаю - переопределение это ВСЕГДА отключение мозга, всегда отключения развития программиста. Походил, покурил, чаю попил -- "ну эта задача определенно из 1% задач, которые Битрикс НЕ МОЖЕТ РЕШИТЬ!! надо переопределять".

Я до сих пор с таким сталкиваюсь в себе (а опыта 10 лет уже). Что мол "ай как хорошо было бы тут влезть". Ан нет, денек подумал, переспал с идеей, и родилось решение в обход. Очень редко бывают затыки (я привел пример).

Поэтому я считаю идеи переопределения из коробки опасностью для идеологии.  Тут 1-5% пользы, зато 50% вреда.
Рейтинг: 0  
Пользователь 11948 14.09.2014 19:34:51
Антон, да и сейчас проблема и без возможности переопределений есть, когда новички лезут и переопределяют ядро.
Ну за это они поплатятся штрафами или отзывами. Рано или поздно пинка получат. За _официально_ разрешенные влезания в ядро они таких пинков не получат.
Рейтинг: 0  
Пользователь 11948 14.09.2014 19:44:52
ибо Битрикс уже 2й год не может дописать 1 строчку.
Накипело :)
Рейтинг: 0  
Пользователь 105345 15.09.2014 07:22:10
Михаил, а как быть с идеологической проблемой, которую я описал?
Антон. Если так рассуждать, то зачем давать открытый код ядра?
Просто когда реально это необходимо, приходится писать всякие костыли, писать свои функции точно такие же, но отличающиеся 1-2 строчками кода. И они у всех находятся в разных местах. Вот это действительно проблема.
Так же в этом файле можно писать (сделать так сказать неофициальный стандарт среди разработчиков) свои функции, чтобы в случае чего не искать по всем шаблонам сайтов и т.д. Сейчас берешься что-то иногда доделать, и реально не понимаешь что где написано.
Я думаю этой идее есть место быть. Как например картинки должны храниться в upload, скрипты в js и т.д.
Согласитесь когда все инструменты на своих местах, то и работать приятно.

А техподдержка битрикса - они уже знают что где будет лежать, в случае обращения.
Рейтинг: 0.0726  
Пользователь 11948 15.09.2014 07:24:59
Не понимаем мы друг друга все же :) я вам об обучении, вы мне об опытных. Первым это зло, вторым это нужно. Еще раз перечитайте мой коммент плиз, про то, как я день вынашивал идею, и выносил таки. А так бы переопределил и лишний раз мозг не работал. А когда мозг не работает - это плохо.