Chamada de método estático PHP com nome de classe variável e espaços para nome

Estou tentando chamar um método estático para uma classe no namespace de outra classe com o mesmo espaço para nome. Mas o nome da outra classe está contido em uma variável:

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

Aqui está oBook classe :

<?php

namespace MyApp\Api;
use \Eloquent;

class Book extends Eloquent {

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

}

Minha variável de tipo contém um nome de classe válido aquiBook. Esta classe está na mesma pasta e usa o mesmo espaço para nome. Este código retorna o erroClass 'Book' not found. Tentei várias variações (das perguntas SO que encontrei) usando barras invertidas ou ocall_user_func função, mas nada funcionou. Alguém sabe o que há de errado?

questionAnswers(2)

yourAnswerToTheQuestion