stolfam/utils-php8

PHP类,可能帮助并节省你的时间。

5.0.5 2024-05-23 10:22 UTC

This package is auto-updated.

Last update: 2024-09-23 11:04:15 UTC


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;
}