Open In App

PHP | Type Casting and Conversion of an Object to an Object of other class

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Given a PHP class object and the task is to convert or cast this object into object of another class.

Approach 1: Objects which are instances of a standard pre-defined class can be converted into object of another standard class.

Example:




<?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);
  
?>


Output:

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

Approach 2: Create a constructor for final class and add a foreach loop for assignment of all properties of initial class to instance of final class.

Example:




<?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);
  
?>


Output:

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

Approach 3: Write a function to convert object of the initial class into serialized data using serialize() method. Unserialize this serialized data into instance of the final class using unserialize() method.
Note: Member functions cannot be transferred using this approach. This approach can only be used if initial class contains only variables as members.

Example:




<?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);
  
?>


Output:

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

Note: In general, PHP doesn’t allow type casting of user defined classes, while conversion/casting can be achieved indirectly by approaches presented above.



Last Updated : 09 Jan, 2019
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads