使用 PHP 将数组转换或转换为对象(Hydrator 模式)

2023-10-16

在这篇文章中,我们将使用 PHP Hydrator 模式将数组转换为对象。这个方法很简单,就是将数据从一个地方传输到另一个地方。

我们将定义一个类,它将一个数组和一个对象作为输入,并搜索对象中的所有 set() 方法,并用数组中的值填充它。

首先,我们将使用 get_class() 函数确定对象类,然后使用 get_class_methods() 来获取类方法。


class Converter
{
 public static function toObject(array $array, $object)
        {
            $class = get_class($object);
            $methods = get_class_methods($class);
            foreach ($methods as $method) {
                preg_match(' /^(set)(.*?)$/i', $method, $results);
                $pre = $results[1]  ?? '';
                $k = $results[2]  ?? '';
                $k = strtolower(substr($k, 0, 1)) . substr($k, 1);
                If ($pre == 'set' && !empty($array[$k])) {
                    $object->$method($array[$k]);
                }
            }
            return $object;
        }
}  

请记住,我们使用 PHP 7 合并运算符 (??),如果您不使用 PHP 7,则可以使用三元运算符。

我们使用 substr 然后连接,因为如果我们有像 $firstName 这样的小驼峰命名的成员变量。

为了测试这个转换器类,我们需要创建一个具有属性和方法(getter 和 setter)的类,并了解如何使用 PHP 将数组转换为对象。

假设我们有一个这样的员工类:


class Employee
{
    protected $name;
    protected $phone;
    protected $email;
    protected $address;
    public function getName()
    {
        return $this->name;
    }
    public function getPhone()
    {
        return $this->phone;
    }
    public function getEmail()
    {
        return $this->email;
    }
    public function getAddress()
    {
        return $this->address;
    }
    public function setName($name)
    {
        $this->name = $name;
    }
    public function setPhone($phone)
    {
        $this->phone = $phone;
    }
    public function setEmail($email)
    {
        $this->email = $email;
    }
    public function setAddress($address)
    {
        $this->address = $address;
    }
}  

将数组转换为对象

现在让我们创建一个数组来保存将传输到类的数据。


$arr['name'] = "Adam";
$arr['phone'] = "123456";
$arr['email'] = "adam@mail.com";
$arr['address'] = "U.S";  

太好了,让我们将数组数据转换为类。


$obj = Converter::toObject($arr, new Employee());
var_dump($obj);  

看看结果:

Cool!!

您可以使用 PHP Hydrator 模式将数组转换为对象。

将对象转换为关联数组

将对象转换为关联数组怎么样,这是相同的概念,我们将创建一个执行相反操作的新函数。

我们的函数将以与之前的函数相同的方式搜索所有 get() 函数,如下所示:


public static function toArray($object)
{
    $array = array();
    $class = get_class($object);
    $methods = get_class_methods($class);
    foreach ($methods as $method) {
        preg_match(' /^(get)(.*?)$/i', $method, $results);
        $pre = $results[1]  ?? '';
        $k = $results[2]  ?? '';
        $k = strtolower(substr($k, 0, 1)) . substr($k, 1);
        If ($pre == 'get') {
            $array[$k] = $object->$method();
        }
    }
    return $array;
}  

将此函数添加到我们的转换器类中,并使用传递的对象调用它,如下所示:


var_dump(Converter::toArray($obj));  

注意,这里传递的$obj是从数组到对象转换过程中生成的对象。

输出按预期显示关联数组。

我希望您觉得这篇文章有用。继续回来。

