dominios y alojamiento web en hostalia

Constructores en PHP 5

14 de diciembre de 2004
Valoración del artículo:
Vamos a ver qué es un constructor y para que sirven, además de un sencillo ejemplo de una clase que define un constructor.
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
Los constructores se encargan de resumir las acciones de inicialización de los objetos. Cuando se instancia un objeto, se tienen que realizar varios pasos en su inicialización, por ejemplo dar valores a sus atributos y eso es de lo que se encarga el constructor. Los constructores pueden recibir unos datos para inicializar los objetos como se desee en cada caso.

La sintaxis para la creación de constructor varía con respecto a la de PHP 3 y 4, pues debe llamarse con un nombre fijo: __construct(). (Son dos guiones bajos antes de la palabra "construct")

A lo largo de los ejemplos de este manual vamos a ir creando un código para gestión de un videoclub. Vamos a empezar definiendo una clase cliente, que utilizaremos luego en nuestro programa.

class cliente{
    var $nombre;
    var $numero;
    var $peliculas_alquiladas;

    function __construct($nombre,$numero){
       $this->nombre=$nombre;
       $this->numero=$numero;
       $this->peliculas_alquiladas=array();
    }

    function dame_numero(){
       return $this->numero;
    }
}


El constructor en esta clase recibe el nombre y número que asignar al cliente, que introduce luego en sus correspondientes propiedades. Además inicializa el atributo películas_alquiladas como un array, en este caso vacío porque todavía no tiene ninguna película en su poder.
Nota: En programación orientada a objetos $this hace referencia al objeto sobre el que se está ejecutando el método. En este caso, como se trata de un constructor, $this hace referencia al objeto que se está construyendo. Con $this->nombre=$nombre; estamos asignando al atributo “nombre” del objeto que se está construyendo el valor que contiene la variable $nombre, que se ha recibido por parámetro.

Luego hemos creado un método muy sencillo para poder utilizar el objeto. Vamos a ver unas acciones simples para ilustrar el proceso de instanciación y utilización de los objetos.

//instanciamos un par de objetos cliente
$cliente1 = new cliente("Pepe", 1);
$cliente2 = new cliente("Roberto", 564);

//mostramos el numero de cada cliente creado
echo "El identificador del cliente 1 es: " . $cliente1->dame_numero();
echo "El identificador del cliente 2 es: " . $cliente2->dame_numero();


Este ejemplo obtendría esta salida como resultado de su ejecución:

El identificador del cliente 1 es: 1
El identificador del cliente 2 es: 564

Compartir en redes sociales

Comentarios
Fueron enviados 12 comentarios al artículo
4 comentarios no revisados
8 comentarios revisados:
Por: jurix
18/3/2005
Creo recordar que a la hora de declarar las variables miembro de la clase no se utiliza var (ha quedado desaprobado, creo!!) en php5, sino que directamente el método de acceso public, private, protected $nombreVariable;

public $numero;
private $usuario;

Por: Gustavo
20/11/2007
Quisiera saber si en PHP se puede utilizar más de un constructor como puede hacerse en C++ con distintos tipos de datos de iniciación.
Por: Sidh
27/2/2008
Un apunte q puede ser interesante, y que no se hace referencia en el articulo, sobre todo para novatos es que ademas de "inicializar" propiedades mediante el uso de constructores, en el cuerpo de estos podemos inicializar cualquier propiedad que deseemos como resultado del valor devuelto por un método.
Por poner un ejmplo.
Tengo una clase sencilla cuyo constructor me inicializa algunos valoes de la fecha y en el que ademas quiero verificar si el año actual es un año bisiesto o no.
El constructor seria parecido a este:
class fechas
{
public $mes;
public $dia;
public $año;
public $limite;
public $bisiesto;

function __construct()
{
$fecha=getdate();
$this->mes=$fecha[mon];
$this->dia=$fecha[mday];
$this->año=$fecha[year];
$this->bisiesto=$this->es_bisiesto();
$this->limite=$this->calcula_limite();
}
private function es_bisiesto()
{
if(($this->año%4==0 && $this->año%100!=0)|| $this->año%400==0)
return true;
else
return false;
}
}

