int的var_dump显示UNKNOWN:0

时间:2014-11-24 07:32:21

标签: php

我在PHP中发现了一些我以前从未见过的东西。我的脚本因错误而中止:

  

致命错误:第41行的......中不支持的操作数类型

错误消息引用以下语句:

if($this->lastAction + 7200 <= time()) {
}

当我在脚本中操作之前var_dump $this->lastAction时,我得到了输出:

UNKNOWN:0

我以前从未见过。我无法想象这个值分配给我的变量的位置或者在什么条件下发生这种情况。

有没有人提示或解释这个&#34;价值&#34;来自哪里?

更新1

我发现如果我在PHP 5.3的env上运行相同的设置,我会得到错误:

  

第41行无法将类stdClass的对象转换为int ...

但我从来没有为这个变量分配stdClass个实例。

更新2

PHP 5.5.19中也存在与版本5.4.28中的错误相同的问题。


AuthHandler.php

abstract class AuthHandler
{
    protected $lastAction;

    public function __construct()
    {
         $this->lastAction = isset($_SESSION['last_action']) ? $_SESSION['last_action'] : time();

         if($this->lastAction + 7200 <= time()) {
             $this->logout();
         }

         $this->lastAction = time();
    }

    public function logout()
    {
        session_destroy();
        session_regenerate_id();

        $this->lastAction = null;
    }

    public function __destruct()
    {
        $_SESSION['last_action'] = $this->lastAction;
    }
}

DBAuthHandler.php

class DBAuthHandler extends AuthHandler
{
    // other stuff here
}

2 个答案:

答案 0 :(得分:1)

嗯,这不是一个明确的答案,但可能会对这个问题有所了解。

检查PHP源, &#34;未知类型&#34; gettype function中的默认案例。这同样适用于var_dump function

所以,基本上,当变量不是 NULL 布尔整数 double string array object resource 然后 unknown输入

当指针变为无效时,我发现这种情况发生了。

$handle = fopen('file.txt','r');
echo gettype($handle); // resource
fclose($handle);
echo gettype($handle); // unknown

由于time()总是返回一个整数(或者至少应该返回它),因此问题必须在于$_SESSION['last_action']

即使使用多种方法销毁$_SESSION,我也无法重现您的问题。

如果您回溯$_SESSION['last_action'],定期检查其值,也许会有所帮助。

答案 1 :(得分:0)

您提供的代码非常适合我。返回的对象是

object(App\Http\Controllers\DBAuthHandler)#141 (1) { ["lastAction":protected]=> int(1416817485) } 

所以问题出在试图设置$_SESSION['last_action']的方法中。