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运算符完全正确后使用变量。只是在变量后面不带括号调用时不是这样。