Igualmente, si bien es sano dejar de lado __set y __get, siempre podés hacer uso del método __call, en el cual podés establecer una implementación de setters y getters que incluso tenga control de scope. No debería ser muy dificil hacer algo asi :
Código PHP:
Ver original<?php
class A {
protected $_attributes = array('nombre', 'apellido', 'edad'); protected $_data = array();
function __call($name, $argument)
{
switch($type)
{
case 'get':
if(in_array($att_name, $this->_attributes
)) {
return $this->_data[$att_name];
}
throw new Exception('Atributo no existe, DANGER !!');
break;
case 'set':
if(in_array($att_name, $this->_attributes
)) {
$this->_data[$att_name] = $argument[0];
return $argument[0];
}
throw new Exception('Atributo no existe, DANGER !!');
break;
default:
throw new Exception('llamaste algo que no existe macho, media pila.');
break;
}
}
}
try {
$a = new A;
$a->setApellido('pablo');
} catch(Exception $e) {
echo $e->getMessage();
}
?>