Php int的var_转储显示未知:0

Php int的var_转储显示未知:0,php,Php,我在PHP中发现了一些我以前从未见过的东西。我的脚本中止,出现以下错误: 致命错误:中不支持的操作数类型。。。第41行 错误消息引用以下语句: if($this->lastAction + 7200 <= time()) { } 我以前从未见过这种情况。我无法想象这个值分配给变量的位置,或者在什么条件下发生 有人对这个“值”的来源有什么提示或解释吗 更新1 我发现,如果使用PHP5.3在env上运行相同的设置,则会出现以下错误: 类stdClass的对象无法转换为int。。。第41

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

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

错误消息引用以下语句:

if($this->lastAction + 7200 <= time()) {
}
我以前从未见过这种情况。我无法想象这个值分配给变量的位置,或者在什么条件下发生

有人对这个“值”的来源有什么提示或解释吗

更新1

我发现,如果使用PHP5.3在env上运行相同的设置,则会出现以下错误:

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

但我从未将
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;
    }
}
class DBAuthHandler extends AuthHandler
{
    // other stuff here
}

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

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

因此,问题在于试图设置
$\u会话['last\u action']

的方法。好吧,这不是一个确定的答案,但可能会对这个问题有所帮助

检查PHP源代码时,中的默认情况是“未知类型”。这同样适用于

因此,基本上,当一个变量不是NULL、boolean、integer、double、string、array、object或resource时,它就属于未知类型

我见过指针失效时发生这种情况

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

由于总是返回一个整数(或者至少应该返回),那么问题一定出在
$\u会话['last\u action']

即使使用多种方法销毁会话,我也无法重现您的问题


如果您回溯
$\u会话['last\u action']
,定期检查其值,可能会有所帮助。

什么类型的
$this
?您是否可以使用输出
$this->lastAction
的类型。它看起来像一个bug。你能创建最小的可复制代码吗?好的。我想,那么我们需要更多关于这个类的信息来进一步调查。添加了我的类定义的示例代码,正如我所说:它在所有情况下都有效,除了在一个脚本中我使用这个对象。这是OO的一个非常基本的用法,所以我想这真的是PHP核心中的一个bug。听到这个消息很难过。祝你重构好运,是的,到目前为止你是对的。我同时有两个类的实例,这在您上面提到的会话var中造成了混乱。在PHP5.4和5.5中,我在这个变量中有一个
stdClass
对象,我从未分配给会话,而是在脚本运行时的某个地方使用。在PHP5.3中,我有一个
未知:0
。所以,我猜这似乎是PHP中的一个错误,它以某种方式解决了错误的内存。然而,我解决了这个问题,所以我现在一次只有一个类实例,并且使它正常工作。
$handle = fopen('file.txt','r');
echo gettype($handle); // resource
fclose($handle);
echo gettype($handle); // unknown