josécelano / php-object-literal
用于创建PHP对象字面量的工厂类
dev-master
2017-03-24 23:28 UTC
Requires
- php: >=5.5
Requires (Dev)
- phpunit/phpunit: ^4.5
This package is auto-updated.
Last update: 2024-09-29 04:53:28 UTC
README
PHP 5.5+ 库,用于创建类似于JavaScript或Ruby的对象字面量。
在PHP中创建对象字面量不像在JavaScript或Ruby中那样简单(或优雅)。
你可以这样创建对象字面量
$object = new Object([ "name" => "Fido", "barks" => true, "age" => 10 ]);
或者
$object = new Object([ "name" => "Fido", "barks" => true, "age" => 10, 'say' => function ($self) { if ($self->barks) { return "Woof"; } return ""; } ]);
或者
$object = new Object('{ "name" : "Fido", "barks" : true, "age" : 10 }');
代替
$object = new Object(); $object->name = 'Fido'; $object->barks = true; $object->age = 10;
这个类受到了以下两篇博客文章的启发
- https://www.sitepoint.com/php-vs-ruby-lets-all-just-get-along/
- https://www.phpied.com/javascript-style-object-literals-in-php/
实际上,有一个旧的PHP RFC(2011-06-04)尚未完全实现
当RFC未实现时,可以使用此类。
安装
通过Composer
$ composer require josecelano/php-object-literal
特性
- 从数组构建。
- 从JSON构建。
- 从具有动态键和值的JSON构建。
测试
我尽量遵循TDD,因此我使用phpunit来测试这个库。
$ composer test
待办事项
- 添加魔法获取器和设置器。
- 允许在Json中替换变量值,类似于JavaScript:
$object = new Object("{ \"name\" : \"" . $valueForName . "\", \"barks\" : true, \"age\" : 10 }");
从
$object = new Object('{ "name" : $valueForName, "barks" : true, "age" : 10 }', get_defined_vars());
将$valueForName
替换为其值。
- 允许当前无效的PHP json格式。
$invalidJson1 = "{ 'bar': 'baz' }"; $invalidJson2 = '{ bar: "baz" }'; $invalidJson3 = '{ bar: "baz", }';
- 在JSON格式中添加可调用类型。
- 允许使用类似于ES6的属性值简写
$object = new Object('{ $name, $barks, $age }', get_defined_vars());
许可协议
MIT许可(MIT)。请参阅许可文件以获取更多信息。