Maison  >  Article  >  développement back-end  >  Comment convertir un objet en tableau en php

Comment convertir un objet en tableau en php

PHPz
PHPzoriginal
2023-04-23 19:29:56786parcourir

Dans le développement PHP, nous avons souvent besoin de convertir entre des objets et des tableaux. Les scénarios d'application courants nécessitent de convertir des objets en tableaux. PHP fournit de nombreuses méthodes pour terminer ce processus de conversion, la méthode la plus couramment utilisée consiste à convertir l'objet en tableau via un lanceur.

En PHP, lorsque nous convertissons un objet en tableau, le nom de l'attribut de l'objet est automatiquement utilisé comme nom de clé et la valeur de l'attribut est stockée dans le tableau en tant que valeur de clé. Dans le même temps, PHP peut également convertir de manière sélective les propriétés privées, protégées et publiques d'un objet.

Apprenons à convertir des objets en tableaux à travers des exemples :

class BlogPost {
    private $title;
    private $content;
    protected $publishedAt;

    public function __construct($title, $content) {
        $this->title = $title;
        $this->content = $content;
        $this->publishedAt = date('Y-m-d H:i:s');
    }
}

$post = new BlogPost('PHP Object Convert Array', 'PHP 中对象转换数组的实现');
$array_post = (array) $post; // 将对象转换为数组
print_r($array_post);

Dans l'exemple ci-dessus, nous avons défini une classe BlogPost, qui possède trois attributs : title, contenu et publishedAt. Parmi eux, title et content sont des propriétés privées, et publishedAt est une propriété protégée. Dans le constructeur de la classe, nous définissons les propriétés $title et $content, et par défaut définissons la propriété $publishedAt à l'heure actuelle. . BlogPost 类,它有三个属性:titlecontentpublishedAt。其中,titlecontent 是私有属性,publishedAt 是受保护属性。在类的构造函数中,我们设置了 $title$content 属性,并默认将 $publishedAt 属性设置为当前时间。

接着,我们实例化了 BlogPost 类,并将它强制类型转换为数组 $array_post。最后,我们使用 print_r 函数打印 $array_post 数组的内容,可以看到输出结果如下:

Array
(
    [BlogPosttitle] => PHP Object Convert Array
    [BlogPostcontent] => PHP 中对象转换数组的实现
    [*publishedAt] => 2021-09-14 15:10:34
)

可以发现,当我们使用 (array) 进行类型转换时,对象的属性名会被添加类名作为前缀。这是因为在 PHP 中,相同的属性名只能出现一次,为了防止属性名冲突,PHP 自动添加了类名做前缀。同时,我们也可以通过数组的方式来访问对象的属性,比如 echo $array_post['BlogPosttitle']; 可以输出 PHP Object Convert Array

需要注意的是,当对象中有私有属性和受保护属性时,它们在转换为数组后默认是不可访问的,但是如果我们想将它们添加到数组中,可以通过 ReflectionClass 类来实现:

class BlogPost {
    private $title;
    private $content;
    protected $publishedAt;

    public function __construct($title, $content) {
        $this->title = $title;
        $this->content = $content;
        $this->publishedAt = date('Y-m-d H:i:s');
    }
}

$post = new BlogPost('PHP Object Convert Array', 'PHP 中对象转换数组的实现');

$reflection_class = new ReflectionClass($post);
$properties = $reflection_class->getProperties(ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED | ReflectionProperty::IS_PRIVATE); // 获取所有属性

$array_post = [];
foreach ($properties as $property) {
    $property->setAccessible(true); // 设置属性可访问
    $array_post[$property->getName()] = $property->getValue($post); // 将属性及属性值添加到数组中
}

print_r($array_post);

在上述示例中,我们使用了 ReflectionClassReflectionProperty 类来获取对象的所有属性,包括公共属性、受保护属性和私有属性。然后通过 setAccessible() 方法设置属性可访问,最终将属性及属性值添加到数组中,输出结果如下:

Array
(
    [title] => PHP Object Convert Array
    [content] => PHP 中对象转换数组的实现
    [publishedAt] => 2021-09-14 15:10:34
)

总结来看,PHP 提供了多种方式来将对象转换成数组,常用的方式是使用强制类型转换符 (array)。同时,我们也可以选择性地将私有属性和受保护属性添加到数组中,可以通过 ReflectionClass

Ensuite, nous instancions la classe BlogPost et la convertissons en un tableau $array_post. Enfin, nous utilisons la fonction print_r pour imprimer le contenu du tableau $array_post. Vous pouvez voir le résultat comme suit : 🎜rrreee🎜Vous pouvez le trouver lorsque nous utilisons <. code>(array) Lors de la conversion de type, le nom d'attribut de l'objet sera préfixé par le nom de classe. En effet, en PHP, le même nom d'attribut ne peut apparaître qu'une seule fois. Afin d'éviter les conflits de noms d'attribut, PHP ajoute automatiquement le nom de classe comme préfixe. Dans le même temps, nous pouvons également accéder aux propriétés de l'objet via des tableaux, tels que echo $array_post['BlogPosttitle']; qui peut générer un PHP Object Convert Array. 🎜🎜Il est à noter que lorsqu'il y a des propriétés privées et des propriétés protégées dans l'objet, elles sont inaccessibles par défaut après avoir été converties en tableau, mais si on veut les ajouter au tableau, on peut passer ReflectionClass à réaliser : 🎜rrreee🎜Dans l'exemple ci-dessus, nous avons utilisé les classes <code>ReflectionClass et ReflectionProperty pour obtenir toutes les propriétés de l'objet, y compris les propriétés publiques, protégées propriétés et propriété privée. Définissez ensuite l'accessibilité de l'attribut via la méthode setAccessible(), et enfin ajoutez l'attribut et la valeur de l'attribut au tableau. Le résultat de sortie est le suivant : 🎜rrreee🎜En résumé, PHP propose diverses méthodes. pour convertir des objets en tableau, la méthode courante consiste à utiliser l'opérateur de conversion (array). Dans le même temps, nous pouvons également ajouter sélectivement des propriétés privées et des propriétés protégées au tableau, ce qui peut être réalisé via la classe ReflectionClass. Quelle que soit la méthode utilisée, vous pouvez facilement convertir des objets en tableaux pour un meilleur traitement et une meilleure transmission des données d'objet. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn