It ultimate failed for the following reason. If base class is passed on to some other class as object parameter then accessing protected/private variables will be possible because the __get method will interfer. Also __set of protected/private variables is possible. I rather run check for setting variables without defining them than haveing open protected/private var access