PHP静态方法调用变量类名和命名空间

3rg*_*rgo 9 php static-methods namespaces

我正在尝试从具有相同名称空间的另一个类调用名称空间类的静态方法.但是另一个类的名称包含在变量中:

<?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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是Book班级:

<?php

namespace MyApp\Api;
use \Eloquent;

class Book extends Eloquent {

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

}
Run Code Online (Sandbox Code Playgroud)

我的类型变量在此处包含有效的类名Book.此类位于同一文件夹中,并使用相同的命名空间.此代码返回错误Class 'Book' not found.我尝试了几种变体(我发现的SO问题)使用反斜杠或call_user_func函数,但没有任何效果.谁知道什么是错的?

Phi*_*hil 15

使用变量引用类时,需要使用完全限定名称.试试这个...

$type = __NAMESPACE__ . '\\' . $product->type;
$product = $type::find($product->id);
Run Code Online (Sandbox Code Playgroud)