ehough / speedreader
强调性能的嵌套属性访问器
v1.0.0
2017-08-23 22:27 UTC
Requires
- php: ^5.3|^7.0
- webmozart/assert: ^1.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ~2.2.0
- phpunit/phpunit: ^4.0
This package is not auto-updated.
Last update: 2024-09-10 21:22:28 UTC
README
PHP 5.3+ 的嵌套属性选择器,侧重于性能。
SpeedReader 允许您使用点表示法(JMESPath 表达式和子表达式的子集)快速从数组、\ArrayAccess 实例、对象或其组合中读取值。您可以为不存在的属性或无法转换为所需类型的属性提供回退值。
安装
使用以下命令安装最新版本:
$ composer require ehough/speedreader
基本用法
SpeedReader 可以从任何混合的数组、\ArrayAccess 实例和对象中读取。
<?php use Hough\SpeedReader\SpeedReader; $arrayAccess = new \ArrayIterator(array( 'hello' => 'there', )); $object = new stdClass(); $object->foo = 99; $subject = array( 'foo' => array( 'bar' => array( 'int' => 123, 'float' => 456.7, 'bool' => true, 'object' => $object, 'array' => array('foo', 'bar'), 'string' => 'hello!', 'arrayAccess' => $arrayAccess, ), ), );
SpeedReader::getAsInteger()
获取给定路径处的值,将其转换为整数。如果没有提供回退值,将返回 0
。
SpeedReader::getAsInteger($subject, 'foo.bar.float'); /* int(456) */ SpeedReader::getAsInteger($subject, 'foo.bar.float', 99); /* int(456) */ SpeedReader::getAsInteger($subject, 'not.found', 99); /* int(99) */ SpeedReader::getAsInteger($subject, 'not.found'); /* int(99) */ SpeedReader::getAsInteger($subject, 'foo.bar.object.foo'); /* int(99) */ SpeedReader::getAsInteger($subject, 'foo.bar.int'); /* int(123) */ SpeedReader::getAsInteger($subject, 'foo.bar.bool'); /* int(1) */ SpeedReader::getAsInteger($subject, 'foo.bar.object', 99); /* int(99) */ SpeedReader::getAsInteger($subject, 'foo.bar.array', 99); /* int(99) */ SpeedReader::getAsInteger($subject, 'foo.bar.string'); /* int(0) */ SpeedReader::getAsInteger($subject, 'foo.bar.arrayAccess', 99); /* int(99) */ SpeedReader::getAsInteger($subject, 'foo.bar.arrayAccess.hello'); /* int(0) */
SpeedReader::getAsString()
获取给定路径处的值,将其转换为字符串。如果没有提供回退值,将返回空字符串。
SpeedReader::getAsString($subject, 'foo.bar.float'); /* string(5) "456.7" */ SpeedReader::getAsString($subject, 'foo.bar.float', 'fallback'); /* string(5) "456.7" */ SpeedReader::getAsString($subject, 'not.found', 'fallback'); /* string(8) "fallback" */ SpeedReader::getAsString($subject, 'not.found'); /* string(0) "" */ SpeedReader::getAsString($subject, 'foo.bar.object.foo'); /* string(2) "99" */ SpeedReader::getAsString($subject, 'foo.bar.int'); /* string(3) "123" */ SpeedReader::getAsString($subject, 'foo.bar.bool'); /* string(1) "1" */ SpeedReader::getAsString($subject, 'foo.bar.object', 'fallback'); /* string(8) "fallback" */ SpeedReader::getAsString($subject, 'foo.bar.array', 'fallback'); /* string(8) "fallback" */ SpeedReader::getAsString($subject, 'foo.bar.string'); /* string(6) "hello!" */ SpeedReader::getAsString($subject, 'foo.bar.arrayAccess', 'fallback'); /* string(8) "fallback" */ SpeedReader::getAsString($subject, 'foo.bar.arrayAccess.hello'); /* string(5) "there" */
SpeedReader::getAsFloat()
获取给定路径处的值,将其转换为浮点数。如果没有提供回退值,将返回 0.0
。
SpeedReader::getAsFloat($subject, 'foo.bar.float'); /* double(456.7) */ SpeedReader::getAsFloat($subject, 'foo.bar.float', 99.9); /* double(456.7) */ SpeedReader::getAsFloat($subject, 'not.found', 99.9); /* double(99.9) */ SpeedReader::getAsFloat($subject, 'not.found'); /* double(0) */ SpeedReader::getAsFloat($subject, 'foo.bar.object.foo'); /* double(99) */ SpeedReader::getAsFloat($subject, 'foo.bar.int'); /* double(123) */ SpeedReader::getAsFloat($subject, 'foo.bar.bool'); /* double(1) */ SpeedReader::getAsFloat($subject, 'foo.bar.object', 99.9); /* double(99.9) */ SpeedReader::getAsFloat($subject, 'foo.bar.array', 99.9); /* double(99.9) */ SpeedReader::getAsFloat($subject, 'foo.bar.string'); /* double(0) */ SpeedReader::getAsFloat($subject, 'foo.bar.arrayAccess', 99.9); /* double(99.9) */ SpeedReader::getAsFloat($subject, 'foo.bar.arrayAccess.hello'); /* double(0) */
SpeedReader::getAsBoolean()
获取给定路径处的值,将其转换为布尔值。如果没有提供回退值,将返回 false
。
SpeedReader::getAsBoolean($subject, 'foo.bar.float'); /* bool(true) */ SpeedReader::getAsBoolean($subject, 'foo.bar.float', true); /* bool(true) */ SpeedReader::getAsBoolean($subject, 'not.found', true); /* bool(true) */ SpeedReader::getAsBoolean($subject, 'not.found'); /* bool(false) */ SpeedReader::getAsBoolean($subject, 'foo.bar.object.foo'); /* bool(true) */ SpeedReader::getAsBoolean($subject, 'foo.bar.int'); /* bool(true) */ SpeedReader::getAsBoolean($subject, 'foo.bar.bool'); /* bool(true) */ SpeedReader::getAsBoolean($subject, 'foo.bar.object', true); /* bool(true) */ SpeedReader::getAsBoolean($subject, 'foo.bar.array', true); /* bool(true) */ SpeedReader::getAsBoolean($subject, 'foo.bar.string'); /* bool(true) */ SpeedReader::getAsBoolean($subject, 'foo.bar.arrayAccess', true); /* bool(true) */ SpeedReader::getAsBoolean($subject, 'foo.bar.arrayAccess.hello'); /* bool(true) */
SpeedReader::getAsArray()
获取给定路径处的值,将其转换为数组。如果没有提供回退值,将返回空数组。
SpeedReader::getAsArray($subject, 'foo.bar.float'); /* array(0) {} */ SpeedReader::getAsArray($subject, 'foo.bar.float', array('foobar')); /* array(1) { [0] => string(6) "foobar" } */ SpeedReader::getAsArray($subject, 'not.found', array('foobar')); /* array(1) { [0] => string(6) "foobar" } */ SpeedReader::getAsArray($subject, 'not.found'); /* array(0) {} */ SpeedReader::getAsArray($subject, 'foo.bar.object.foo'); /* array(0) {} */ SpeedReader::getAsArray($subject, 'foo.bar.int'); /* array(0) {} */ SpeedReader::getAsArray($subject, 'foo.bar.bool'); /* array(0) {} */ SpeedReader::getAsArray($subject, 'foo.bar.object', array('foobar')); /* array(1) { [0] => string(6) "foobar" } */ SpeedReader::getAsArray($subject, 'foo.bar.array', array('foobar')); /* array(2) { [0] => string(3) "foo" [1] => string(3) "bar" } */ SpeedReader::getAsArray($subject, 'foo.bar.string'); /* array(0) {} */ SpeedReader::getAsArray($subject, 'foo.bar.arrayAccess', array('foobar')); /* array(1) { [0] => string(6) "foobar" } */ SpeedReader::getAsArray($subject, 'foo.bar.arrayAccess.hello'); /* array(0) {} */
SpeedReader::get()
获取给定路径处的值。如果没有提供回退值,将返回 null
。
SpeedReader::get($subject, 'foo.bar.float'); /* double(456.7) */ SpeedReader::get($subject, 'foo.bar.float', 567.8); /* double(456.7) */ SpeedReader::get($subject, 'not.found', 'foobar'); /* string(6) "foobar" */ SpeedReader::get($subject, 'not.found'); /* NULL */ SpeedReader::get($subject, 'foo.bar.object.foo'); /* int(99) */ SpeedReader::get($subject, 'foo.bar.int'); /* int(123) */ SpeedReader::get($subject, 'foo.bar.bool'); /* array(1) { [0] => string(6) "foobar" } */ SpeedReader::get($subject, 'foo.bar.object', null); /* class stdClass#2 (1) { public $foo => int(99) } */ SpeedReader::get($subject, 'foo.bar.array', array('foobar')); /* array(2) { [0] => string(3) "foo" [1] => string(3) "bar" } */ SpeedReader::get($subject, 'foo.bar.string'); /* string(6) "hello!" */ SpeedReader::get($subject, 'foo.bar.arrayAccess', null); /* class ArrayIterator#3 (1) { ... */ SpeedReader::get($subject, 'foo.bar.arrayAccess.hello'); /* string(5) "there" */
SpeedReader::has()
确定主题是否在给定路径处包含值(包括 null
)。
SpeedReader::has($subject, 'foo.bar.float'); /* bool(true) */ SpeedReader::has($subject, 'foo.bar.float'); /* bool(true) */ SpeedReader::has($subject, 'not.found'); /* bool(false) */ SpeedReader::has($subject, 'foo.bar.object.foo'); /* bool(true) */ SpeedReader::has($subject, 'foo.bar.int'); /* bool(true) */ SpeedReader::has($subject, 'foo.bar.bool'); /* bool(true) */ SpeedReader::has($subject, 'foo.bar.object'); /* bool(true) */ SpeedReader::has($subject, 'foo.bar.array'); /* bool(true) */ SpeedReader::has($subject, 'foo.bar.string'); /* bool(true) */ SpeedReader::has($subject, 'foo.bar.arrayAccess'); /* bool(true) */ SpeedReader::has($subject, 'foo.bar.arrayAccess.hello'); /* bool(true) */
关于
需求
SpeedReader 与 PHP 5.3 及以上版本兼容。
许可
SpeedReader 采用 Mozilla 公共许可证 2.0 许可。有关详细信息,请参阅 LICENSE
文件。