Php 通过定义的名称调用方法&;在调用之前添加额外的参数
我有一个验证器类,它可以用存储的方法(名称)构建多个数组 像这样Php 通过定义的名称调用方法&;在调用之前添加额外的参数,php,arrays,validation,Php,Arrays,Validation,我有一个验证器类,它可以用存储的方法(名称)构建多个数组 像这样$this->rules[1]=[“trim()”、“required()”、“max(35)”] 如何循环遍历数组中的每个方法,并根据它们的定义准确地调用它 如果我像下面这样做,我会得到未定义的属性:Validator::$trim()等错误 foreach ($this->rules[1] as $method) { $this->$method; } 在数组进入循环之前,如何向数组中的每个方法添加额
$this->rules[1]=[“trim()”、“required()”、“max(35)”]
- 如何循环遍历数组中的每个方法,并根据它们的定义准确地调用它
未定义的属性:Validator::$trim()
等错误
foreach ($this->rules[1] as $method) {
$this->$method;
}
- 在数组进入循环之前,如何向数组中的每个方法添加额外的参数
$input
因此,它不是
trim()
,而是trim($input)
,对于max(35)
max(35,$input)
,等等。首先,在示例中使用$this->{$method}
调用您的方法
第二,不要这样称呼他们。使用调用用户函数数组
为了直接调用,首先需要提取方法名和参数。
我建议您使用$input的占位符将其添加到方法调用中。
然后可以将函数调用的参数作为数组传递
$ruleset = 'max(34,:input)';
// do the string manipulation yourself please ;-)
$method = 'max';
$input = getInput(); // wherever you get that from
$parameters = array (34, $input),
call_user_func_array(__NAMESPACE__ .'\Validator::' . $method, $parameters);
您需要的是和/或方法 正如Andresch所指出的,规则的定义方式并不灵活。现在您必须解析它们以检索函数的输入。更好的方法是采用以下格式:
$this->rules[1] = array(
'trim',
'required',
array('max'=>35)
);
然后
foreach ( $this->rules as $rule )
{
if ( is_array($rule)
{
call_user_func_array(array($this, key($rule)), current($rule));
}
else
{
call_user_func(array($this,$rule));
}
}
注意:不要只是复制粘贴此代码,这是为了解释规则是否构成了您的想法?你能改一下吗?改一下吗?你到底是什么意思?我不认为$this->$任何东西都能工作,$在我看来箭头操作符是错误的之后…可能对你有帮助的是“call\u user\u func\u array()”看看。您也可以创建自定义验证函数,并以这种方式调用带有参数的em。@sebastian在arrow运算符完全正确后使用变量。只是在变量后面不带括号调用时不是这样。