数据传输对象(DTOS)是处理复杂数据结构的任何应用程序的重要组成部分。它们有助于封装数据,使操纵和传递代码库的不同部分之间更容易。但是,从头开始创建DTO可能是一个乏味而重复的过程,尤其是如果您有很多DTO可以创建。幸运的是,PHP对性状的支持可以帮助使过程变得更加容易,重复性更低。
在本文中,我们将详细介绍使用两个特征 - staticCreateSelf和Toarray创建Userdto类的示例,这些特征将有助于简化PHP应用程序中创建和使用DTO的过程。 P>
PHP中的特征是什么?
在我们深入研究示例之前,让我们快速查看PHP中的特征。特征是在不使用继承的情况下重复使用多个类中代码的一种方法。它们允许您定义可以在多个类中使用的方法,而无需创建每个类继承的父类。当您需要在没有自然父母关系的类之间共享功能时,这可能特别有用。
示例:创建具有特征的用户do
在此示例中,我们将使用两个特征创建一个用户DTO类:staticCreateSelf和Toarray。 staticCreateSelf性状将提供静态 create()_Method,可用于从一个值数组中创建新的UserDTO。 Toarray特质将提供_toArray()方法,该方法将将用户do对象转换为关联数组。
这是Userdto类的样子:
<?php
declare(strict_types=1);
namespace App\DTO;
use App\Shared\Traits\StaticCreateSelf;
use App\Shared\Traits\ToArray;
class UserDTO
{
use StaticCreateSelf;
use ToArray;
public int $id;
public string $name = '';
public string $email = '';
}
您可以看到,我们将Userdto类定义为具有三个公共属性: id , name 和 email 。我们还使用 use 关键字。
让我们首先仔细研究静态性特征。这里的外观:
<?php
declare(strict_types=1);
namespace App\Shared\Traits;
trait StaticCreateSelf
{
public static function create(array $values): self
{
$dto = new self();
foreach ($values as $key => $value) {
if (property_exists($dto, $key)) {
$dto->$key = $value;
}
}
return $dto;
}
}
staticCreateSelf性状提供了A create()方法,该方法采用了一个关联的值,并返回类的新实例(在这种情况下为userdto)。该方法使用 new self()表达式创建类的新实例。然后,它在值数组上迭代,并在类的新实例上设置相应的属性。
toarray特征更简单。这里的外观:
<?php
declare(strict_types=1);
namespace App\Shared\Traits;
trait ToArray
{
public function toArray(): array
{
return get_object_vars($this);
}
}
toarray性状提供了 toarray()方法,该方法返回对象的关联数组表示。它通过调用 get_object_vars()函数来完成此操作,该功能返回所有对象属性及其值的关联数组。
userdto 类
现在我们已经定义了必要的特征,我们可以使用它们来创建 userdto 类。 userdto 类将定义DTO的属性,并使用 toArray 和 staticCreateSelf 特征来提供必要的功能。这是 userdto 类的实现:
<?php
declare(strict_types=1);
namespace App\DTO;
use App\Shared\Traits\StaticCreateSelf;
use App\Shared\Traits\ToArray;
class UserDTO
{
use StaticCreateSelf;
use ToArray;
public int $id;
public string $name = '';
public string $email = '';
}
您可以看到, userdto 类使用 staticCreateSelf 和 toArray 特征来提供必要的功能。 DTO的属性定义为公共属性,可以根据需要访问和修改。
使用 userdto 类
现在我们已经创建了 userdto 类,我们可以使用它在应用程序的不同层之间传输数据。这是如何使用 userdto 类创建DTO的新实例并将其转换为数组的示例:
$userDTO = UserDTO::create([
'id' => 1,
'name' => 'John Doe',
'email' => 'john.doe@example.com',
]);
$userArray = $userDTO->toArray();
结论
dtos是改善代码中关注点并使您的应用程序更强大和可维护的有力工具。通过封装数据并使用DTO在不同层之间传输它,您可以确保您的应用程序不会与特定的数据结构紧密耦合,从而更容易随着时间的推移更改和发展。
此外,通过使用 toarray 和 staticCreateSelf 之类的特征,我们已经展示了如何编写易于使用和维护的清洁和可重复使用的DTO。这些特征可能是编写自己的DTO的好起点,使您能够利用PHP面向对象的功能的功能,并创建易于阅读,理解和修改的代码。
那么,为什么不尝试一下呢?开始在下一个项目中使用DTO,然后查看它们如何帮助您编写更好,更可维护的代码。您的未来自我(和您的团队)将感谢您!