ataccama / utils-php
5.0.4
2023-11-07 14:20 UTC
Requires
- php: >= 8.2
- nette/caching: >= 3.0
- nette/utils: >= 3.0
Requires (Dev)
- nette/tester: >= 2.4
This package is auto-updated.
Last update: 2024-05-23 11:11:54 UTC
README
一系列有用的类、接口和特性。
- 电子邮件(提供电子邮件域名)
- 人名,姓名(自动分离姓氏和名字)
- Comparator + 接口 Comparable
- Sorter(使用我们的 Comparable 接口)
- Messenger, Message
- Pair, Array
- 缓存数据存储(适用于复杂仓库)
- 接口 Databaseable
- 简单的 Cron(可定义任务的队列)
使用
这是对本捆绑包中包含的一些功能的介绍。
Databaseable
此接口用于准备数据以便保存到数据库中。
class DatabaseEntity implements Databaseable {
/** @var int */
protected $id;
public function row(): array {
return [
"id" => $this->$id
];
}
}
缓存数据存储
如果您想提高系统性能,缓存可能是您可以选择的方法之一。使用非常简单。请看下面的示例。
示例
// your object
$object = new SerializableObject();
// init our data storage
$cache = new DataStorage(__DIR__ . "/../tmp");
// init unique key of your object for our storage
$key = new Key($object->id, "some_prefix_of_your_repository");
// save/replace data
$cache->add($key, $object);
// load data
$objectFromCache = $cache->get($key);
// and if your data have changed, just call 'notifyChange', it will be erase object from cache
$cache->notifyChange($key);
提示:在复杂仓库中非常有用,当某些数据依赖于其他数据时,您可以通过仅加载更改后的数据来加速整个系统。
依赖关系
这对于数据结构的多层次缓存非常有用。例如:假设您有一个名为 X 的数据对象,它由来自不同资源的小数据对象 A、B 和 C 组成。为了提高系统速度,为每个小对象 A、B 和 C 使用缓存并在这些小对象和大型对象 X 之间创建依赖关系(这些对象也会在缓存中)是一个好主意。这将导致,如果更改任何小对象,则只需重新加载该对象。之后,大型对象 X 将从缓存中的两个小对象创建,第三个(现在已重新加载)也将从缓存中创建。最终,大型对象 X 将再次存储在缓存中,直到任何小对象发生变化。
示例
// defining dependencies with IKey
$cache->createDependency($childKey, $parentKey);
$cache->createDependency($parentKey, $grandParentKey);
// automatic update of parent and grandparent when child changed
$cache->notifyChange($childKey)
由于子对象发生变化,所有依赖数据(子对象、父对象和外祖父母对象)都已变为无效并将被更新的数据版本覆盖。
Cron
这是一个用于创建任务队列的非常简单的 类
。您基本上可以创建一个包含任务定义的 run.php
文件并仅执行该文件。
示例
// OPTIONAL
// when you plan to use time-based tasks, you have to set a folder for persist files
Clock::setDataPath( __DIR__ . "/persistData/clocks" );
// creating a Cron
$cron = new Cron();
// class MyTask implements interface ITask or extends abstract class TimedTask
$cron->addTask( new MyTask() );
$cron->addTask( ... );
// executing
$cron->run();
// feedback
foreach ($cron->messenger as $message) {
echo $message->type . ": " . $message->text;
}