Там нет возможности для этого в PHP, и, вероятно, никогда не будет.
Любой такой метод должен существовать глобально на протяжении всего PHP-скрипта (для него не существует контекста контекста), и его существование, вероятно, усложнит код для такого необычного требования.
Это также подразумевает некоторые слегка странные правила видимости: если предположить, что $non_object->method(42);
было переведен как magic_non_object_call($non_object, 'method', array(42));
левого операнда ($non_object
) должен быть передан в любом по значению (в этом случае он не может быть записан обратно) или по ссылке (для чего PHP требует отказаться от оптимизаций памяти «копирование на запись» для этой переменной). Обратите внимание, что объекты представлены дополнительным уровнем абстракции, так что $this
(и объекты, переданные или скопированные «по значению») фактически содержат дескриптор для «реального» объекта, избегая этой точной проблемы.
По сути, единственная причина, по которой вам нужно это сделать, - обработчик ошибок «последний канал» - если ваш код таков, что вы не можете определить, является ли данная переменная объектом или нет, то есть ошибка. К сожалению, это смертельная ошибка, поэтому я не думаю, что вы можете ее поймать/обработать. (Обратите внимание, что это не Исключение: очень мало встроенных бросков PHP Исключения.)
Это потребует от меня изменить весь код, я ищу глобальное решение ... – TCB13