¿Cómo imitar múltiples constructores en PHP?

Los constructores son funciones miembro especiales para la configuración inicial de instancias de objetos recién creados de una clase. 

En PHP, un constructor es un método llamado __construct() , que se llama con la palabra clave new después de crear el objeto. Los constructores también pueden aceptar argumentos, en cuyo caso, cuando se escribe la nueva declaración, también debe enviar los argumentos del constructor para los parámetros.

Los constructores son los bloques de construcción muy básicos que definen el objeto futuro y su naturaleza. Puede decir que los constructores son los modelos para la creación de objetos que proporcionan valores para las funciones miembro y las variables miembro.

Tipos de constructores:

  • Constructor predeterminado : no tiene parámetros, pero los valores al constructor predeterminado se pueden pasar dinámicamente.
  • Constructor parametrizado: toma los parámetros y también puede pasar diferentes valores a los miembros de datos.
  • Copy Constructor: Acepta la dirección de los demás objetos como parámetro.

Nota: PHP carece de soporte para declarar múltiples constructores de diferentes números de parámetros para una clase a diferencia de lenguajes como Java.

Múltiples constructores: hay disponible más de un constructor en una sola clase para inicializar instancias.

Ejemplo 1: en el siguiente ejemplo, creamos un script e intentamos declarar varios constructores. Asignaremos el nombre de un alumno con un constructor y la edad con otro constructor.

PHP

<?php
class Student {
     
    // Constructor with 1 parameter
    public function __construct(string $name) {
          
    }
  
    // Constructor with 2 parameters
    public function __construct(string $name, string $age) {
          
    }
}
  
$obj1 = new Student('Akshit');
$obj2 = new Student('Akshit', '12');
  
?>

Producción:

PHP Fatal error:
Cannot redeclare Student::__construct() in 
/home/33a7c36527d199adf721ab261035d4f7.php on line 10

Tenemos que usar diferentes métodos para usar Constructores Múltiples en PHP. Algunos se enumeran a continuación.

Acercarse:

  • Obtenga todos los argumentos asignados usando PHP func_get_arg()
  • Primero contaremos el número de argumentos pasados ​​al constructor usando PHP func_num_args().
  • Al conocer el tipo de argumentos usando PHP gettype() o una función específica de tipo de datos como is_int() .
  • Asigne un nombre a su método según la cantidad de argumentos y verifique su existencia usando PHP method_exists() .
  • Llame a la función adecuada usando call_user_func_array() pasando los argumentos originales como el segundo argumento de call_user_func_array() .

Ejemplo 2:

PHP

<?php
  
class Student {
  
    public function ConstructorWithArgument1($arg1) {
        echo('Constructor with 1 parameter called: '.$arg1)."<br>";
    }
      
    public function ConstructorWithArgument2($arg1, $arg2) {
        echo('Constructor with 2 parameters called: 
            '.$arg1.','.$arg2)."<br>";
    }
      
    public function ConstructorWithArgument3($arg1, $arg2, $arg3) {
        echo('Constructor with 3 parameters called: 
        '.$arg1.','.$arg2.','.$arg3)."<br>";
    }
    public function __construct() {
        $arguments = func_get_args();
        $numberOfArguments = func_num_args();
  
        if (method_exists($this, $function = 
                'ConstructorWithArgument'.$numberOfArguments)) {
            call_user_func_array(
                        array($this, $function), $arguments);
        }
    }
}
  
// Constructor with 1 parameter
$obj = new Student('Akshit'); 
  
// Constructor with 2 parameters
$obj = new Student('Akshit','Nikita'); 
  
// Constructor with 3 parameters 
$obj = new Student('Akshit','Nikita','Ritesh'); 
  
?>
Producción

Constructor with 1 parameter called: Akshit
Constructor with 2 parameters called: Akshit,Nikita
Constructor with 3 parameters called: Akshit,Nikita,Ritesh

Acercarse:

  • Compruebe el tipo de argumento que se pasa con el constructor. Se puede hacer usando gettype() o una función específica de tipo de datos como is_int() .
  • Determine el tipo e inicialice la variable de instancia.

Ejemplo 3: El siguiente ejemplo muestra múltiples constructores con diferentes tipos de datos como string o entero.

PHP

<?php
class Student {
  
    public $id;
    public $name;
    // etc.
   
    public function __construct($idOrName) {
      
        if(is_int($idOrName)) {
              
            $this->id=$idOrName;
            echo "ID is initialized using constructor"."<br>";
            // other members are still uninitialized
        }
        else {
            $this->name = $idOrName;
            echo "Name is initialized using constructor"."<br>";
        }
    }
     
    public function setID($id) {
        $this->id = $id;
    }
     
    public function setName($name) {
        $this->name = $name;
    }
     
    public function getinfo() {
        echo "ID : ". $this->id."<br>";
        echo "Name : ". $this->name."<br>";
    }
}
   
// Create instance
$student = new Student("Akshit");
$student->setID(1);
$student->getinfo();
   
$student2 = new Student(2);
$student2->setName("Nikita");
$student2->getinfo();
  
?>
Producción

Name is initialized using constructor
ID : 1
Name : Akshit
ID is initialized using constructor
ID : 2
Name : Nikita

Publicación traducida automáticamente

Artículo escrito por akshitsaxenaa09 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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