检查同一类中是否存在方法

2022-08-30 14:08:07

因此,需要一个对象来查看方法是否存在。但是我想知道同一类中是否存在方法。method_exists()

我有一个处理一些信息并可以接收操作的方法,该方法运行一个方法来进一步处理该信息。我想在调用它之前检查该方法是否存在。我怎样才能实现它?

例:

class Foo{
    public function bar($info, $action = null){
        //Process Info
        $this->$action();
    }
}

答案 1

你可以做这样的事情:

class A{
    public function foo(){
        echo "foo";
    }

    public function bar(){
        if(method_exists($this, 'foo')){
            echo "method exists";
        }else{
            echo "method does not exist";
        }
    }
}

$obj = new A;
$obj->bar();

答案 2

使用是正确的。但是,如果要遵守“接口隔离原则”,则需要创建一个接口来执行内省,如下所示:method_exists

class A
{
    public function doA()
    {
        if ($this instanceof X) {
            $this->doX();
        }

        // statement
    }
}

interface X
{
    public function doX();
}

class B extends A implements X
{
    public function doX()
    {
        // statement
    }
}

$a = new A();
$a->doA();
// Does A::doA() only

$b = new B();
$b->doA();
// Does B::doX(), then remainder of A::doA()

推荐