вызов функции на основе цикла foreach - PHP - PullRequest
0 голосов
/ 20 сентября 2018

Я довольно новичок в PHP, и я ищу способ рекурсивного массива и перехода к определенной функции в зависимости от содержимого массива.

Например, если у меня есть массив с 3значения 'email, name, password'

Мне понадобится мой код для запуска каждой из этих функций.

Следующий код - это то, что у меня сейчас есть.

<?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 голосов
/ 20 сентября 2018
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 (ссылка)

Кроме того, оннет необходимости вызывать деструктор из объекта-владельца (теперь вы вызываете деструктор в конструкторе !! ctor() -> $this->begin() -> $this->__destruct(). Кто-то, использующий ваш объект снаружи, вызовет деструктор (неявным или явным образом).

0 голосов
/ 20 сентября 2018
    foreach ($this->data as $func_name => $values){
        call_user_func($func_name, $values);
    }
0 голосов
/ 20 сентября 2018

Чтобы вызвать функцию динамически, вам также необходимо выполнить функцию, иначе вы вызываете свойство, поэтому:

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

Должно быть

foreach ($this->data as $key => $value) 
{
    $this->$key();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...