ho letto qualcosa riguardo il type casting in PHP e cio' che ho scoperto mi e' piaciuto poco. E' possibile solo fare il type cast tra i tipi predefiniti?

Non è possibile castare un oggetto istanza di una classe ad una classe extended della prima?

Ad esempio, un po' di codice dal mio lavoro "odierno": una serie di classi per le operazioni in database, con eccezioni e qualche altra aggiunta
codice:
class TheClueMySQL extends mysqli {

public function __construct($server, $user, $password, $database){

@parent::__construct($server, $user, $password, $database);

if(mysqli_connect_errno()) throw new TheClueMySQLException(mysqli_connect_error(), mysqli_connect_errno()); 
}

public function query($sql){

return (TheClueMySqlResult) parent::query($sql);

}
}

class TheClueMySqlResult extends mysqli_result { }
Il cast in parentesi (TheClueMySqlResult) provoca errore. Su php.net ho trovato una funzione che, tramite serialize e unserialize, converte una classe in un'altra, ma funziona solo in alcuni casi (ad esempio quando converto un oggetto stdClass in un oggetto da esso derivato le proprietà sono accessibili, ma nn i metodi).

Supponendo di utilizzare la funzione, che posto di seguito, al posto del typecast che genera errore NON riesco ad accedere ad attributi e metodi della classe appena convertita

codice:
function typecast($old_object, $new_classname) {
   if(class_exists($new_classname)) {
       $old_serialized_object = serialize($old_object);
       $old_object_name_length = strlen(get_class($old_object));
       $subtring_offset = $old_object_name_length + strlen($old_object_name_length) + 6;
       $new_serialized_object  = 'O:' . strlen($new_classname) . ':"' . $new_classname . '":';
       $new_serialized_object .= substr($old_serialized_object, $subtring_offset);
       return unserialize($new_serialized_object);
     } else {
         return false;
     }
}
forse sto scatenando una tempesta in un bicchiere, ma...beh...sarebbe la prima volta che trovo una limitazione concettuale al buon vecchio PHP (almeno rispetto al java)