Programación orientada a objetos con PHP (VI), el costructor

el constructor en programacion orientada a objetos

 

Métodos mágicos y constantes revelados

PHP orientado a objetos ofrece varios métodos y constantes mágicos que permiten mucha programación con muy poco código, pero que presentan algunas desventajas, como una ligera reducción en el tiempo de rendimiento y en el nivel de claridad del código.

Hay mucha disputa sobre el uso de métodos mágicos, por lo que en este tutorial explicamos las partes del campo que están ampliamente de acuerdo, pero ignoramos las partes en disputa.

 

El método mágico __construct ()

Los nombres de los métodos mágicos siempre comienzan con dos guiones bajos, y el método mágico __construct () no es una excepción. Usamos __construct () para hacer algo tan pronto como creamos un objeto fuera de una clase. Un método de este tipo se llama constructor . Usualmente usamos el constructor para establecer un valor para una propiedad.

En nuestro ejemplo simple, queremos establecer el valor de la propiedad $model tan pronto como creamos el objeto, por lo que agregamos un constructor dentro de la clase que establece el valor de la propiedad $model .

 

class Car{ 
private $model; 

public function __construct ($model)   { 
$this -> model = $model;   
} 
}

Para usar el constructor, tenemos que pasar un argumento a la clase con el nombre del modelo tan pronto como creamos el objeto, pero si intentamos crear un nuevo objeto sin asignar el valor que necesita el constructor, lo haremos encontrar un error

$car1 = new Car();

Resultado:
Warning: Missing argument 1 for Car::__construct()

 

Para evitar tal error, tenemos que asignar un valor al constructor. Por lo tanto, por ejemplo, asignamos el valor «Mercedes» al constructor escribiéndolo dentro de los corchetes del objeto recién creado.

 $car1 = new Car( "Mercedes" );

Ahora, agreguemos el método getCarModel() para hacer eco del modelo del automóvil a partir del objeto que acabamos de crear.

class Car { 
private $model; 

//__construct  
public function __construct ($model)  { 
$this -> model = $model; 
} 

public function getCarModel()  { 
return ' El modelo de coche es: ' . $this -> model;  
} 
} 

//Pasamos el valor de la variable una vez que creamos el objeto
$car1 = new Car( "Mercedes" ); 
echo $car1 -> getCarModel();
 

Resultado:
El modelo de coche es: Mercedes.

 

¿Cómo escribir un método de constructor sin arriesgar un error?

Cuando intentamos crear un objeto que tenga un método de constructor, corremos el riesgo de que nuestro código se rompa si no le pasamos un valor al constructor.

Para evitar este riesgo, podemos definir un valor predeterminado para las propiedades que nos gustaría establecer a través del constructor. El valor predeterminado puede ser la opción más razonable para la propiedad, cero, una cadena vacía o incluso un valor nulo.

Si usamos un valor nulo como valor predeterminado, podemos usar una condición para evaluar si se pasó un valor y luego, solo en ese caso, asignar el valor a la propiedad.

En el ejemplo a continuación, le damos un valor predeterminado de nulo a la propiedad $model y, solo si se pasa un valor al constructor, asignamos este valor a la propiedad. En cualquier otro caso, la propiedad $model tiene un valor predeterminado de cadena «N / A» .

class Car { 
// La propiedad $model tiene un valor predeterminado de "N/A" 
private $model = "N/A" ; 

// No tenemos que asignar un valor a la propiedad $model
// ya que tiene un valor predeterminado 

public function __construct($model = null)  { 
// Solo si se pasa el valor del modelo, se le asignará   
if($model)    { 
$this -> model = $model;    
}  
} 

public function getCarModel()  { 
return ' El modelo de coche es: ' . $this -> model;  
} 
} 

//Creamos el nuevo objeto Car sin pasar un valor al modelo
$car1 = new Car(); 
echo $car1 -> getCarModel();
 

Aunque creamos el objeto sin pasar un valor a la propiedad del modelo, no causamos un error porque la propiedad del modelo en el constructor tiene un valor predeterminado de nulo.

Resultado:
El modelo del automóvil es: N / A

Por otro lado, veamos qué sucede cuando definimos el modelo una vez que creamos el objeto. En el ejemplo, asignamos el valor «Mercedes» a la propiedad $model tan pronto como creamos el objeto.

class Car { 
private $model = '' ; 

//__construct 
public function __construct($model = null)  {    
if($model)    { $this -> model = $model;   
 }  
} 

public function getCarModel()  { r
eturn ' El modelo de coche es: ' . $this -> model;  
} 
} 

$car1 = new Car( 'Mercedes' ); 
echo $car1 -> getCarModel();
 

 

Resultado:
El modelo de coche es: Mercedes

 

Constantes mágicas

Además de los métodos mágicos, el lenguaje PHP ofrece varias constantes mágicas.

Por ejemplo, podemos usar la constante mágica __CLASS__ (las constantes mágicas están escritas en mayúsculas y tienen el prefijo y el sufijo con dos subrayados) para obtener el nombre de la clase en la que reside.

Echemos un vistazo al siguiente ejemplo en el que usamos la constante mágica __CLASS__ en el método getCarModel() para obtener el nombre de la clase:

 

class Car { 
private $model = '' ; 

public function __construct($model = null)  {    
if($model)    { 
$this -> model = $model;    
}  
} 

public function getCarModel()  { 
//Usamos la constante mágica __CLASS__ para obtener el nombre de la clase
return " The <b>" . __CLASS__ . "</b> model is: " . $this -> model;  
} 
} 

$car1 = new Car( 'Mercedes' ); 
echo $car1 -> getCarModel();
 

Resultado:
The Car model is: Mercedes

 

Otras constantes mágicas que pueden ser de ayuda son:

__LINE__ para obtener el número de línea en el que se usa la constante.
__FILE__ para obtener la ruta completa o el nombre de archivo en el que se usa la constante.
__METHOD__ para obtener el nombre del método en el que se usa la constante.

 

En el próximo tutorial , aprenderemos sobre la herencia , un principio de la programación orientada a objetos que puede salvarnos de repetirnos.

Compartir esta entrada.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

CAPTCHA ImageChange Image