A me funziona perfettamente:

Codice PHP:
<?php
class proObj {
    private 
$_propieta = array(
                  
'nome' => null,
                  
'data' => null
                 
);

    public function 
__get($propNome) {
      if(!
array_key_exists($propNome$this->_propieta)) {
        throw new 
Exception('Valore della proprietà non valido!');
        }
      if(
method_exists($this'_get' $propNome)) {
        return 
call_user_func(array($this'_get' $propNome));
        } else {
        return 
$this->_propieta[$propNome];
        }
    }
    public function 
__set($propNome$value) {
      if(!
array_key_exists($propNome$this->_propieta)) {
        throw new 
Exception("Valore " $propNome " non valido!");
        }
      if(
method_exists($this'_set'.$propNome)) {
        return 
call_user_func(
                  array(
$this'_set'.$propNome),
                  
$value
                   
);
        }  else {
        
$this->_propieta[$propNome] = $value;
        }
    }
    public function 
_setdata($dn) {
      if(
strtotime($dn) == FALSE) {
        throw new 
Exception("La data di nascita deve essere valida!");
      }
      
$this->_propieta['data'] = $dn;
    }
    public function 
saluto() {
      echo 
"Salve! il mio nome è $this->nome.  Sono nato il $this->data";
    }
  }
############################  RICHIAMO per visualizzare
    
$obj = new proObj();
  
$obj->nome "ZZZ";
  
$obj->data 'March 5, 1987';
  
$obj->saluto();
 
 echo 
"
"
;

  
$obj2 = new proObj();
  
$obj2->nome "Altro nome"
  
$obj2->data "blue"
  
$obj2->saluto();

?>