如何在PHP中检查方法是否存在且具有参数

3

我想检查一个方法是否存在,并且是否有参数。

以下是一些代码片段。

// this only checks if the function exist or not
if(method_exists($controller, 'function_name')) 
{
  //do some stuff
}

但是我想要做的是什么?
if(method_exists($controller, 'function_name(with_args)'))
{

}

1
PHP的方法签名不像其他语言那样强烈定义。一个方法在其签名中可能没有任何定义的参数,但仍然可以接受参数。 - Alex Turpin
https://dev59.com/BXA75IYBdhLWcg3wRWyc#3387672 - Rahil Wazir
1
http://www.php.net/manual/en/reflectionfunctionabstract.getparameters.php - Marc B
2个回答

11
您可以使用ReflectionMethodgetParameters方法获取一个方法的参数列表。您可以检查该列表的长度或对参数执行任何其他操作。
<?php
    class Foo {
        function bar($a, $b, $c) {
            return $a + $b + $c;
        }
    }

    $method = new ReflectionMethod('Foo', 'bar');
    var_dump($method->getParameters());
?>

我不知道你会用这个做什么,但我建议不要随意使用反射。你可能需要重新思考你的做法。


感谢@AlexTurpin。我正在使用MVC指南创建一个应用程序,我正在创建一个控制器,它基本上根据URL地址实例化一个类,一些类具有函数,一些类具有参数。因此,在进行调用之前,我想检查函数是否存在并且是否具有参数。 - Eskinder
@Eskinder 如果您担心这种严格的检查,那么我建议您使用其他编程语言;)感谢我和其他回答过您问题的人的最好方式是接受一个答案!请参考此链接:http://meta.stackexchange.com/a/5235/158105 - Alex Turpin

0

函数重载是一种功能,允许创建几个具有相同名称但在输入和输出类型上不同的方法。不幸的是,PHP中没有实现这个功能,您不能使用方法重载来拥有两个具有相同名称的函数。

为什么要使用function_exists来使用函数重载呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接