Php,也希望方法的参数最多

时间:2015-01-29 13:27:33

标签: php

此代码段:

unlink ('C:\dfdf.dfg', 1, 2, 3);

会崩溃,说这个功能不能接受超过2个参数(它不会引起问题,但它会强制我们准确)。 但是方法呢?

class C
{
    public function b ($a)
    {
    }
}

$c = new C();
$c->b(1,2);

b()会获得一个不必要的参数,甚至不会生成通知

2 个答案:

答案 0 :(得分:1)

您的方法可以使用func_get_args接受任意数量的参数。因此,PHP不会抱怨。在unlink的C实现中,PHP显式验证传入的参数,并在必要时抛出错误。你必须自己复制一遍:

function b($a) {
    if (count(func_get_args()) > 1) {
        trigger_error('b() does not accept more than 1 parameter', E_USER_NOTICE);
    }
    ..
}

答案 1 :(得分:1)

答案就在于,如果你看到php内置函数的源代码,

PHP_FUNCTION(unlink)
{
char *filename;
size_t filename_len;
php_stream_wrapper *wrapper;
zval *zcontext = NULL;
php_stream_context *context = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "p|r", &filename, &filename_len, &zcontext) == FAILURE) {
RETURN_FALSE;
}
context = php_stream_context_from_zval(zcontext, 0);
wrapper = php_stream_locate_url_wrapper(filename, NULL, 0);
if (!wrapper || !wrapper->wops) {
php_error_docref(NULL, E_WARNING, "Unable to locate stream wrapper");
RETURN_FALSE;
}
if (!wrapper->wops->unlink) {
php_error_docref(NULL, E_WARNING, "%s does not allow unlinking", wrapper->wops->label ? wrapper->wops->label : "Wrapper");
RETURN_FALSE;
}
RETURN_BOOL(wrapper->wops->unlink(wrapper, filename, REPORT_ERRORS, context));
}

现在,仔细看看这段代码,因为它会抛出错误

if (zend_parse_parameters(ZEND_NUM_ARGS(), "p|r", &filename, &filename_len, &zcontext) == FAILURE) {
RETURN_FALSE;
}

在您的课程中,您验证传递给它的arguments的数量,您可以在此处使用try, catch阻止,以限制传递给您的课程的参数数量方法。我希望这清除了你的怀疑。

REFERENCE