dsheiko / extras
Collection of chainable high-order functions to abstract and manipulate PHP types
Installs: 3 412
Dependents: 0
Suggesters: 0
Security: 0
Stars: 8
Watchers: 3
Forks: 3
Open Issues: 0
pkg:composer/dsheiko/extras
Requires
- php: >=7.0.0
Requires (Dev)
- apigen/apigen: dev-master
- peridot-php/leo: ^1.6
- peridot-php/peridot: ^1.19
- peridot-php/peridot-code-coverage-reporters: ^3.0
- roave/better-reflection: dev-master#c87d856
- squizlabs/php_codesniffer: ^3.1
This package is not auto-updated.
Last update: 2025-10-26 10:21:30 UTC
README
The extras repository is a collection of chainable, high-order utility functions designed to extend PHP's type manipulation capabilities, offering a JavaScript-style development experience. It introduces methods inspired by JavaScript's array manipulation functions, such as map, filter, and reduce, while improving PHP's method naming conventions and consistency. This package supports diverse PHP types, including arrays, objects, and functions, while providing a fluent, chainable interface to work with data structures efficiently. It helps developers apply JavaScript-like syntax and methods to PHP with performance optimizations.
The packages takes its name from
Array Extrasreferring to the array methods added in ES5 (JavaScript) to abstract generic array manipulation logic
Installation
Require as a composer dependency:
composer require "dsheiko/extras"
Highlights
- Fixing PHP:
- Naming convention: all methods are
camelCasestyles vs PHP built-in functions inlower_case - Consistent parameter order (
Chain::chain($target)->method(...$options)or<Type>::method($target, ...$options)) - Methods are chainable
- Data structure
PlainObjectsimilar to JavaScript plain object - Manipulation target (value) can always be as reference as well as type literal
- Naming convention: all methods are
- Familiar syntax: JavaScript methods, in addition methods of Underscore.js/Lodash
- Performance: package relies on PHP native methods; no
foreachwhere a built-in specific function can be used
Sets
Download
Overview
Examples
None-reference target
<?php use \Dsheiko\Extras\Arrays; function numToArray(int $num): array { return [$num]; } $res = Arrays::map(range(1,3), "numToArray"); // [[1],[2],[3]]
Chaining methods
<?php use \Dsheiko\Extras\Any; $res = Any::chain(new \ArrayObject([1,2,3])) ->toArray() // value is [1,2,3] ->map(function($num){ return [ "num" => $num ]; }) // value is [[ "num" => 1, ..]] ->reduce(function($carry, $arr){ $carry .= $arr["num"]; return $carry; }, "") // value is "123" ->replace("/2/", "") // value is "13" ->then(function($value){ if (empty($value)) { throw new \Exception("Empty value"); } return $value; }) ->value(); echo $res; // "13"
Accessing methods directly
<?php use \Dsheiko\Extras\Arrays; class Foo { public $bar = "BAR"; } $arr = Arrays::from(new Foo); // ["bar" => "BAR"]
Plain object
<?php use \Dsheiko\Extras\Arrays; $po = Arrays::object(["foo" => "FOO", "bar" => ["baz" => "BAZ"]]); echo $po->foo; // FOO echo $po->bar->baz; // BAZ var_dump($po->bar->entries()); // [["baz", "BAZ"]]
