Я пытаюсь вызвать статический метод для класса с именами из другого класса с тем же пространством имен. Но другое имя класса содержится в переменной:
<?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) { //.... } }
Моя переменная типа содержит допустимое имя класса здесь. Этот класс находится в одной папке и использует одно и то же пространство имен. Этот код возвращает ошибку Class 'Book' not found
. Я попробовал несколько вариантов (из вопросов, которые я нашел), используя обратную косую черту или функцию call_user_func
, но ничего не call_user_func
. Кто-нибудь знает, что случилось?
При использовании переменной для ссылки на ваш класс вам необходимо использовать полное имя . Попробуй это…
$type = __NAMESPACE__ . '\\' . $product->type; $product = $type::find($product->id);