4.2. Objetos

PHP es un lenguaje de programación orientado a objetos, lo que significa que se pueden crear objetos, que pueden contener variables y funciones.

Cuando se habla de objetos, se hace referencia a las variables que pertenecen a estos objetos como propiedades o atributos, y las funciones se denominan métodos.

Estos objetos son esenciales cuando se trata de PHP, ya que casi todo es un objeto, por ejemplo, funciones o matrices son objetos, ¡también!

Y esto demuestra por qué usamos objetos: podemos agrupar nuestras funciones y datos en un solo lugar, podemos crear objetos usando fácilmente clases ( constructores de objetos), para crear un montón de instancias ( objetos construidos a través de una clase ), los cuales contienen en su mayoría los mismos datos, a excepción de algunos pequeños matices.

Clases en PHP

La forma general de definir una clase en PHP es la siguiente:

<?php
   class phpClass {
      var $var1;
      var $var2 = 'Constant tipo cadena';
      
      function mifuncion ($arg1, $arg2) {
         [..]
      }
      [..]
   }
?>

Donde

La declaración de variables comienza con la palabra reservada var, que es seguido por un nombre de variable; también pueden tener una asignación inicial a un valor constante.

Las definiciones de métodos se parecen mucho a las funciones de PHP independientes, pero son locales a la clase y serán utilizados para establecer y utlizar datos del objeto

Por ejemplo

<?php
   class Libro {
      /* Member variables */
      private $autor;
      private $editorial;
      private $titulo;
      
      /* Member functions */
      function setAutor($parametro){
         $this->autor = $parametro;
      }
      
      function getAutor(){
         echo $this->autor ."<br>";
      }

      function setEditorial($parametro){
         $this->editorial = $parametro;
      }
      
      function getEditorial(){
         echo $this->editorial ."<br>";
      }
 
      function setTitulo($parametro){
         $this->titulo = $parametro;
      }
      
      function getTitulo(){
         echo $this->titulo ." <br>";
      }
   }
?>

Cuando en el cuerpo de los métodos nos referimos a las propiedades para asignar algún valor, lo hacemos mediante la palabra reservada $this-> y, a continuación, el nombre de la variable sin el signo $, ¿Por qué? Por que ya lo tiene $this.

La palabra $this hace referencia a «este objeto», esta instancia, la que está ejecutando el método. Decir $this->autor = 'Pedro Palos' es lo mismo que decir: «asignar el valor Pedro Palos a la variable autor' de este objeto de la clase Libro.

Tanto las variables como los métodos son públicas si no se le dedine mediante un modificador de visibilidad

Cómo crear una instancia

Una vez definida la clase que servirá de modelo para nuestro trabajo, ya podemos empezar a crear objetos a partir de ese modelo. Cada objeto que hagamos a partir de una clase se denomina «instancia».

Para crear una instancia a partir de esta clase, en otro archivo llamado libro.php, incluiremos la clase y crearemos un objeto a partir de ella:

<?php
  include('libro.php');
  
  $libro1 = new libro();
  $libro2 = new libro();
  $libro3 = new libro();
?>

Funciones Constructor

Un constructor es tipo especial de función que aparecen de forma automática cada vez que se crea un objeto. Así que tomamos el máximo provecho de este comportamiento, inicializando muchas cosas a través de un constructor.

PHP proporciona una palabra reservada llamada __construct() para definir un constructor. El cual sirve para el paso de parámetros.

El siguiente ejemplo crea un constructor para la clase Libro, con el cual pódemos inicializar los objetos al momento de crearlos.

<?php
   class Libro {
     /* Member variables */
     private $autor;
     private $editorial;
     private $titulo;
     
     public function __toString() {
       return $this->autor.'.'.$this->titulo.'.'.$this->editorial.'<br>';
     }	  
     
	 /* Constructor */ 
	 function __construct( $parametro1, $parametro2, $parametro3 ) {
       $this->autor     = $parametro1;
       $this->editorial = $parametro2;
       $this->titulo    = $parametro3;
     }
   }
   
   $oLibro = new Libro('Pacheco','Programación Web','ITV');
   echo $oLibro;
?>

Generalmente todo aquello que es de vital importancia para el funcionamiento inicial del objeto se lo pasamos mediante el constructor.

PHP también proporciona un método llamado __toString que está definido por el programador, y que básicamente le dice a una clase de cómo actuar cuando se le trata como una cadena. Supongamos que tiene una clase llamada Libro, y un objeto de esa clase llamado $oLibro.

Si decide hacer algo como esto: 'echo $oLibro;', entonces ¿Qué seria exactamente la salida en ese escenario? Bueno, eso depende de usted - porque todo lo que se define en el método __toString es lo que va a ser la salida a la página -. Usted puede decidir imprimir todas las variables de instancia de la clase, la producción de una cadena en particular, etc. Pero lo que haga el método __toString tendrán que devolver una cadena

__toString es un método denominado mágico. De este u otros métodos puedes aprender más en la url proporcionada aquí

La definición de una función mágica es proporcionada por el programador - lo que significa que es responsabilidad de este la definición de dicha función.

Es importante recordar - PHP no proporciona las definiciones de las funciones mágicas - el programador debe escribir el código que l conforma. Pero, las funciones mágicas nunca serán llamadas directamente, por el programador - en realidad , PHP llamará a la función 'detrás de escena' . Esto es por lo que se denominan funciones de 'Magic' - Eporque nunca se les llama directamente, y permiten al programador hacer algunas cosas bastante potentes. ¿Confuso? Vea el código anterior usted lográ imprimir los datos del objeto pero jamás llamo explicitamente el método __toString

Object Oriented Programming in PHP

PHP soporta muchas de las funcionalidades que JAVA, para aprender más consulte Object Oriented Programming in PHP