class MyClass extends \Bitrix\Sale\Order - не получается расширить класс Битрикса

Для одной из задач проекта, хотелось бы добавить несколько своих методов, расширяющих возможности стандартного класса \Bitrix\Sale\Order.

Если создавать свой класс и потом попытаться использовать:

class MyOrder extends \Bitrix\Sale\Order {
    public function getMyData() {
        return $this->getBasket();
    }
}

$orderId = 4567;
$order = \MyOrder::load($orderId);
$order->getMyData(); // нет такого метода

То получаем ошибку, потому что $order instanceof \Bitrix\Sale\Order Это происходит из-за того, что битрикс использует при загрузке заказа \Bitrix\Sale\Registry. Если я тоже буду использовать "Реестр":

$registry = Registry::getInstance(Registry::REGISTRY_TYPE_ORDER);
$registry->set(Registry::ENTITY_ORDER, \MyOrder::class);
$orderClassName = $registry->getOrderClassName();
$order = $orderClassName::load($orderId);
$order->getMyData(); // работает

То все работает. Но мне бы хотелось обойтись без этого \Bitrix\Sale\Registry.

\Bitrix\Sale\Registry

Этот способ помогает не ошибиться в названии нужного метода при работе с сущностями интернет-магазина в редакции, объединяющей интернет-магазин и CRM (например, «1С-Битрикс24: Интернет-магазин+CRM»).

Примечание: если в таких редакциях использовать классы обычного интернет-магазина, то могут возникнуть проблемы с работой функционала, специфичного для CRM (например, с работой роботов).

Может кто-нибудь знает как мне расширить класс Заказа Битрикс без использования Реестра?


Ответы (0 шт):