Вопрос

Я использую ge_called_class Hack для обеспечения позднего статического связывания в PHP версии 5.2 (найдено здесь).

У меня есть следующее в моем коде:

# db_record.php
$ac = "ForumThread";
$objects = $ac::find("all");

Это не будет работать в PHP 5.2 по какой-то причине, поэтому я сделал это:

# db_record.php
$ac = "ForumThread";
eval("\$objects = {$ac}::find('all');");

Это с другой стороны не будет работать с get_called_class функция. Я получаю ошибку, что file Функция не может прочитать оценочный раздел код.

Это было полезно?

Решение

Если вы используете eval, ваше решение не так.

Почему ваша неработающая версия не работает? Что не так? Какое полное и полное сообщение об ошибке?

Пользовательская версия get_called_class Выполняет заднюю норму и пытается открыть файл вызывающего абонента, чтобы определить имя класса. Причина, по которой Eval не удается, заключается в том, что Backtrace Eval не предоставляет имя файла.

(Редактировать: также, что get_called_class взломать очень взломать. Есть ли причина, по которой вы не можете использовать 5.3?)

Вы пытались использовать call_user_func.? call_user_func(array($ac, 'find'), 'all') должен Позвоните статическому методу find для имени класса, содержащегося в $ac с параметрами 'all'. Отказ Смотрите также то Обратный вызов Pseudo-Type и пример «Тип 2» в определенном виде

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top