Programación orientada a objetos en PHP4

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.

<?php
 
 
$a = 'salida por defecto';
 
$v1 =& $a;
$v2 =& $a;
 
echo $a."\n";  // -> salida por defecto
echo $v1."\n"; // -> salida por defecto
echo $v2."\n"; // -> salida por defecto
 
$v2 = 'Salida modificada';
 
echo $a."\n";  // -> salida modificada
echo $v1."\n"; // -> salida modificada
echo $v2."\n"; // -> Salida modificada
 
 
?>

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.

<?php
 
 
class Punto{
   var $x = 0;
   var $y = 0;
   function Punto($x, $y){
      $this->x = $x;
      $this->y = $y;
   }
}
 
class Ejemplo{
 
   function metodo1($p){
      $p->x = 123;
      $p->y = 123;
   }
 
   function metodo2(&$p){
      $p->x = 123;
      $p->y = 123;
   }
}
 
$punto =& new Punto(1,1);
 
print_r($punto);
 
Ejemplo::metodo1($punto);
print_r($punto);           // -> 1,1
 
 
Ejemplo::metodo2($punto);
print_r($punto);           // -> 123,123
 
 
?>

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.

Páginas: 1 2 3

Twitter Digg Delicious Stumbleupon Technorati Facebook Email

7 Respuestas para “Programación orientada a objetos en PHP4”

  1. Excelente clase de PHP.

    Muchas gracias.

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

  3. 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!

  4. ¡¡ 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.

Trackbacks/Pingbacks

  1. Harlok.net - Mini curso de programacion a objetos en PHP4 - 06. Mar, 2006

    […] 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/ […]

  2. meneame.net - 23. Ago, 2006

    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.

  3. EsLoMas.com » Serialización de objetos en PHP5 - 04. Ago, 2008

    […] Hace ya más de dos años hablé sobre ella en un extenso artículo dedicado a la programación orientada a objetos con PHP4. En esta ocasión voy a aportar un poco de luz sobre alguna característica peculiar de la serialización de objetos en PHP5. […]