Maison  >  Article  >  développement back-end  >  Comment accéder directement aux propriétés privées des objets d'instance PHP

Comment accéder directement aux propriétés privées des objets d'instance PHP

藏色散人
藏色散人avant
2019-11-14 14:19:172636parcourir

Avant de présenter les éléments clés, passons d'abord en revue le contrôle d'accès orienté objet PHP.

Le contrôle d'accès aux propriétés ou aux méthodes est réalisé en ajoutant les mots-clés public, protected ou private devant. Les membres de la classe définis comme publics sont accessibles de n’importe où. Un membre de classe défini comme protégé est accessible par lui-même, ses sous-classes et sa classe parent. Les membres de classe définis comme privés ne sont accessibles que par la classe dans laquelle ils sont définis.

Les attributs de classe doivent être définis comme étant publics, protégés ou privés. S'il est défini avec var, il est considéré comme public.

Veuillez consulter l'exemple de code suivant (extrait du document officiel http://php.net/manual/en/lang... :

<?php
/**
 * Define MyClass
 */
class MyClass
{
    public $public = &#39;Public&#39;;
    protected $protected = &#39;Protected&#39;;
    private $private = &#39;Private&#39;;
    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}
$obj = new MyClass();
echo $obj->public; // Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private

Comme indiqué dans le code ci-dessus, nous utilisons une classe Lorsqu'un objet instance accède à une propriété membre privée ou protégée d'une classe, une erreur fatale sera générée

Voici ce que fait le titre de l'article, accédant aux propriétés privées de l'objet instance php >Selon. Selon notre pratique habituelle, nous écrivons généralement une méthode publique et renvoyons cet attribut

public function getPrivate()
{
    return $this->private;
}

Le fait est que nous devrions le faire. On dit qu'il n'est utilisé que dans des scénarios spéciaux. ne jouera pas avec cela lors de l'écriture du code.

<?php
class A {
    private $a = &#39;self&#39;;
    public function test() {
        $other = new self();
        $other->a = &#39;other&#39;;
        var_dump($other->a);
    }
}
$aa = new A();
$aa->test();
Comme indiqué dans le code ci-dessus, nous créons un nouvel objet A et attribuons une valeur à l'attribut privé a de cette instance, aucune erreur n'a été signalée ! >Explication : Parce que les objets de la même classe peuvent accéder aux membres privés et protégés des autres même s'ils ne sont pas la même instance, c'est parce que les détails d'implémentation internes de ces objets sont tous les mêmes

connus.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer