Maison  >  Article  >  développement back-end  >  Comment accéder directement aux attributs privés dans les objets d'instance PHP ?

Comment accéder directement aux attributs privés dans les objets d'instance PHP ?

黄舟
黄舟original
2017-10-13 09:19:181595parcourir

Cet article vous présente principalement les informations pertinentes sur la façon d'accéder directement aux attributs privés dans l'objet d'instance PHP. L'article le présente en détail à travers l'exemple de code. Il a une certaine valeur d'apprentissage de référence pour les études ou le travail de chacun. qui en a besoin Apprenons avec l'éditeur ci-dessous.

Préface

Cet article présente principalement le contenu pertinent sur la façon d'accéder directement aux attributs privés dans l'objet d'instance PHP Avant d'introduire la clé. parties, 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 (public), protected (protected) ou private (private) devant. Les membres de la classe définis comme publics sont accessibles de n’importe où. Les membres de la classe définis comme protégés sont accessibles par lui-même ainsi que par ses sous-classes et classes parentes. 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 et privés. S'il est défini avec var, il est considéré comme public.

Veuillez consulter l'exemple de code ci-dessous (extrait de la documentation officielle : http://php.net/manual/en/lingual.oop5.visibility.php


<?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 le montre le code ci-dessus, lorsque nous utilisons un objet instance d'une classe pour accéder à un attribut membre privé ou protégé d'une classe, une erreur fatale sera générée

Voici ce qui suit. Ce que le titre de l'article doit faire, c'est accéder aux propriétés privées de l'objet d'instance PHP

Selon notre pratique normale, nous écrivons généralement une méthode publique et. puis renvoyez cette propriété.


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

Le fait est que nous devrions faire cela

Ce qui suit est juste une méthode d'utilisation dans des scénarios spéciaux. J'espère que vous n'écrivez pas de code en temps normal.


<?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 le montre le code ci-dessus, nous avons créé un nouvel objet A et attribué une valeur au privé. attribut a de cette instance, mais 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 les uns des autres même s'ils ne sont pas la même instance. est dû aux détails spécifiques de mise en œuvre au sein de ces objets est connu

Résumé

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