Чтобы упростить задачу, я заметил, что PHP, похоже, не предлагает какой-либо магической константы для определения имени, на которое свойство было изменено в классе. Поскольку на словах это звучит для меня запутанно, я приведу пример, так как это довольно просто, и я ожидал бы, что он будет где-то в новом PHP 5.5, я не вижу способа сделать это. Итак, вот оно:
Скажем, у нас есть некоторый класс, который использует некоторую черту, которая конфликтует с некоторой функцией внутри класса, например:
class SomeClass {
use \Name\Space\SomeTrait { SomeFunction as private NewFunctionName; }
function SomeFunction() {
$this->NewFunctionName();
}
}
Поскольку, очевидно, этот класс имеет функцию «SomeFunction», и мы знаем, что внутри SomeTrait, который мы включили, есть функция, имя которой соответствует функции, которая есть у нас внутри этого класса. Теперь, поскольку «SomeFunction» попала в этот класс через трейт внутри \Name\Space, эти 2 функции делают 2 разные вещи, но используют одно и то же имя и внутри либо другой функции, либо буквально нашей «SomeFunction». , затем мы используем «SomeFunction» из нашего типажа, вызывая его по «NewFunctionName».
Так что, надеюсь, я никого здесь не потерял, так как вот к чему сводится мой вопрос в приведенном выше сценарии. Как в \Name\Space\SomeTrait\SomeFunction() можно получить "NewFunctionName", которому также была назначена эта функция типажа? Можно было бы подумать об использовании магического метода, такого как __ФУНКЦИЯ__, или __МЕТОД__, или даже __TRAIT__, за исключением того, что ни один из них не дает ожидаемого результата, поэтому кто-нибудь знает способ получить эту информацию, не передавая ее функции в качестве параметра и приводя к хакерский код? Возможно, в PHP 5.6 нужно добавить новую магическую константу __AS__ или скорректировать результат __TRAIT__. , я не понимаю, почему __TRAIT__ и __FUNCTION_ должны возвращать одну и ту же информацию (или почти та же информация). Любая помощь была бы потрясающей, если бы это был нетрадиционный хакерский метод, мне интересно посмотреть мои варианты, пока я не смогу открыть отчет об ошибке с php по этому поводу. (если это действительно баг)
изменить:
Мой текущий, наименее хакерский метод, кажется,
debug_backtrace()[0]['function']
и хотя это работает, я чувствую, что для получения простой строки требуется много усилий, особенно если вы часто используете эту функцию. :/