首页 后端开发 PHP问题 php  obj怎么转化为数组

php  obj怎么转化为数组

Apr 27, 2023 am 09:07 AM

在 PHP 开发中,有时候需要对对象(Object)进行转换为数组(Array)的操作,以便于进行数据传递和处理等操作。本文介绍了 PHP 中将对象转化为数组的方法。

一、使用 get_object_vars 函数进行转化

PHP 内置函数 get_object_vars 可以获取对象中所有可见属性的数组表示形式(键是属性名,值是属性值),我们可以将其返回的数组直接作为需要的数组。

示例代码:

class Car {
    public $brand = 'Audi';
    public $model = 'A6';
    private $price = 80000;
    
    public function __construct()
    {
        # code...
    }
}

$car = new Car();
$arr = get_object_vars($car);
print_r($arr);
登录后复制

执行结果:

Array
(
    [brand] => Audi
    [model] => A6
)
登录后复制
登录后复制

可见,由于 $price 属性是 private 的,因此不会出现在返回的数组中。

二、使用 json_decode 函数进行转化

我们可以使用 PHP 内置函数 json_decode 将对象转换为 JSON 格式的字符串,再将其转化为数组。

示例代码:

class Car {
    public $brand = 'Audi';
    public $model = 'A6';
    private $price = 80000;
    
    public function __construct()
    {
        # code...
    }
}

$car = new Car();
$jsonStr = json_encode($car);
$arr = json_decode($jsonStr, true);
print_r($arr);
登录后复制

执行结果:

Array
(
    [brand] => Audi
    [model] => A6
)
登录后复制
登录后复制

同样地,由于 $price 属性是 private 的,因此不会出现在转化后的数组中。

三、使用类型强制转换进行转化

在 PHP 中,除了使用 get_object_vars 函数和 json_decode 函数进行对象转化成数组之外,还可以使用强制类型转换进行转化。我们可以将对象强制转化为数组类型,返回的数组中的键是属性名,值是属性值。

示例代码:

class Car {
    public $brand = 'Audi';
    public $model = 'A6';
    private $price = 80000;
    
    public function __construct()
    {
        # code...
    }
}

$car = new Car();
$arr = (array) $car;
print_r($arr);
登录后复制

执行结果:

Array
(
    [brand] => Audi
    [model] => A6
    [*price] => 80000
)
登录后复制

可以看到,与 get_object_vars 函数和 json_decode 函数进行转化的结果不同,强制类型转化后的数组中,除了公有属性之外,还会包括私有属性,并以 * 开头的标记来表示私有属性。

需要注意的是,如果对象中有 __toString 方法,则强制类型转换为数组时会将 __toString 方法的返回值作为数组的第一个元素(键为 0,值为返回值)。

四、使用反射进行转化

PHP 的反射机制可以对类、对象和方法进行分析和调用,反射提供获取对象的属性和方法的功能,通过反射类,我们可以获取对象的属性和访问级别(public、private 或者 protected)。

示例代码:

class Car {
    public $brand = 'Audi';
    public $model = 'A6';
    private $price = 80000;
    
    public function __construct()
    {
        # code...
    }
}

$car = new Car();
$reflection = new ReflectionObject($car);
$arr = [];

foreach ($reflection->getProperties() as $property) {
    $property->setAccessible(true);
    $arr[$property->getName()] = $property->getValue($car);
}

print_r($arr);
登录后复制

执行结果:

Array
(
    [brand] => Audi
    [model] => A6
    [price] => 80000
)
登录后复制

可以看到,通过反射获取对象属性时,不受访问级别(public、private 或者 protected)的限制,同时,获取到的属性名和属性值均包括在数组中。

综上所述,本文介绍了 PHP 将对象转化为数组的多种方法。在实际开发中,选择哪种方法应根据需求和代码的实际情况而定。

以上是php  obj怎么转化为数组的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1677
14
CakePHP 教程
1431
52
Laravel 教程
1334
25
PHP教程
1280
29
C# 教程
1257
24