De esta forma al llamar al metodo es_bisesto en el constructor de la clase inicializaremos el valor de la propiedad bisiesto a true o false en funcion de si es un año bisiesto o no. Los metodos llamados en el constructor siempre tienen q devolver algun valor a la hora de ser asignados a una propiedad.
Asi cuando en nuestor codigo llamemos a la clase:
$fecha=new fechas() podremos manejar el resultado de la propiedad bisiesto para darle la funcionalidad q deseemos.
nota
Por: alternop
23/7/2009
//instanciamos un par de objetos cliente => en realidad aca no hay instancia sino creacion de objeto.

$cliente1: es la variable de referencia al objeto
new cliente: es la creacion del objeto cliente.
("pepe",1): los parametros actuales oh argumentos, mas bien los atributos del objeto se colocan oh cargan.

$cliente1 = new cliente("Pepe", 1);
$cliente2 = new cliente("Roberto", 564);

-------------------------------------------------------------------------------

//mostramos el numero de cada cliente creado => aca si hay instancia.

$cliente1: es la variable de referencia al objeto cliente.
->: es el operador que me permite acceder a los metodos oh procesos del objeto
dame_numero(): es un proceso invocado oh metodo llamado.

lo pongo asi para saber que esto es una instancia.

echo "El identificador del cliente 1 es: " . $cliente1->dame_numero();
echo "El identificador del cliente 2 es: " . $cliente2->dame_numero();

de todas el tutorial esta fino...
uso de var y nombres de constructor
Por: Néstor
28/10/2009
ya probe en php5 con usar directamente public o private y no funciona. aun se tiene q usar var para las variables. las funciones igual, en ambos casos se pone un underscore antes del nombre de la variable o de la funcion cuando se quieren dejar privadas.

en cuanto al constructor, es opcional -desde php4 ya se usaba- nombrar al funcion constructora __construct. Se puede usar como constructor una funcion con el mismo nombre de la clase. Pero al igual q Gustavo, tambien me asalta la duda de multiples constructores en php.
instaciación y creación
23/3/2010
Hola,

alternop comentaba que no hay instanciación sino creación. Totalmente de acuerdo, pero ambas cosas son lo mismo.

Instancia es una mala traducción de instance, pero que en el mundo de la programación orientada a objetos se utiliza, se admite y todo el mundo lo entiende.

Instanciación es la creación de una instancia. Durante el proceso de instanciación se crea un objeto a partir de las especificaciones de una clase. De nuevo es una mala traducción, pero en España es así como lo explican en la universidad, de modo que es un término aceptado académicamente.

gustavo...
duda
04/8/2010
Ante todo, muy buen manual.

Mi duda es la siguiente. Para hacer una simple prueba (pues soy novato) escribir este codigo.

class prueba
{
var $a,$b;
var $c;

function __construct($a,$b) {
$this->a=$a;
$this->b=$b;
$this->c=$c;

}
function mostrar(){


echo "el valor de a es $this->a y el valor de b es $this->b";
}
}

$prueba= new prueba(1,5);
$prueba->mostrar();

Pero cuando ejecuto el codigo me dice que en la linea 10 ($this->c=$c;) la variable no ha sido definida. Por que sucede esto? Solo quiero pasarle 2 variables por parametro al constructor y $c quiero que contenga la suma de $a y $b en el metodo pero me da error tambien en el metodo y me dice que la variable no esta definida. Como seria entonces?

EL_FIEL
Felicitaciones...
30/4/2011
Muy didactico e ilustrativo, sigan publicando asi... muy bueno para newbies...

Manuales relacionados
Categorias relacionadas
El autor
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...