отражение — ссылка на метод PHP без использования строки

Предположим, у меня есть следующий код PHP:

class Foo {
function getBar() {
return 1;
}
}

function check( Foo $foo ) {
if ( $foo->getBar() == 1 ) {
// here could be more code ...
return 'Oh no, there was an error in class' .
get_class( $foo ) . ', method ' .
'getBar';
}
}

Последняя строка в check беспокоит меня, потому что если Foo::bar переименовывается с помощью инструмента рефакторинга, сообщение об ошибке будет неверным. Есть ли способ обойти это без использования строки где-нибудь?

1

Решение

Вы можете использовать __METHOD__, чтобы получить имя текущего метода.

Но получить ссылку на другой метод, который позволил бы вам выполнить какой-то автоматический рефакторинг — нет, это невозможно в php.

0

Другие решения

Может быть сделано с помощью method_exists ()

class Foo {
function getBar() {
return 1;
}
}

function check( Foo $foo , $method = 'getBar') {
if (!method_exists($foo, $method) ) {
// here could be more code ...
return 'Oh no, there was an error in class' .
get_class( $foo ) . ', method ' .
$method;
}
}
0

Это само по себе невозможно в PHP, но вы можете реализовать такую ​​функцию. Одна из возможных реализаций будет работать следующим образом: где-то путь к файлу, имя класса, имя метода и какое-то описание того, где и что должно совпадать с чем. Ваша новая функция при каждом запуске будет проверять заданные файлы, проверять, изменились ли некоторые значения, исправлять все, что нужно исправить, и регистрировать отчет о задаче. Было бы не просто реализовать что-то подобное, но важно отметить, что есть решение.

0