manychois / php-strong
A utility library for PHP to help you write strong-typed code.
Requires
- php: >=8.5
- psr/clock: ^1
- psr/container: ^2.0.2
- psr/http-factory: ^1.1
- psr/http-message: ^2.0
Requires (Dev)
- phpstan/extension-installer: ^1.4.3
- phpstan/phpstan: ^2.1.46
- phpstan/phpstan-phpunit: ^2.0.16
- phpstan/phpstan-strict-rules: ^2.0.10
- phpunit/phpunit: ^12.5.15 || ^13.0.0
- slevomat/coding-standard: ^8.22.1
- squizlabs/php_codesniffer: ^3.13.5
This package is auto-updated.
Last update: 2026-04-07 11:35:21 UTC
README
php-strong is a small PHP library that adds typed boundaries around places PHP is usually loose: nested arrays, the DI container, native sessions, and string matching. It does not replace the language type system; it gives you explicit, predictable APIs so invalid shapes fail at the edge (when you read a value or resolve a service) instead of far down the call stack.
It targets PHP 8.5+, uses the Manychois\PhpStrong namespace with PSR-4 autoloading, and integrates with PSR-7 (HTTP messages), PSR-17 (HTTP factories), PSR-11 (containers), and PSR-20 (clock) where relevant.
What’s in the box
-
Collections — Lazy and eager sequences (
LazySequence), mutable lists (ArrayList), readonly list views (ReadonlyList), maps with typed keys (StringMap,IntMap,ObjectMap, and readonly variants), plus shared sequence/list interfaces and comparers for ordering. Suited to application code that wants clear generics-friendly collection APIs. -
Typed array and object reading —
ArrayReader(andArrayReaderInterface) walk dot-separated paths and expose readers such asasInt,bool,string,object, andinstanceOfso nested structures are validated when accessed. -
PSR-11 container —
StrongContainerInterfaceandStrongContainerWrapperwrap anyPsr\Container\ContainerInterfaceand addgetObject($id, $class)so resolved services are checked against an expected class or interface. -
Web— PSR-7 value objects:OutRequest,InRequest,Response,Stream,Uri, andUploadedFile, plusMethodandStatusCodeenums. PSR-17 factories:RequestFactory(requests and server requests),ResponseFactory,StreamFactory,UploadedFileFactory, andUriFactory. Sessions:PhpSession/PhpSessionInterfaceexpose$_SESSIONwith the same path-style, validated access asArrayReader, plus lifecycle helpers. -
Time —
UtcClockimplements PSR-20’s clock in UTC, with support for deterministic tests (e.g. frozen instants). -
Text —
Regex,MatchResult,Capture, andUtf8Stringoffer an object-oriented, exception-oriented approach to pattern matching and UTF-8 strings; small helpers likeStringSideand value types such asDayOfWeeklive alongside them.
Why use it?
If you like C#- or Java-style rigor at API boundaries—without fighting PHP’s arrays and superglobals—php-strong narrows mixed early: fewer surprises in business logic and better alignment with static analysis (e.g. PHPStan) on downstream code.
Installation
composer require manychois/php-strong