Programación orientada a objetos en PHP4

Patxi Echarte, January 9th, 2006

Ocultación

PHP no soporta la ocultación de información mediante los típicos private, public y protected. Cualquier atributo y método que definamos en una clase será público, por lo tanto, si queremos utilizar algún tipo de ocultación tendrá que ser de forma artificial. Una solución bastante frecuente se basa en anteponer un guión bajo _ a todos aquellos atributos y métodos que deseemos que sean protegidos y privados. Desde luego esto no nos libra de poder utilizarlos desde fuera, ya que dependerá de nosotros el tratar de no utilizar fuera de la clase todo aquello que empiece por guión bajo. Yo no suelo diferenciar entre protegidos y privados, tratando a todo aquello que empieza por guión bajo como si fuera protegido, pudiendo acceder únicamente a ello desde la propia clase y sus herederas. Desde luego nada impide que si alguien necesita diferenciar entre protegido y privado pueda utilizar su propio mecanismo, en cualquier caso, no conviene utilizar dos guiones bajos seguidos, ya que esa nomenclatura la utiliza PHP para cosas internas.

class Ejemplo{
   
   var $_a;
   
   function Ejemplo(){
      $this->_initialize();
   }
   
   function _initialize(){
      $this->_a = 123;
   }
   
   function getA(){
      return $this->_a;
   }
   
   function setA($v){
      $this->_a = $v;
   }
}

En este ejemplo se define una clase con un atributo protegido al que se puede acceder mediante los típicos métodos públicos get y set. La clase dispone también de un método protegido _initialize, que debería ser llamado únicamente desde dentro de la clase, como si en realidad fuera protegida.

Sobrecarga

PHP no soporta la sobrecarga de métodos ni constructores, de forma que no podemos tener varios métodos con el mismo nombre y que se diferencian en el número de parámetros o en su tipo, para llamar a cada uno según sea necesario. La forma de conseguir algo similar es utilizar un conjunto de métodos protegidos y redirigir la llamada al que corresponda en función del número de parámetros o sus tipos, siendo esto último algo limitado debido a que PHP no es un lenguaje fuertemente tipado.

class Ejemplo{
   
   function Ejemplo(){}
   
   function metodo(){
      $numargs = func_num_args();
      $args    = func_get_args();
   
      if($numargs == 1){
         if(is_array($args[0])) $this->_metodo1($args[0]);
         else $this->_metodo2($args[0]);
      }
      else if($numargs == 2)
         $this->_metodo3($args[0], $args[1]);
   }
   
   function _metodo1($arr){
      echo "Sobrecarga con un parámetro de tipo array\n";
   }
   
   function _metodo2($data){
      echo "Sobrecarga con un parámetro NO de tipo array\n";
   }
   
   function _metodo3($p1, $p2){
      echo "Sobrecarga con dos parámetros\n";
   }
   
}
   
$ejemplo =& new Ejemplo();
   
$ejemplo->metodo(array());
$ejemplo->metodo('hola');
$ejemplo->metodo(1,2);
   
echo "</pre>";

En este ejemplo se dispone de una clase con un método público de nombre “metodo”, el cual acepta llamadas con un parámetro de tipo array, con un parámetro otro tipo, o con dos parámetros. Dentro del método mediante la utilización de las funciones func_num_args y func_get_args, obtenemos la información de los parámetros recibidos y redirigimos la petición al método protegido que corresponda.

Es importante tener en cuenta que este sistema nos puede causar problemas cuando trabajamos con objetos, ya que no es posible indicar que queremos pasar un determinado parámetro por referencia, recibiendo de esta forma todos por valor.

Comparte esta información

6 Comentarios para “Programación orientada a objetos en PHP4”

  1. cocososo dice:

    Excelente clase de PHP.

    Muchas gracias.

  2. Harlok.net - Mini curso de programacion a objetos en PHP4 dice:

    […] Dando un paseo por Google he visto un manual bastante claro de la programacion orientada a objetos con PHP4, esta en castellano y con sus ejemplos, aki teneis la direccion: http://www.eslomas.com/index.php/archives/2006/01/09/programacion-orientada-a-objetos-en-php4/1/ […]

  3. YOHANAGENES dice:

    me parece estupendo el concepto que utiliza el autor de este articulo.felicitaciones!

  4. meneame.net dice:

    Programación orientada a objetos en PHP4

    El título lo dice todo. Ideal para todos aquellos que programamos en PHP4 y no tratamos mucho con sus objetos.

  5. Inma dice:

    Muy buen documental, realmente.
    Perfectamente explicado y con ejemplos muy aclaratorios.

    Por otro lado, en el post Próximos artículos de PHP, indicabas como futura publicacion “Acceso a bases de datos”. Estaría muy interesada en saber cuál sería una buena estructura de acceso a datos en una aplicación web en PHP4 basada en clases y objetos, y siguiendo el modelo MVC.

    Muchas gracias!

  6. Gaston dice:

    ¡¡ Excelente exposicion !!
    Realmente de muy buen nivel, seguro de las cosas que hablas, las exlpicaciones de por qué referenciar un objeto (cuando lo creas), los tips.
    Muy claros ejemplos y su desarrollo.
    Mis felicitaciones.
    Saludos
    Gastón.

Deja un comentario