1

我有一个带有两个参数的函数:

function index($LoadFunction, $footer) {
    // My statements
}

我可以像这样获取发送到此函数的参数总数index(1,2,3,4)

$numargs = func_num_args();
echo "Number of arguments: $numargs\n";

我想知道我可以向这个index()函数发送多少个参数。

我将如何做到这一点。

编辑1:

我也试过这些,但这并没有回应任何东西

https://stackoverflow.com/a/346789/1182021

https://stackoverflow.com/a/346943/1182021

编辑2:

好的,我会以更恰当的方式解释它:

类富 {
   功能栏(arg1,arg2){
    ......
   }
}

我这样称呼类foo

$class = 新的 foo(); // 实例化我的类
$class->bar(1,2); // 这段代码没问题

现在我想做的是:

$method = new ReflectionClass('foo', 'bar');
$num = $method->getNumberOfParameters();
// 理想情况下,这应该给我这个'bar'的参数总数
// 函数可以接受,但它不会回显任何内容。

所以我怎么能得到这个,我不想进入功能来检查它:I want to check it before executing the function.

我如何使用这个东西:

ReflectionFunctionAbstract::getNumberOfParameters — 获取参数数量
ReflectionFunctionAbstract::getNumberOfRequiredParameters — 获取所需参数的数量

以上来自http://php.net/manual/en/book.reflection.php

4

2 回答 2

1

PHP 支持用户定义函数中的可变长度参数列表。这真的很简单,使用 func_num_args()、func_get_arg() 和 func_get_args() 函数。

不需要特殊的语法,参数列表仍然可以通过函数定义显式提供,并且表现正常。

index(1,2,3,4,5,...) 因此,如果您没有传递至少 2 个参数,您可以在函数中向函数传递任意数量的参数 PHP 会生成警告。

检查http://php.net/manual/en/functions.arguments.php

于 2013-07-17T10:51:13.253 回答
1

论据的数量几乎是无穷无尽的。限制不取决于语言本身,而是取决于硬件/操作系统限制,如内存使用等。因此,您可能不会遇到真正会导致任何问题的情况。

您也可以只传递一个数组作为参数来代替无穷无尽的参数列表,它本身也可以保存几乎无穷无尽的键/值对列表。在资源使用方面不会有很大的不同,但我个人发现当参数列表可能真的很长时更容易处理。

- 编辑

如果我正确理解您想要做什么(但如果我不正确请更清楚地解释自己),这就是您想要的:

function my_function($arg1, $arg2) {
    if(func_num_args() > 2) {
        throw new ErrorException('Maximum number of arguments exceeded');
        // OR: trigger_error('Maximum number of arguments exceeded', E_USER_ERROR);
    }

    echo 'You are inside "my_function()" and have passed exactly 2 arguments';
}

当你执行这个:

my_function('some value', 'another value');

它呼应:You are inside "my_function()" and have passed exactly 2 arguments

但是当你执行这段代码时:

my_function('some value', 'another value', 'too much arguments...');

它会抛出异常(或触发错误,无论您选择什么)

-- 编辑 2

是的,现在我明白了;)

首先:您尝试在方法上使用 ReflectionClass。您应该使用 ReflectionFunction(对于过程函数)或 ReflectionMethod(对于类方法)。

选项1:

function my_function($arg1, $arg2) {
    // do something
}

$reflection = new ReflectionFunction('my_function');
echo 'Function "my_function" has '. $reflection->getNumberOfParameters() .' arguments';

选项 2:

class MyClass {
    function my_function($arg1, $arg2) {
        // do something
    }
}

$reflection = new ReflectionMethod('MyClass::my_function');
echo 'Class method MyClass::my_function() has '. $reflection->getNumberOfParameters() .' arguments';

您可以$reflection->getNumberOfRequiredParameters()在这两种情况下使用

于 2013-07-17T10:26:14.020 回答