Open In App

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

Last Updated : 09 Jan, 2019
Comments
Improve
Suggest changes
Like Article
Like
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
// 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
// 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
// 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.

Next Article

Similar Reads