谢谢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PHP 将数组转换或转换为对象(Hydrator 模式) 的相关文章

  • 如何计算 MySQL 数据库大小

    MySQL 数据库的大小是需要监控的一个重要方面 因为它会影响数据的性能 备份和恢复过程 在本文中 我们将介绍计算 MySQL 数据库大小的方法 并提供 SQL 查询和解释 MySQL 数据库大小计算 有几种不同的方法可以计算 MySQL
  • 如何在 Ubuntu 22.04 上安装 VirtualBox 7.0

    您知道可以在 Linux 计算机上运行虚拟机吗 这是真的 借助 VirtualBox 等虚拟化软件 您可以为任何操作系统 甚至是像 Windows 或 OS X 这样不寻常的操作系统 设置单独的环境 而不会给您的主操作系统带来风险 您会发现
  • 如何在 Linux 中搜索 X 天/小时内创建的文件

    本教程将帮助您查找 X 天内创建或修改的文件 这里X表示任意数 使用 find 命令 您还可以搜索 X 分钟内创建或修改的内容 1 搜索30天内创建 修改的文件 使用此命令可以搜索 var backup 目录中 30 天内创建或修改的所有文
  • 用于备份 Windows 事件日志和清理的 PowerShell 脚本

    PowerShell 是一个功能强大的命令行工具 允许系统管理员自动执行许多日常任务 包括管理 Windows 事件日志 在此脚本中 我们将创建一个 PowerShell 脚本 将所有事件日志备份到指定位置 然后清除日志以释放磁盘空间并提高
  • 如何在 Ubuntu 18.04 和 16.04 上配置 NFS 共享

    网络文件系统 NFS 是一个分布式文件系统协议 它允许客户端计算机上的用户以类似于访问本地存储的方式通过网络访问文件 本文将帮助您在 Ubuntu 系统上安装和配置 NFS 并导出目录并将其挂载到客户端系统上 网络详情 我们在同一网络 19
  • 让 Shell 访问正在运行的 Docker 容器:实用指南

    Docker 是容器化事实上的标准 提供了一种打包和分发应用程序的有效方法 作为开发人员或系统管理员 有时您可能需要获得对正在运行的 Docker 容器的 shell 访问权限 这可以用于调试目的 应用程序管理或其他各种任务 本指南提供了有
  • 如何在 Git 存储库中创建分支

    Git 是一个强大的版本控制系统 被软件开发人员广泛使用 Git 的关键功能之一是能够在单个存储库中创建和管理多个分支 在本文中 我们将分步讲解创建 Git 分支的过程 第 1 步 了解 Git 分支 在我们深入创建 Git 分支之前 了解
  • 如何在 Bash Shell 脚本中使用函数

    什么是功能 函数也可以称为子例程 过程是用于特定任务的代码块 函数还有一个属性 称为可重用性 本教程将帮助您了解如何在 shell 脚本中创建和使用函数 在 Shell 脚本中创建第一个函数 在 shell 脚本中创建第一个函数 显示输出
  • 如何在 Git 中列出远程分支

    Git 是一种流行的版本控制系统 开发人员使用它来跟踪对其代码所做的更改 分支是 Git 的一个重要方面 因为它们允许开发人员并行处理多个功能或修复错误 而不会影响主代码库 在 Git 中 您可以创建两种类型的分支 本地分支和远程分支 本地
  • 如何在 MacOS 上安装 VirtualBox

    如何在 macOS 上安装 VirtualBox 在 macOS 系统上安装 VirtualBox 以及扩展包的分步教程 VirtualBox 是一款流行的跨平台虚拟机管理器 可让您在 Mac 上创建虚拟机 VM VM可用于同时运行不同的操

