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);