ali-eltaweel / expandr
There is no license information available for the latest version (1.0.1) of this package.
Shell-style Parameters Expansion
1.0.1
2026-02-28 06:42 UTC
Requires
- php: ^8.2
This package is auto-updated.
Last update: 2026-02-28 06:43:12 UTC
README
Shell-style Parameters Expansion
Installation
composer require ali-eltaweel/expandr
Usage
$expandr = new Expandr\Expandr([ 'name' => 'User' ]); echo $expandr->processLine('Hello ${name}'); // Hello User
Substitution
$expandr = new Expandr\Expandr([ 'x' => 'x_x_x' ]); echo $expandr->processLine('${x/x/|}'); // |_x_x (replace first) echo $expandr->processLine('${x//x/|}'); // |_|_| (replace all)
Slicing
$expandr = new Expandr\Expandr([ 'chars' => 'abcdefgh' ]); echo $expandr->processLine('${chars:0:4}'); // abcd echo $expandr->processLine('${chars:2}'); // cdefgh echo $expandr->processLine('${chars:-2}'); // gh
Right Trim
$expandr = new Expandr\Expandr([ 'path' => 'path/to/file.php' ]); echo $expandr->processLine('Filename: ${path%.php}'); // Filename: path/to/file
Left Trim
$expandr = new Expandr\Expandr([ 'path' => 'path/to/file.php' ]); echo $expandr->processLine('Filename: ${path##path/to/}'); // Filename: file.php
Case Transformation
$expandr = new Expandr\Expandr([ 'username' => 'user', 'USERNAME' => 'USER', ]); echo $expandr->processLine('Hello ${username^}'); // Hello User echo $expandr->processLine('Hello ${username^^}'); // Hello USER echo $expandr->processLine('Hello ${USERNAME,}'); // Hello uSER echo $expandr->processLine('Hello ${USERNAME,,}'); // Hello user
Indirection
$expandr = new Expandr\Expandr([ 'a' => 'b', 'b' => 'c', 'c' => 'd' ]); echo $expandr->processLine('${a}'); // b echo $expandr->processLine('${!a}'); // c echo $expandr->processLine('${!!a}'); // d // and so on...
Default
$expandr = new Expandr\Expandr([ 'a' => 'b' ]); echo $expandr->processLine('${a:+a is set}'), // a is set echo $expandr->processLine('${b:-b is not set}'), // b is not set echo $expandr->processLine('${b:?b is not set}'), // throws an error with message "b is not set"