web-fu / php-dot-notation
Library that allows to access array and object with strong type support in Dot Notation
v1.2.0
2024-06-26 10:06 UTC
Requires
- php: 8.0.* || 8.1.* || 8.2.* || 8.3.*
- web-fu/reflection: ^2.3
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.13
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^5.4
This package is auto-updated.
Last update: 2024-06-26 10:07:15 UTC
README
PHP Dot Notation
A library that allows to access objects and arrays
Library that allows to access array and object with strong type support using Javascript-like Dot Notation
Examples
$array = [ 'foo' => [ 'bar' => 'test', ], ]; // Accessing an array $dot = new Dot($array); echo $dot->get('foo.bar'); //test // Setting a value in an array $dot->set('foo.bar', 'baz'); echo $array['foo']['bar']; //baz $class = new class() { public string $property = 'test'; public function method(): string { return 'foo'; } } // Accessing an object $dot = new Dot($class); echo $dot->get('property'); //test echo $dot->get('method()'); //foo // Setting a value in an object $dot->set('property', 'baz'); echo $class->property; //baz // Turning an object or an array into the dotified version of it $array = [ 'foo' => [ 'bar' => 'test', ], ]; $dotified = Dot::dotify($array); echo $dotified['foo.bar']; //test
Limitations and Warnings
This tool have some limitations:
Getting a method executes the method
$class = new class() { public function iDoSomething(): int { echo 'I Do Something '; return 0; } } $dot = new Dot($class); echo $dot->get('iDoSomething'); // I Do Something 0
It's not possible to discern if a method returns NULL or does not return at all
$class = new class() { public function thisMethodReturnsNull(): int|null { return null; } public function thisMethodDoesNotReturn(): void { //do something } } $dot = new Dot($class); var_dump($dot->get('thisMethodReturnsNull')); //NULL var_dump($dot->get('thisMethodDoesNotReturn')); //NULL
It's not possible setting a method
$class = new class() { public function method(): int { return 0; } } $dot = new Dot($class); $dot->set('method()', 20); //Unhandled Exception: WebFu\Proxy\UnsupportedOperationException Cannot set a class method