将数组转换为对象

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

$arr['name'] = "Adam";
$arr['phone'] = "123456";
$arr['email'] = "jack@onitroad";
$arr['address'] = "U.S";

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

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

看看结果:

凉爽的!!

我们可以使用 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是从数组到对象转换过程中生成的对象。

使用 PHP 将数组转换或者转换为对象

在这篇文章中,我们将使用 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 这样的 lowerCamelCase 成员变量。

要测试这个转换器类,我们需要创建一个具有属性和方法(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;
    }
}
日期:2020-07-15 11:16:23 来源:oir作者:oir