Restringiendo el acceso a las funciones en PHP: Mas alla de protected, private and public
MIentras estaba implementando nuevas caracteristicas en phpORM, surgio la necesidad de poder accesar a cierta informacion desde otras clases. En la teoria de Objetos, cuando se quiere permitir que una funcion externa acceda a un metodo privado de una clase, lo que se hace es declara a esa funcion como amiga de la clase.
class MIClase
{
private function miFuncion() {}
friend function acceso_externo();
}
Sin embargo, en PHP no existe el modificador friend. Sin embargo se puede intentar codear una solucion.
La base de esta solucion es la funcion debug_backtrace(). Esta funcion me devuelve informacion de depuracion, como por ejemplo: que script se esta ejecutando, o en que linea de codigo me encuentro … o mejor aun desde donde se realizo la llamada.
class MIClase
{
// En esta variable privada uno se debe asegurar de incluir todos los nombres de clases que
// tendran acceso nuestros metodos “privados”, eso incluye el nombre de la propia clase
private $__friends = array(”MIClase”,”ClaseAmiga”, “OtraClaseAmiga”);// Este metodo, sera accesible por las clases amigas. Aunque se ha declarado publico ….
// sera realmente privado para todos menos para esta clase y las clases amigas
public function Metodo()
{
$trace = debug_backtrace(); // Obtengo la informacion de depuracion// Verificamos que la llamada alla sido hecha desde alguna de las clases incluidas en $__friends
if(isset($trace[1]['class']) && in_array($trace[1]['class'],$this->__friends))
{
// MI CODIGO ACA
}else{trigger_error(’Cannot access private function ‘ . __CLASS__ .’::Metodo’, E_USER_ERROR);
}
}
}
If you enjoyed this post, please consider to leave a comment or subscribe to the feed and get future articles delivered to your feed reader.





Comments
No comments yet.
Leave a comment