PHP

2008-11-11 11 views
9

Suponiendo que se tiene una clase base abstracta foo con __get() definido, y una clase hija bar que hereda de foo con una variable privada $var, serán los padres __get() ser llamado al intentar acceder a la privada $var de fuera de la clase?PHP

Respuesta

10

Sí.

<?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(); 
?> 

de salida:

$ php prueba.php

Padres (Foo) __get() pidió var

4

Sí. __get() y __set() (y __call() para el caso) se invocan cuando se accede a un miembro de datos que no es visible para la ejecución actual.

En este caso, $var es privado, por lo que acceder a él públicamente invocará el gancho __get().