PHPackages                             gzhegow/ret - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. gzhegow/ret

ActiveLibrary

gzhegow/ret
===========

v1.0.1(today)03↑2900%MITPHPPHP ^7.3|^8.0

Since Aug 24Pushed todayCompare

[ Source](https://github.com/gzhegow1991/ret)[ Packagist](https://packagist.org/packages/gzhegow/ret)[ RSS](/packages/gzhegow-ret/feed)WikiDiscussions main Synced today

READMEChangelog (1)Dependencies (1)Versions (2)Used By (0)

Ret
===

[](#ret)

Про ошибки написано много, даже очень. Попытки говорить об этой теме заканчиваются на том, что это всё очень легко. Но как мы видим - разные языки, в которых "это легко" допускают грубейшие косяки, заставляя разработчиков плеваться и затыкая их потом нейросетями под плинтус.

Наилучшая концепция, которую мне удалось обсудить с другими разработчиками - концепция ReturnCode, которая изобретена ещё в далекие годы дедов, которые просто держали массивы вида КОД - СООБЩЕНИЕ. Для процессора это был сущий рай - он сравнивал два Integer между собой и знал что делать.

PHP пошел по другому пути. Пытаясь скопировать Java, были сделаны исключения, которые пришли на замену Warning. Разумеется, никто не собирал мнение завсегдатаев, решили обычным голосованием. Главный минус исключения - при его создании он копирует в оперативную память полный путь до функции. Вещь изумительно удобная, но очень дорогая. Как не пытались разработчики оптимизировать этот процесс - использование простых объектов ошибок все равно быстрее. Впрочем да, обычные ошибки не поймаешь через try/catch.

Представляю вам концепцию Result&lt;T,E&gt; на языке PHP. К нему идут допиленные исключения, ошибки, позволяющие их логировать и выводить наравне с ними, а также ErrorBag, чтобы удобно их накапливать и работать с потомками.

Для чего он нужен? Вы пишете одну функцию проверяющую тип и указываете текст ошибки. Потом из своего кода вы не пишете if/throw, а просто вызываете метод с пометкой orThrow() или orFallback(). Ваш метод отныне может и исключения бросать и одновременно быть проверялкой какого-нибудь типа.

Посмотрите тесты, будет что вспомнить.

Установить
----------

[](#установить)

```
composer require gzhegow/ret

```

Запустить тесты
---------------

[](#запустить-тесты)

```
php test.php

```

Примеры и тесты
---------------

[](#примеры-и-тесты)

```
