Как динамически изменять глобальную переменную внутри функции с помощью цикла foreach - PullRequest
0 голосов
/ 05 мая 2020

Я хочу создать функцию, которая динамически изменяет значение глобальной переменной с помощью al oop. Я попытался поставить "global" за ключ $$, но он выдает ошибку. возможно ли это сделать?

define('INPUT_FIELDS', array('fullname', 'phone', 'email')); // the input fields names that every form must have

$fullname = $phone = $email = "";

function isPostValid(){
    if ( $_SERVER['REQUEST_METHOD'] === 'POST' ){
        foreach ($_POST as $key => $value) {
            if( in_array($key, INPUT_FIELDS) ){// only if the key is exists in the inputs we chose
                $$key = checkInputsAndValidate($key);

                if(!$$key){// if the variable is null then break the loop and make change the variable to false
                    return false;
                    break;
                }
            }
        }//END foreach
        return true;
    }

    return false;
}

1 Ответ

1 голос
/ 05 мая 2020

Как сказал Дейв в комментарии, вы должны использовать ключевое слово global для ссылки на глобальную переменную. Но вы также должны попытаться сделать свой код масштабируемым для большего количества возможных переменных (например, использовать массив).

Я бы предложил изменить функцию примерно так:

<?php

define('INPUT_FIELDS', array('fullname', 'phone', 'email'));

/** create a global var that holds all form data **/
$FORM = array();
/** initialize $FORM based on defined input fields **/
foreach (INPUT_FIELDS as $key)
    $FORM[$key] = false;

function isPostValid(){
    /** access global variable $FORM **/
    global $FORM;

    /** verify POST request **/
    if ($_SERVER['REQUEST_METHOD'] !== 'POST')
        return false;

    /** check all FORM keys for POST values **/
    foreach($FORM as $key => $init_value) {

        /** How does checkInputsAndValidate() work in your code?
          * -> change here if necessary
          **/
        $new_value = isset($_POST[$key]) ? checkInputsAndValidate($key) : false;

        if (!$new_value)
            return false;

        $FORM[$key] = $new_value;
    }

    /** if all is OK, return true **/
    return true;

}

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...