2014-01-12 18 views
5

同じ名前空間を持つ別のクラスから名前空間クラスの静的メソッドを呼び出そうとしています。しかし、他のクラスの名前を変数に含まれています。ここでは可変クラス名と名前空間を持つPHP静的メソッド呼び出し

<?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; 
     } 
    } 
} 

Bookクラスです:

<?php 

namespace MyApp\Api; 
use \Eloquent; 

class Book extends Eloquent { 

    public static function find($id) 
    { 
     //.... 
    } 

} 

マイ型の変数は、ここでは、有効なクラス名Bookが含まれています。このクラスは同じフォルダにあり、同じ名前空間を使用します。 このコードは、エラーClass 'Book' not foundを返します。 バックスラッシュ、またはcall_user_func機能を使用していくつかのバリエーション(私が見つけたその質問から)を試しましたが、何も機能しませんでした。 何が間違っているのは誰でも知っていますか?

答えて

10

変数を使用してクラスを参照する場合は、完全修飾名を使用する必要があります。試してみてください...

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

恐ろしいですね!ありがとう ! – 3rgo

関連する問題