不推荐使用PHP 7.2。转换成foreach

时间:2018-07-13 07:48:43

标签: php deprecated

我得到了这两个函数,它们在php 7.2上引发了已弃用的通知

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;
}

我尝试使用foreach修改它们以使其与新php兼容:

更改:

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

收件人:

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

但是我不确定100%是否是正确的相同改编。有任何评论吗?

2 个答案:

答案 0 :(得分:2)

您不需要数组键:

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;

答案 1 :(得分:1)

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并将会话作为参数传递给每个函数。