sebvie / php-object-history
记录PHP对象的更改并在csv文件中显示
v1.0.1
2019-11-14 13:57 UTC
Requires
- php: >=7.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-15 00:25:33 UTC
README
php-object-history
该包记录PHP对象的更改并将其持久化到存储中。如果你有一系列数据,只想获取更改集以减少内存使用,这非常有用。
安装
composer require sebvie/php-object-history
示例
初始化存储和比较器
use PhpObjectHistory\Comparer\ObjectComparer;
use PhpObjectHistory\Storage\CsvFileStorage;
use PhpObjectHistory\ObjectHistory;
$storage = new CsvFileStorage();
$storage->setCsvFilePath($filePath);
$objectComparer = new ObjectComparer();
$objectHistory = new ObjectHistory(
$storage,
$objectComparer
);
添加对象
$object = new \stdClass();
$object->testProperty = 1;
$object->testPropertyUnchanged = true;
$objectHistory->addObject($object);
$object = new \stdClass();
$object->testProperty = 2;
$object->testPropertyUnchanged = true;
$objectHistory->addObject($object);
结果是包含以下内容的csv文件
testProperty,testPropertyUnchanged
1;true
2
自定义格式化程序
你可以添加自定义格式化程序以简化对象
use PhpObjectHistory\Formatter\ObjectFormatterInterface
class ToStringFormatter implements ObjectFormatterInterface
{
/**
* @param object $object
* @return string
*/
public function format(object $object): string
{
return $object->__toString();
}
/**
* @param object $object
* @return bool
*/
public function supports(object $object): bool
{
return method_exists($object, '__toString');
}
}
添加格式化程序
$formatter = new CustomFormatter();
$storage = new CsvFileStorage();
$storage->setCsvFilePath($filePath);
$storage->getObjectFormatterHandler()->addFormatter($formatter);
$objectComparer = new ObjectComparer();
$objectComparer->getObjectFormatterHandler()->addFormatter($formatter);
实现自定义存储
use PhpObjectHistory\Entity\ObjectChange;
class InMemoryStorage implements StorageInterface
{
/**
* @var array
*/
protected $result = [];
/**
* @param object $object
*/
public function setInitialObject(object $object): void
{
$this->result[] = $object;
}
/**
* @param ObjectChange[] $objectChanges
*/
public function addObjectChanges(array $objectChanges): void
{
if (empty($objectChanges)) {
return;
}
$this->result[] = $objectChanges;
}
/**
* @return array
*/
public function getResult(): array
{
return $this->result;
}
}
可用存储
- CsvFileStorage
- InMemoryStorage
可用格式化程序
- DatetimeFormatter
- ToStringFormatter
忽略对象属性
你可以忽略某些属性的更改。这不会触发对象更改。
当你有像时间戳这样的属性始终变化但可以忽略时,这很有用。
$ignoreAttributes = ['boolProperty'];
$objectComparer = new ObjectComparer();
$objectComparer->setIgnoreAttributes($ignoreAttributes);