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