Tienes varios problemas, el primero, para controlar lo que sea setea necesitas mutators(setters), luego tienes el problema de como funciona PDO::FETCH_CLASS, la única forma de interceptar el seteo de las propiedades es que estas no existan y se dispare el método mágico __set, con lo que tu clase quedaría algo así(voy a utilizar solo un par de propiedades):
Código PHP:
Ver originalclass Role
{
/**
* @var array
*/
private $data = array('id' => null, 'name' => '');
/**
* @param integer $id
* @return Role provide fluent interface
*/
public function setId($id)
{
$this->data['id'] = (int)$id;
return $this;
}
/**
* @return integer $id
*/
public function getId()
{
return $this->data['id'];
}
/**
* @param string $name
* @return Role provide fluent interface
*/
public function setName($name)
{
$this->data['name'] = (string)$name;
return $this;
}
/**
* @return string
*/
public function getName()
{
return $this->data['name'];
}
/**
* @param string $property
* @param mixed $value
*/
public function __set($property, $value)
{
$method = 'set' . ucfirst($property); throw new BadMethodCallException();
}
$this->$method($value);
}
}
Espero el ejemplo te sirva para que al menos captes la idea, de todas formas si bien en tu lugar utilizaría un mapper en vez de PDO::FETCH_CLASS, tener las propiedades en un array no es lo mas adecuado, a la clase le quedaría por definir __get, __isset y __unset
Saludos.