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 ); ?> |
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 = 'neveropen' ; function print_neveropen() { print ( 'neveropen' ); } } // 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 ); ?> |
Geeks1 Object ( [a] => neveropen ) Geeks2 Object ( [a] => neveropen )
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 = 'neveropen' ; function print_neveropen() { print ( 'neveropen' ); } } // 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 ); ?> |
Geeks1 Object ( [a] => neveropen ) Geeks2 Object ( [a] => neveropen )
Note: In general, PHP doesn’t allow type casting of user defined classes, while conversion/casting can be achieved indirectly by approaches presented above.