ride / lib-reflection
Ride框架的反射辅助库
1.2.0
2024-06-26 09:02 UTC
README
Ride PHP框架的反射辅助库。
此库包含的内容
布尔值
从各种字符串格式获取布尔值的辅助函数
<?php use ride\library\reflection\Boolean; $bool = Boolean::getBoolean('yes'); // true $bool = Boolean::getBoolean('off'); // false
调用者
用于调用动态回调的接口。例如,可以由事件管理器、控制器分发器等使用。
ReflectionHelper 类实现了此接口,以提供开箱即用的通用实现。
ReflectionHelper
反射辅助库提供了一种易于使用的接口,用于动态编程
- 它以命名的数组形式获取任何回调的参数
- 它使用命名的参数创建对象或数据容器。
- 它从和到通用数据容器获取和设置值。这些数据容器可以是数组或对象实例。
请查看以下代码示例
<?php use ride\library\reflection\ReflectionHelper; $reflectionHelper = new ReflectionHelper(); // create an object $date = $reflectionHelper->createObject('DateTime', array('time' => '6 July 1983')); // create an object for a specific interface $decorator = $reflectionHelper->createObject('ride\\library\\reflection\\ReflectionHelper', null, 'ride\\library\\reflection\\Invoker'); // get and set properties $data = array(); $reflectionHelper->setProperty($data, 'property', '1'); $reflectionHelper->setProperty($data, 'sub[property]', '2'); // $data = array( // 'property' => '1' // 'sub' => array( // 'property' => '2', // ), // ); $result = $reflectionHelper->getProperty($data, 'property'); // 1 $result = $reflectionHelper->getProperty($data, 'sub[property]'); // 2 $result = $reflectionHelper->getProperty($data, 'sub[unexistant]'); // null $result = $reflectionHelper->getProperty($data, 'sub[unexistant]', 'default'); // default // what if we work with objects $data = new DateTime(); // will call $data->setTimestamp('value'); $reflectionHelper->setProperty($data, 'timestamp', time()); // will set $data->unexistant to 'value' $reflectionHelper->setProperty($data, 'unexistant', 'value'); // will check $data->getUnexistant2() and $data->unexistant2 before return 'default' $result = $reflectionHelper->getProperty($data, 'unexistant2', 'default'); // retrieve callback arguments $arguments = $reflectionHelper->getArguments('strpos'); $arguments = $reflectionHelper->getArguments('safeString', 'ride\library\String'); $arguments = $reflectionHelper->getArguments('safeString', new ride\library\String()); $arguments = $reflectionHelper->getArguments(array($data, 'safeString'); // $arguments = array( // 'replacement' => ReflectionParameter[...], // 'lower' => ReflectionParameter[...], // ); // invoke a callback $callback = array($reflectionHelper, 'createObject'); $arguments = array( 'arguments' => array('time' => 'now'), 'class' => 'DateTime', ); $date = $reflectionHelper->invoke($callback, $arguments);
排序器
实现同时根据不同属性对数组或对象数据容器进行排序。
<?php
use ride\library\reflection\ReflectionHelper;
use ride\library\reflection\Sorter;
// generate some data containers
$entry1 = array(
'name' => 'John',
'age' => 21,
);
$entry2 = array(
'name' => 'Jane',
'age' => 18,
);
$entry3 = array(
'name' => 'Mark',
'age' => 30,
);
$entry4 = array(
'name' => 'Tom',
'age' => 21,
);
$entries = array(
$entry1,
$entry2,
$entry3,
$entry4,
);
// create a sorter age ASC, name ASC
$sorter = new Sorter(new ReflectionHelper(), array('age' => true, 'name' => true));
// sort the entries
print_r($sorter->sort($entries));
/*
array(
1 => array(
'name' => 'Jane',
'age' => 18,
),
0 => array(
'name' => 'John',
'age' => 21,
),
3 => array(
'name' => 'Tom',
'age' => 21,
),
2 => array(
'name' => 'Mark',
'age' => 30,
),
);
*/
安装
您可以使用 Composer 安装此库。
composer require ride/lib-reflection