PHP

2008-11-11 1 views
9

Ipotizzando uno ha una classe base astratta foo con __get() definito, e una classe figlia bar che eredita da foo con una variabile privata $var, sarà il genitore __get() essere chiamato quando si cerca di accedere al privato $var da fuori dalla classe?PHP

risposta

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

uscita:

$ php test.php

Parent

(Foo) __get() ha chiesto var

4

Sì. __get() e __set() (e __call()) sono richiamati quando si accede a un membro dati che non è visibile all'esecuzione corrente.

In questo caso, $var è privato, quindi l'accesso pubblico richiamerà l'hook __get().