Collection of chainable high-order functions to abstract and manipulate PHP types. The library extends PHP types with JavaScript and Underscore.js methods
The packages takes its name from
Array Extras
referring to the array methods added in ES5 (JavaScript) to abstract generic array manipulation logic
Require as a composer dependency:
composer require "dsheiko/extras"
- Fixing PHP:
- Naming convention: all methods are
camelCase
styles 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
PlainObject
similar 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
foreach
where a built-in specific function can be used
<?php
use \Dsheiko\Extras\Arrays;
function numToArray(int $num): array
{
return [$num];
}
$res = Arrays::map(range(1,3), "numToArray"); // [[1],[2],[3]]
<?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"
<?php
use \Dsheiko\Extras\Arrays;
class Foo
{
public $bar = "BAR";
}
$arr = Arrays::from(new Foo); // ["bar" => "BAR"]
<?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"]]