2008-11-11 7 views
9

En supposant on a une classe de base abstraite foo avec __get() défini, et une classe enfant bar qui hérite de foo avec une variable privée $var, sera le parent __get() être appelé lorsque vous essayez d'accéder au $var privé de en dehors de la classe?PHP __get et les variables de classe privée

Répondre

10

Oui.

<?php 
    abstract class foo 
    { 
     public function __get($var) 
     { 
      echo "Parent (Foo) __get() called for $var\n"; 
     } 
    } 

    class bar extends foo 
    { 
     private $var; 
     public function __construct() 
     { 
      $this->var = "25\n"; 
     } 

     public function getVar() 
     { 
      return $this->var; 
     } 
    } 

    $obj = new bar(); 
    echo $obj->var; 
    echo $obj->getVar(); 
?> 

sortie:

$ php test.php

Parent (Foo) __get() appelé var

4

Oui. __get() et __set() (et __call() d'ailleurs) sont invoqués lors de l'accès à un membre de données qui n'est pas visible par l'exécution en cours.

Dans ce cas, $var est privé, donc l'accès public appellera le hook __get().

Questions connexes