ataccama/utils-php

该包已被 废弃 且不再维护。作者建议使用 stolfam/utils-php8 包。

PHP 类,可能有助于节省您的宝贵时间。

5.0.4 2023-11-07 14:20 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;
}