不使用字符串引用PHP方法

时间:2016-01-15 15:41:29

标签: php reflection automated-refactoring

假设我有以下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被重构工具重命名,则错误消息将是错误的。有没有办法在不使用字符串的情况下解决这个问题?

3 个答案:

答案 0 :(得分:0)

您可以使用__METHOD__获取当前方法的名称。

但要引用其他允许你进行某种自动重构的方法 - 不,这在php中是不可能的。

答案 1 :(得分: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;
    }
}

答案 2 :(得分:0)

PHP本身不可能,但您可以实现这样的功能。一种可能的实现方式如下:某处文件路径,类名,方法名称以及某些内容和内容应该匹配的描述。每当触发时,您的新功能将检查给定文件,检查某些值是否已更改,修复需要修复的内容并记录有关任务的报告。实现这样的事情并不简单,但需要注意的是,有一个解决方案。