2017 © Pedro Peláez
 

library exception

The Hoa\Exception library.

image

hoa/exception

The Hoa\Exception library.

  • Tuesday, January 23, 2018
  • by Hoa
  • Repository
  • 4 Watchers
  • 22 Stars
  • 434,960 Installations
  • PHP
  • 50 Dependents
  • 0 Suggesters
  • 7 Forks
  • 2 Open issues
  • 6 Versions
  • 14 % Grown

The README.md

Hoa , (*1)


Build status Code coverage Packagist License , (*2)

Hoa is a modular, extensible and structured set of PHP libraries.
Moreover, Hoa aims at being a bridge between industrial and research worlds. , (*3)

Hoa\Exception

Help on IRC Help on Gitter Documentation Board, (*4)

This library allows to use advanced exceptions. It provides generic exceptions (that are sent over the hoa://Event/Exception event channel), idle exceptions (that are not sent over an event channel), uncaught exception handlers, errors to exceptions handler and group of exceptions (with transactions)., (*5)

Learn more., (*6)

Installation

With Composer, to include this library into your dependencies, you need to require hoa/exception:, (*7)

$ composer require hoa/exception '~2.0'

For more installation procedures, please read the Source page., (*8)

Testing

Before running the test suites, the development dependencies must be installed:, (*9)

$ composer install

Then, to run all the test suites:, (*10)

$ vendor/bin/hoa test:run

For more information, please read the contributor guide., (*11)

Quick usage

We propose a quick overview of how to use generic exceptions, how to listen all thrown exceptions through events and how to use group of exceptions., (*12)

Generic exceptions

An exception is constitued of: * A message, * A code (optional), * A list of arguments for the message (à la printf, optional), * A previous exception (optional)., (*13)

Thus, the following example builds an exception:, (*14)

$exception = new Hoa\Exception\Exception('Hello %s!', 0, 'world');

The exception message will be: Hello world!. The “raise” message (with all information, not only the message) is:, (*15)

{main}: (0) Hello world!
in … at line ….

Previous exceptions are shown too, for instance:, (*16)

$previous  = new Hoa\Exception\Exception('Hello previous.');
$exception = new Hoa\Exception\Exception('Hello %s!', 0, 'world', $previous);

echo $exception->raise(true);

/**
 * Will output:
 *     {main}: (0) Hello world!
 *     in … at line ….
 *     
 *         ⬇
 *     
 *     Nested exception (Hoa\Exception\Exception):
 *     {main}: (0) Hello previous.
 *     in … at line ….
 */

Listen exceptions through events

Most exceptions in Hoa extend Hoa\Exception\Exception, which fire themselves on the hoa://Event/Exception event channel (please, see the Hoa\Event library). Consequently, we can listen for all exceptions that are thrown in the application by writing:, (*17)

Hoa\Event\Event::getEvent('hoa://Event/Exception')->attach(
    function (Hoa\Event\Bucket $bucket) {
        $exception = $bucket->getData();
        // …
    }
);

Only the Hoa\Exception\Idle exceptions are not fired on the channel event., (*18)

Group and transactions

Groups of exceptions are represented by the Hoa\Exception\Group. A group is an exception that contains one or many exceptions. A transactional API is provided to add more exceptions in the group with the following methods: * beginTransaction to start a transaction, * rollbackTransaction to remove all newly added exceptions since beginTransaction call, * commitTransaction to merge all newly added exceptions in the previous transaction, * hasUncommittedExceptions to check whether they are pending exceptions or not., (*19)

For instance, if an exceptional behavior is due to several reasons, a group of exceptions can be thrown instead of one exception. Group can be nested too, which is useful to represent a tree of exceptions. Thus:, (*20)

// A group of exceptions.
$group           = new Hoa\Exception\Group('Failed because of several reasons.');
$group['first']  = new Hoa\Exception\Exception('First reason');
$group['second'] = new Hoa\Exception\Exception('Second reason');

// Can nest another group.
$group['third']           = new Hoa\Exception\Group('Third reason');
$group['third']['fourth'] = new Hoa\Exception\Exception('Fourth reason');

echo $group->raise(true);

/**
 * Will output:
 *     {main}: (0) Failed because of several reasons.
 *     in … at line ….
 *     
 *     Contains the following exceptions:
 *     
 *       • {main}: (0) First reason
 *         in … at line ….
 *     
 *       • {main}: (0) Second reason
 *         in … at line ….
 *     
 *       • {main}: (0) Third reason
 *         in … at line ….
 *         
 *         Contains the following exceptions:
 *         
 *           • {main}: (0) Fourth reason
 *             in … at line ….
 */

The following example uses a transaction to add new exceptions in the group:, (*21)

$group   = new Hoa\Exception\Group('Failed because of several reasons.');
$group[] = new Hoa\Exception\Exception('Always present.');

$group->beginTransaction();

$group[] = new Hoa\Exception\Exception('Might be present.');

if (true === $condition) {
    $group->commitTransaction();
} else {
    $group->rollbackTransaction();
}

Documentation

The hack book of Hoa\Exception contains detailed information about how to use this library and how it works., (*22)

To generate the documentation locally, execute the following commands:, (*23)

$ composer require --dev hoa/devtools
$ vendor/bin/hoa devtools:documentation --open

More documentation can be found on the project's website: hoa-project.net., (*24)

Getting help

There are mainly two ways to get help:, (*25)

Contribution

Do you want to contribute? Thanks! A detailed contributor guide explains everything you need to know., (*26)

License

Hoa is under the New BSD License (BSD-3-Clause). Please, see LICENSE for details., (*27)

The Versions

23/01 2018

dev-master

9999999-dev https://hoa-project.net/

The Hoa\Exception library.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

library exception

30/08 2017

2.17.08.30

2.17.08.30 https://hoa-project.net/

The Hoa\Exception library.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

library exception

16/01 2017

1.17.01.16

1.17.01.16 https://hoa-project.net/

The Hoa\Exception library.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

library exception

08/11 2016

1.16.11.08

1.16.11.08 https://hoa-project.net/

The Hoa\Exception library.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

library exception

11/01 2016

1.16.01.11

1.16.01.11 http://hoa-project.net/

The Hoa\Exception library.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

library exception

23/11 2015

0.15.11.23

0.15.11.23 http://hoa-project.net/

The Hoa\Exception library.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

library exception