Maison  >  Article  >  développement back-end  >  Comment convertir une méthode privée d'objet php en tableau

Comment convertir une méthode privée d'objet php en tableau

PHPz
PHPzoriginal
2023-04-26 10:21:23455parcourir

Dans le développement PHP, les objets sont des types de données très courants. À l’intérieur de l’objet, il contient de nombreux membres différents : propriétés, méthodes, constantes, etc.

En PHP, les méthodes privées des objets ne peuvent pas être appelées directement. Cependant, nous devons parfois convertir les valeurs de retour de ces méthodes privées en tableaux afin que nos programmes puissent mieux traiter ces données.

Dans cet article, nous explorerons comment convertir des méthodes privées d'un objet PHP en un tableau afin de mieux traiter et utiliser ces données.

1. Méthodes privées des objets

Dans un objet PHP, les méthodes privées ne peuvent pas être appelées en externe. Cela signifie que si nous voulons appeler une méthode privée et obtenir sa valeur de retour, nous devons l'appeler à l'intérieur de l'objet, puis transmettre sa valeur de retour via une méthode.

Par exemple, nous avons une classe nommée Foo, qui contient une méthode privée nommée getPrivateData() :

class Foo {
    private function getPrivateData() {
        return array('name' => 'John', 'age' => 30);
    }
}

Parce que getPrivateData() est une méthode privée, nous ne pouvons pas l'appeler directement en externe, comme ceci :

$foo = new Foo();
$data = $foo->getPrivateData(); // 错误!无法访问私有方法

À ce stade temps, nous avons besoin de quelques compétences pour obtenir la valeur de retour de la méthode getPrivateData().

2. Convertir la méthode privée de l'objet en tableau

Une solution consiste à ajouter une méthode publique à l'intérieur de la classe, à utiliser cette méthode pour appeler la méthode privée, puis à transmettre sa valeur de retour.

class Foo {
    private function getPrivateData() {
        return array('name' => 'John', 'age' => 30);
    }
    public function getPrivateDataArray() {
        return $this->getPrivateData();
    }
}

De cette façon, vous pouvez obtenir la valeur de retour de getPrivateData() en appelant la méthode getPrivateDataArray() en externe :

$foo = new Foo();
$data = $foo->getPrivateDataArray(); // 返回array('name' => 'John', 'age' => 30)

Cependant, l'ajout d'une méthode "getter" pour obtenir la valeur de retour de la méthode privée est réalisable, mais cela entraînera une duplication de code et une confusion structurelle. Par conséquent, nous pouvons essayer d’utiliser des méthodes plus élégantes pour résoudre ce problème.

L'idée de base est d'utiliser le mécanisme de réflexion de PHP pour obtenir et appeler des méthodes privées dans les objets via des objets et des méthodes de réflexion.

1. Définir la classe de réflexion

Tout d'abord, nous devons instancier un objet de réflexion. Cet objet contiendra toutes les informations dont nous avons besoin pour obtenir et appeler les méthodes privées de l'objet.

$reflection = new ReflectionClass($object);

où $object est l'objet dont nous avons besoin pour obtenir la méthode privée et l'utiliser pour définir l'objet de réflexion.

2. Rechercher des méthodes privées

L'objet de réflexion fournit une méthode getMethods(), qui peut renvoyer un tableau d'objets ReflectionMethod contenant toutes les méthodes. Nous pouvons parcourir ce tableau pour trouver la méthode privée souhaitée.

//$methods = $reflection->getMethods();
$methods = $reflection->getMethods(ReflectionMethod::IS_PRIVATE);
foreach ($methods as $method) {
    if ($method->getName() === 'getPrivateData') {
        // 找到getPrivateData方法
    }
}

Ici, nous utilisons le deuxième paramètre de la méthode getMethods() pour filtrer les méthodes privées. Ensuite, nous parcourons ce tableau, utilisons la méthode getName() pour obtenir le nom de la méthode et trouvons la méthode privée dont nous avons besoin en faisant correspondre le nom de la méthode.

3. Configurer des méthodes privées appelables

Si nous pouvons trouver la méthode privée dont nous avons besoin, nous devons la "transformer" en une méthode appelable afin que nous puissions obtenir sa valeur de retour.

$method->setAccessible(true);
$data = $method->invoke($object);

Ici, nous utilisons la méthode setAccessible(true) pour rendre la méthode privée appelable. Ensuite, nous utilisons la méthode Invoke(), passons l'instance d'objet, appelons la méthode getPrivateData() et obtenons la valeur de retour.

4. Convertir la valeur de retour en tableau

Maintenant, nous avons réussi à obtenir la valeur de retour de la méthode privée. Cette valeur de retour est un tableau associatif, mais nous devons la convertir en tableau d'index. Nous pouvons utiliser la fonction array_values() pour accomplir cette opération.

$data = array_values($data);

5. Fusionner les tableaux

Grâce au processus ci-dessus, nous avons réussi à convertir la méthode privée d'un objet PHP en un tableau. Ce qui suit est l'opération de fusion de ces tableaux dans un nouveau tableau.

$reflection = new ReflectionClass($object);
$methods = $reflection->getMethods(ReflectionMethod::IS_PRIVATE);
$data = array();
foreach ($methods as $method) {
    if ($method->getName() === 'getPrivateData') {
        $method->setAccessible(true);
        $result = $method->invoke($object);
        $data = array_merge($data, array_values($result));
    }
}

Ici, nous utilisons la fonction array_merge() pour fusionner tous les tableaux en un seul tableau. Ce tableau contient les valeurs de retour de toutes les méthodes privées.

3. Résumé

Dans cet article, nous avons exploré comment convertir des méthodes privées d'un objet PHP en tableau. Afin d'atteindre cet objectif, nous utilisons le mécanisme de réflexion de PHP pour obtenir et appeler des méthodes privées dans l'objet via des objets et des méthodes de réflexion. De cette manière, nous pouvons obtenir les valeurs de retour de ces méthodes privées et les convertir en tableaux afin de mieux traiter et utiliser ces données.

Il convient de noter que bien que cette méthode puisse atteindre les résultats souhaités, dans certains cas, elle peut affecter la lisibilité et la maintenabilité du code. Par conséquent, dans le développement réel, nous devons choisir d'utiliser différentes solutions en fonction des besoins et des conditions réelles.

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