stolfam / utils-php8
PHP类,可能帮助并节省你的时间。
5.0.5
2024-05-23 10:22 UTC
Requires
- php: >= 8.2
- nette/caching: >= 3.0
- nette/utils: >= 3.0
Requires (Dev)
- nette/tester: >= 2.4
README
一系列有用的类、接口、特质。
- 电子邮件(提供电子邮件域名)
- 个人,姓名(自动分隔首名和姓氏)
- 比较器 + 接口Comparable
- 排序器(使用我们的Comparable接口)
- 信使,消息
- 对,数组
- 缓存数据存储(对复杂存储库很有用)
- 接口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将从两个缓存的小对象和第三个(现在重新加载的)对象创建。最后,大的对象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;
}