Chiamata di metodo statico PHP con nome di class variabile e spazi dei nomi

Sto provando a call un metodo statico per una class con nomi assegnati da un'altra class con lo stesso spazio dei nomi. Ma il nome dell'altra class è contenuto in una variabile:

<?php namespace MyApp\Api; use \Eloquent; class Product extends Eloquent { public static function find($id) { //.... } public static function details($id) { $product = self::find($id); if($product) { $type = $product->type; // 'Book' $product = $type::find($product->id); return $product; } } } 

Ecco la class del Book :

 <?php namespace MyApp\Api; use \Eloquent; class Book extends Eloquent { public static function find($id) { //.... } } 

La mia variabile type contiene un nome di class valido qui Book . Questa class si trova nella stessa cartella e utilizza lo stesso spazio dei nomi. Questo codice restituisce l'errore Class 'Book' not found . Ho provato diverse varianti (dalle domande SO che ho trovato) usando i backslash, o la function call_user_func , ma niente ha funzionato. Qualcuno sa cosa c'è che non va?

Quando si utilizza una variabile per fare riferimento alla class, è necessario utilizzare un nome completo . Prova questo…

 $type = __NAMESPACE__ . '\\' . $product->type; $product = $type::find($product->id);