maplephp / dto
PHP中的DTO库提供了封装数据、强制不可变性和简化数据转换等好处。
v1.3.0
2024-09-29 14:12 UTC
Requires
- php: >=8.0
- maplephp/swiftrender: ^1.0
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