samueldmonteiro / result-type
Result Type for PHP
1.1.0
2025-01-10 00:52 UTC
Requires
- php: >=8.2.0
README
The result-type library introduces the Result Pattern to PHP, inspired by languages like Rust and Go. It provides a structured way to handle success and error outcomes explicitly, reducing reliance on exceptions. This approach makes your code more predictable, maintainable, and clear, ensuring every operation's result is properly managed.
A biblioteca result-type traz o padrão Result para o PHP, inspirada em linguagens como Rust e Go. Ela oferece uma maneira estruturada de lidar com sucessos e erros de forma explícita, reduzindo a dependência de exceções. Essa abordagem torna seu código mais previsível, manutenível e claro, garantindo que o resultado de cada operação seja devidamente tratado.
Installation
composer require samueldmonteiro/result-type
Documentation
Generics
Since PHP does not yet have native support for generics, we can solve this problem using dockblocks, to define what type of data is being returned when the operation is successful:
Como o PHP ainda não tem suporte nativo para generics, podemos resolver esse problema usando dockblocks para definir que tipo de dado será retornado quando a operação for bem-sucedida:
Ex:
/** * @return Result<float> */ function safeDivide(float $value): Result { return $value; }
Usage
Using Class Instance:
<?php use Samueldmonteiro\Result\Error; use Samueldmonteiro\Result\Result; use Samueldmonteiro\Result\Success; /** * @return Result<float> */ function safeDivide(float $a, float $b): Result { if ($b === 0.0) { // Return an error if division by zero return new Error('Division by zero is not allowed.'); } return new Success($a / $b, 'Division successful.'); } // Example usage $result = safeDivide(10, 2); if ($result->isSuccess()) { echo $result->getMessage() . PHP_EOL; echo "Result: " . $result->getValue() . PHP_EOL; } else { echo "Error: " . $result->getErrorMessage() . PHP_EOL; }
Using Static Methods:
/** * @return Result<float> */ function safeDivide(float $a, float $b): Result { if ($b === 0.0) { return Result::error('Division by zero is not allowed.'); } return Result::success(($a / $b, 'Division successful.'); }
Other Methods:
<?php use Samueldmonteiro\Result\Success; $result = New Error('error in application', 500, 'SERVER_ERROR'); if (!$result->isError()) { echo $result->getMessage() . PHP_EOL; echo "Result: " . $result->getValue() . PHP_EOL; } else { echo "Error: " . $result->getErrorMessage() . PHP_EOL; echo "Error Code: " . $result->getErrorCode() . PHP_EOL; echo "Error Type: " . $result->getErrorType() . PHP_EOL; }
Credits
- Samuel Monteiro (Developer)
- All Contributors
License
The MIT License (MIT). Please see License File for more information.