PHP 7.2 每个都已弃用。将 for each 转换为 foreach

PHP 7.2 each is deprecated. Convert for each to foreach

我得到了这两个在 php 7.2

上抛出 DEPRECATED 通知的函数
function session_unregister($var) {
    global $session;

    for (reset($session->vars); list($i)=each($session->vars);) {
        if ($session->vars[$i] == trim($var)) {
            unset($session->vars[$i]);
            break;
        }
    }
}

function session_is_registered($var) {
    global $session;

    for (reset($session->vars); list($i)=each($session->vars);) {
        if ($session->vars[$i] == trim($var)) {
            return true;
        }
    }
    return false;
}

我尝试修改它们以与新的 php 兼容,像这样使用 foreach:

变化中:

for (reset($session->vars); list($i)=each($session->vars);) {

收件人:

foreach (array_keys($session->vars) as $i) {

但我不能 100% 确定这是否是正确的相同改编。有什么意见吗?

您不需要数组键:

foreach ($session->vars as $key=>$sesion_var) {
if ($sesion_var == trim($var)) {
    return true;
  }
}

或者为了与其余代码更加一致:

foreach ($session->vars as $i=>$sesion_var) {
 if ($session->vars[$i] == trim($var)) {
    return true;
 }
}

或者您应该使用 array_search() 而不是该代码块:

if(array_search(trim($var), $session->vars)) return true;
function session_unregister(string $var): void
{
    global $session;

    $var = trim($var);

    if (isset($session->vars[$var])) {
        unset($session->vars[$var]);
    }
}

function session_is_registered(string $var): bool
{
    global $session;

    return isset($session->vars[trim($var)]);
}

但是,如果您重写应用程序,我建议您也去掉那个 global 并将会话作为参数传递给每个函数。