1

有没有办法验证同一个类中是否存在多个方法?

class A{
    function method_a(){}
    function method_b(){}
}

if ( (int)method_exists(new A(), 'a', 'b') ){
    echo "Method a & b exist";
}
4

4 回答 4

3

我可能在这里使用过接口:

interface Foo {
  function a();
  function b();
}

...然后,在客户端代码中:

if (A instanceof Foo) {
   // it just has to have both a() and b() implemented
}

我认为这更清楚地显示了您的真实意图,然后只是检查方法的存在。

于 2013-06-01T18:29:56.730 回答
2

不要认为存在这样的功能,但您可以尝试get_class_methods并比较类方法的数组和您的方法,例如:

$tested_methods = array('a', 'b', 'c');
if (sizeof($tested_methods) == sizeof(array_intersect($tested_methods, get_class_methods("class_name"))))
    echo 'Methods', implode(', ', $tested_methods), ' exist in class';
于 2013-06-01T18:28:17.207 回答
2

使用get_class_methods

class A {
  function foo() {
  }
  function bar() {
  }
}

if (in_array("foo", get_class_methods("A")))
  echo "foo in A, ";
if (in_array("bar", get_class_methods("A")))
  echo "bar in A, ";
if (in_array("baz", get_class_methods("A")))
  echo "baz in A, ";

// output: "foo in a, bar in a, "

你可以在这里摆弄:http: //codepad.org/ofEx4FER

于 2013-06-01T18:30:08.590 回答
1

您需要单独检查每种方法:

$a = new A();

if(method_exists($a, 'method_a'))...
if(method_exists($a, 'method_b'))...

您不能在一个函数调用中检查多个方法

于 2013-06-01T18:26:41.987 回答