随机推荐

  • 如何在 Ubuntu 18.04 上安装 Anaconda

    Anaconda 是最流行的 Python 数据科学和机器学习平台 用于大规模数据处理 预测分析和科学计算 Anaconda 发行版附带了 1 000 多个数据包 conda命令行工具和名为 Anaconda Navigator 的桌面图形
  • 如何检查Python版本

    Python 是世界上最流行的编程语言之一 它用于开发网站 编写脚本 机器学习 分析数据等 本文介绍如何使用命令行检查操作系统上安装的 Python 版本 这在安装需要特定版本 Python 的应用程序时非常有用 我们还将向您展示如何以编程
  • 如何在 Ubuntu 18.04 上添加交换空间

    交换空间是磁盘上的空间 当物理 RAM 内存已满时使用 当 Linux 系统耗尽 RAM 时 非活动页面将从 RAM 移至交换空间 交换空间可以采用专用交换分区或交换文件的形式 通常 在虚拟机上运行 Ubuntu 时 不存在交换分区 唯一的
  • Linux 中的终止命令

    Linux是一个伟大而先进的操作系统 但它并不完美 有时 某些应用程序可能会开始表现不稳定并变得无响应或开始消耗大量系统资源 无响应的应用程序无法重新启动 因为原始应用程序进程永远不会完全关闭 唯一的解决方案是重新启动系统或终止应用程序进程
  • 如何更改 Linux 中的 Swappiness 值

    交换空间是 RAM 内存已满时使用的硬盘的一部分 交换空间可以是专用交换分区或交换文件 当 Linux 系统耗尽物理内存时 非活动页面将从 RAM 移至交换空间 Swappiness 是一个 Linux 内核属性 它设置将页面从物理内存换出
  • 如何在 Python 中查找列表的长度

    列表是Python中最常用的数据类型之一 用于存储相同类型的项目的集合 本文介绍如何查找列表的长度 len 功能 Python有一个内置函数len 返回给定对象的长度 该对象可以是一个list 元组 字符串 字典等 的语法len 函数如下
  • Tmux 入门

    本指南将介绍 Tmux 的安装和基本用法 以帮助您入门和运行 什么是 tmux Tmux 是终端多路复用器的替代品GNU 屏幕 换句话说 这意味着您可以启动 Tmux 会话 然后在该会话中打开多个窗口 每个窗口占据整个屏幕 并且可以分割成矩
  • 如何在 Python 中向列表添加元素(追加、扩展和插入)

    在 Python 中使用列表时 您经常需要向列表中添加新元素 Python 列表数据类型具有三种添加元素的方法 append 将单个元素追加到列表中 extend 将可迭代的元素追加到列表中 insert 在列表的给定位置插入单个项目 所有
  • 如何添加 Git 远程

    通常 在使用 Git 时 您将仅使用一个名为 origin 的远程服务器 并针对不同的功能和环境使用不同的分支 Origin 是克隆存储库时自动创建的远程名称 并指向克隆的存储库 然而 当与一群人协作处理一个项目时 您可能会发现使用多个 G
  • Linux 中的 Dig 命令(DNS 查找)

    Dig Domain Information Groper 是一个强大的命令行工具 用于查询 DNS 名称服务器 The dig命令 允许您查询有关各种 DNS 记录的信息 包括主机地址 邮件交换和名称服务器 由于其灵活性和易用性 它是系统
  • 如何在 Ubuntu 20.04 上安装 Zoom

    Zoom是一个易于使用的通信平台 集云视频会议 实时消息传递和内容共享于一体 使用 Zoom 您可以举办网络研讨会 组织在线会议以及创建会议室 本指南介绍如何在 Ubuntu 20 04 上安装 Zoom 相同的说明适用于所有基于 Debi
  • 如何在 Ubuntu 20.04 上安装 Memcached

    Memcached 是一个免费开源的高性能内存键值数据存储 它通常用于通过缓存 API 和数据库调用结果中的各种对象来加速应用程序 本文介绍如何在 Ubuntu 20 04 上安装和配置 Memcached 安装 Memcached mem
  • PyQt5绘图教程(绘画API)

    在本教程中 我们将学习如何绘制矢量图形PyQt5 正如您将看到的 在 Python 中 PyQt5 模块是可用于绘图目的的最简单的模块 在开始之前 让我们使用 PyQt5 创建一个窗口 在其中绘制图形 目录 hide 1 创建一个 PyQt
  • NumPy where 教程(带示例)

    The numpy where函数用于检索 ndarray 中给定条件为 true 的元素的索引 学完本教程后 您将充分了解如何使用numpy where查询NumPy 数组 目录 hide 1 语法和参数 2 使用 x 和 y 参数替换值
  • 使用 sed 命令掌握 Linux 文件中的文本插入

    The ised 中的命令用于在行前插入文本 的一般语法为i命令是 sed pattern i text to be inserted filename 在本教程中 我们将重点介绍如何使用sed命令 目录 hide 1 Sed Insert
  • Sed 命令指南:Linux 中的文本编辑

    sed代表流编辑器 该命令允许您解析和转换文本数据 如果输入源自文件 管道或标准输入 sed逐行处理它 With sed 您可以执行各种文本操作 如插入 删除 搜索和替换 目录 hide 1 Basic Syntax and Operati
  • Pandas查询方法:高效过滤DataFrame

    Pandas提供query 允许用户使用字符串表达式查询 DataFrame 的方法 在本教程中 您将了解query方法以及如何在实际应用中使用它 目录 hide 1 Pandas 查询语法和参数 2 使用查询方法过滤数据帧 3 Using
  • 用于网络故障排除的 Linux 网络命令

    在上一篇文章中 我们谈到了Linux进程管理t 在这篇文章中 我们将讨论 Linux 网络命令以及如何排除网络故障 如果确保物理网络正常工作 下一步就是对网络进行故障排除 这里我们进入我们的主题 即 Linux 网络命令以及如何使用它们对网
  • Pandas loc 与 iloc:何时使用它们进行数据选择

    The loc and iloc属性是 Pandas 库的一部分 允许根据某些标准从 DataFrame 中选择数据 本教程将讨论这两种属性之间的主要区别 以及如何确保您使用适合您特定需求的属性 下表总结了这两个属性之间的差异 Proper
  • 使用 PHP 将数组转换或转换为对象(Hydrator 模式)

    在这篇文章中 我们将使用 PHP Hydrator 模式将数组转换为对象 这个方法很简单 就是将数据从一个地方传输到另一个地方 我们将定义一个类 它将一个数组和一个对象作为输入 并搜索对象中的所有 set 方法 并用数组中的值填充它 首先