PHP中的DTO库提供了封装数据、强制不可变性和简化数据转换等好处。

v1.3.0 2024-09-29 14:12 UTC

This package is auto-updated.

Last update: 2024-09-29 14:12:56 UTC


README

在PHP中使用DTO库提供了封装数据、强制不可变性、验证数据、简化数据转换、维护API兼容性、减少耦合、提高代码可读性和简化测试等好处。

用法

最简单的方法是从 Traverse 类开始,这将为您带来最大的控制。

use MaplePHP\DTO\Traverse;

$obj = Traverse::value(["firstname" => "<em>daniel</em>", "lastname" => "doe", "slug" => "Lorem ipsum åäö", "price" => "1999.99", "date" => "2023-08-21 14:35:12", "feed" => [
		"t1" => ["firstname" => "<em>john 1</em>", "lastname" => "doe 1"],
		"t2" => ["firstname" => "<em>jane 2</em>", "lastname" => "doe 2"]
	]
]);

遍历数据

echo $obj->feed->t1->firstname;
// <em>john 1</em>

遍历源

foreach($obj->feed->fetch() as $row) {
	echo $row->firstname."<br>";
}
// <em>john 1</em>
// <em>jane 2</em>

处理器

您可以使用一些处理器来简化生活: Str, Uri, Num, DateTime, Arr, ...更多请参阅Format目录

遍历并修改字符串

echo $obj->feed->t1->firstname->strStripTags()->strUcFirst()
// Same as
// echo $obj->feed->t1->firstname->str()->stripTags()->ucFirst()
// Result: John 1
foreach($obj->feed()->fetch()->get() as $row) {
	echo $row->firstname->strStripTags()->strUcFirst()."<br>";
}
// John 1
// Jane 2

示例

echo $obj->firstname->strStripTags()->strUcFirst()."<br>";
// Daniel

echo $obj->price->numToFilesize()."<br>";
// 1.95 kb

echo $obj->price->numRound(2)->numCurrency("SEK", 2)."<br>";
// 1 999,99 kr

echo $obj->date("DateTime")->format("y/m/d, \k\l. H:i")."<br>";
// 23/08/21, kl. 14:35

工作原理

Traverse

当您将数组和对象数据传递给Traverse对象时,它将使您能够轻松地遍历数组/对象。然后,当您到达正确的位置时,可以使用处理器之一来修改数据。

use MaplePHP\DTO\Traverse;
$obj = Traverse::value([MIXED_DATA]);
$obj->arrayKey1()->arrayKey2("HANDLER")->modifyFunction1->modifyFunction2();

格式处理器

您还可以直接访问处理器来快速修改数据。

use MaplePHP\DTO\Format;

Format\Str::value([STRING]);
Format\Num::value([NUMBER]);
Format\Arr::value([ARRAY]);
Format\DateTime::value([STRING]);

示例

echo Format\Str::value("lorem")->ucfirst();
// Lorem