基于foreach循环的调用函数-PHP

时间:2018-09-20 09:36:23

标签: php foreach

我对PHP还是很陌生,我正在寻找一种方法来递归数组,并根据数组的内容转到特定的函数。

例如,如果我有一个包含3个值的数组 '电子邮件,名称,密码'

我需要我的代码来运行每个函数。

以下代码是我目前拥有的。

<?php
$a = $_POST;
/**
*datavalidation
*/
class validation
{
    //  private $output = [];
    public $data = [];

    function __construct($data)
    {
        $this->data= $data;
        $this->begin();
    }

    function begin()
    {

        foreach ($this->data as $key => $value) 
        {
            $this->$key;
        }
        $this->__destruct();
    }

}

3 个答案:

答案 0 :(得分:1)

要动态调用一个函数,还需要执行该函数,否则调用一个属性,因此:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

应该是

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

答案 1 :(得分:1)

    foreach ($this->data as $func_name => $values){
        call_user_func($func_name, $values);
    }

答案 2 :(得分:0)

function begin() {
    foreach ($this->data as $key => $value) {
       $this->$key();
    }
}

除此之外,为什么还要使用构造函数执行操作?首先创建对象,并在初始化后调用对象的方法,直到不再需要它为止。处理异常和调试应用程序会更容易。

$obj= new Validation();
$obj->begin();
or in a single line:
(new Validation())->begin();  

注意:第二种方法自5.4 (reference)起可用

此外,没有必要从拥有者对象调用析构函数(现在您正在构造函数中调用析构函数!ctor() -> $this->begin() -> $this->__destruct()。在外部使用您的对象的人将调用析构函数(在隐式或明确的方式)。