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
$a = 1;
var_dump( $a );
$a = (float) $a ;
var_dump( $a );
$a = (double) $a ;
var_dump( $a );
$a = (real) $a ;
var_dump( $a );
$a = (int) $a ;
var_dump( $a );
$a = (integer) $a ;
var_dump( $a );
$a = (bool) $a ;
var_dump( $a );
$a = (boolean) $a ;
var_dump( $a );
$a = (string) $a ;
var_dump( $a );
$a = ( array ) $a ;
var_dump( $a );
$a = (object) $a ;
var_dump( $a );
$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
class Geeks1 {
var $a = 'geeksforgeeks' ;
function print_geeksforgeeks() {
print ( 'geeksforgeeks' );
}
}
class Geeks2 {
public function __construct( $object ) {
foreach ( $object as $property => $value ) {
$this -> $property = $value ;
}
}
}
$object1 = new Geeks1();
print_r( $object1 );
$object1 = new Geeks2( $object1 );
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
class Geeks1 {
var $a = 'geeksforgeeks' ;
function print_geeksforgeeks() {
print ( 'geeksforgeeks' );
}
}
class Geeks2 {
}
function convertObjectClass( $object , $final_class ) {
return unserialize(sprintf(
'O:%d:"%s"%s' ,
strlen ( $final_class ),
$final_class ,
strstr ( strstr (serialize( $object ), '"' ), ':' )
));
}
$object1 = new Geeks1();
print_r( $object1 );
$object1 = convertObjectClass( $object1 , '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.