PHP | Tipo Casting y Conversión de un Objeto a un Objeto de otra clase

Dado un objeto de clase PHP y la tarea es convertir o convertir este objeto en un objeto de otra clase.

Enfoque 1: los objetos que son instancias de una clase predefinida estándar se pueden convertir en objetos de otra clase estándar.

Ejemplo:

<?php
// PHP program to show 
// standard type casting
  
$a = 1;
var_dump($a);
  
// int to float
$a = (float) $a;
var_dump($a);
  
// float to double
$a = (double) $a;
var_dump($a);
  
// double to real
$a = (real) $a;
var_dump($a);
  
// real to int
$a = (int) $a;
var_dump($a);
  
// int to integer
$a = (integer) $a;
var_dump($a);
  
// integer to bool
$a = (bool) $a;
var_dump($a);
  
// bool to boolean
$a = (boolean) $a;
var_dump($a);
  
// boolean to string
$a = (string) $a;
var_dump($a);
  
// string to array
$a = (array) $a;
var_dump($a);
  
// array to object
$a = (object) $a;
var_dump($a);
  
// object to unset/NULL
$a = (unset) $a;
var_dump($a);
  
?>
Producción:

int(1)
float(1)
float(1)
float(1)
int(1)
int(1)
bool(true)
bool(true)
string(1) "1"
array(1) {
  [0]=>
  string(1) "1"
}
object(stdClass)#1 (1) {
  [0]=>
  string(1) "1"
}
NULL

Enfoque 2: Cree un constructor para la clase final y agregue un ciclo foreach para la asignación de todas las propiedades de la clase inicial a la instancia de la clase final.

Ejemplo:

<?php
// PHP program to convert an class object
// to object of another class
  
// Original class
class Geeks1 {
      
    var $a = 'geeksforgeeks';
      
    function print_geeksforgeeks() {
        print('geeksforgeeks');
    }
}
  
// Final class
class Geeks2 {
  
    // Constructor function of class Geeks2
    public function __construct($object) {
  
        // Initializing class properties
        foreach($object as $property => $value) {
            $this->$property = $value;
        }
    }
}
  
// Initializing an object of class Geeks1
$object1 = new Geeks1();
  
// Printing original object of class Geeks1
print_r($object1);
  
// Initializing an object of class Geeks2
// using an object of class Geeks1
$object1 = new Geeks2($object1);
  
// Printing object of class Geeks2
print_r($object1);
  
?>
Producción:

Geeks1 Object
(
    [a] => geeksforgeeks
)
Geeks2 Object
(
    [a] => geeksforgeeks
)

Enfoque 3: escriba una función para convertir el objeto de la clase inicial en datos serializados utilizando el método serialize(). Deserialice estos datos serializados en una instancia de la clase final usando el método unserialize().
Nota: las funciones de los miembros no se pueden transferir con este enfoque. Este enfoque solo se puede usar si la clase inicial contiene solo variables como miembros.

Ejemplo:

<?php
// PHP program to convert an class object 
// to object of another class
  
// Original class
class Geeks1 {
      
    var $a = 'geeksforgeeks';
      
    function print_geeksforgeeks() {
        print('geeksforgeeks');
    }
}
  
// Final class
class Geeks2 {
      
    /* Empty abstract class */
}
  
// Function to convert class of given object
function convertObjectClass($object, $final_class) {
    return unserialize(sprintf(
        'O:%d:"%s"%s',
        strlen($final_class),
        $final_class,
        strstr(strstr(serialize($object), '"'), ':')
    ));
}
  
// Initializing an object of class Geeks2
$object1 = new Geeks1();
  
// Printing original object of class Geeks1
print_r($object1);
  
// Converting an object of class Geeks1
// into an object of class Geeks2
$object1 = convertObjectClass($object1, 'Geeks2');
  
// Printing object of class Geeks2
print_r($object1);
  
?>
Producción:

Geeks1 Object
(
    [a] => geeksforgeeks
)
Geeks2 Object
(
    [a] => geeksforgeeks
)

Nota: en general, PHP no permite la conversión de tipos de clases definidas por el usuario, mientras que la conversión/transmisión se puede lograr indirectamente mediante los enfoques presentados anteriormente.

Publicación traducida automáticamente

Artículo escrito por Harshit Saini 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 *