2014-01-12 166 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函數的幾個變體(從我發現的SO問題),但沒有任何工作。 任何人都知道什麼是錯的?

回答

10

當使用變量來引用您的課程時,您需要使用完全限定名稱。試試這個...

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

太棒了,工作!謝啦 ! – 3rgo

相關問題