【问题标题】:Catchable fatal error: Object of class __PHP_Incomplete_Class可捕获的致命错误:类 __PHP_Incomplete_Class 的对象
【发布时间】:2010-11-11 15:20:28
【问题描述】:

我收到这个错误

可捕获的致命错误:无法将类 __PHP_Incomplete_Class 的对象转换为 user.php 中第 248 行的字符串 这条线

  function loadUser($userID)
  {
  global $db;   
    $res = $db->getrow("SELECT * FROM `{$this->dbTable}` WHERE `{$this->tbFields['userID']}` = '".$this->escape($userID)."' LIMIT 1");
    if ( !$res )
        return false;
    $this->userData = $res;
    $this->userID = $userID;
    $_SESSION[$this->sessionVariable] = $this->userID;
    return true;
  }

var_dump($_SESSION); 

array(1) { ["user"]=> &object(__PHP_Incomplete_Class)#1 (12) { ["__PHP_Incomplete_Class_Name"]=> string(11) "jooria_user" ["dbTable"]=> string(5) "users" ["sessionVariable"]=> string(4) "user" } }

【问题讨论】:

  • 第248行有几行?
  • 你能在你的代码中指出第 248 行是什么吗?

标签: php


【解决方案1】:

这是一个存储在会话中的对象吗?你在从会话中检索对象之前声明了你的类吗?

无论如何,我的猜测是您在某处缺少类声明。

编辑:您的类 jooria_user 在使用前未声明。这就是您收到该错误的原因。

假设你有这个:

<?php
session_start();
class A {}
$a = new A;
$_SESSION['A'] = $a;

然后你尝试在这个脚本中访问它:

<?php
session_start();
$a = $_SESSION['A'];
var_dump($a);

/* outputs:
      object(__PHP_Incomplete_Class)#1 (1) {
        ["__PHP_Incomplete_Class_Name"]=>
        string(1) "A"
      }
*/

现在如果你这样做:

<?php
class A {} // declares the class here
session_start();
$a = $_SESSION['A'];
var_dump($a);

/* outputs:
      object(A)#1 (1) {
      }
*/

【讨论】:

  • 我怎样才能做到反序列化($_SESSION)
  • 抱歉,您发帖时我正在编辑。请参阅我修改后的答案。换句话说:jooria_user 必须在从会话访问它的脚本中声明。
  • 不,我保存了与 ingeter 的会话,我不知道这一切发生了什么
  • 显然你不是。 $_SESSION['user'] 是 jooria_user 类型的对象,我们可以从您的 var_dump 中看到。
【解决方案2】:

看起来提供的函数参数$userID是一个对象,错误发生在这里:

$this->escape($userID)

(我没有看到任何可能导致此类错误的进一步字符串操作)。

所以看看你调用loadUser()的参数是什么。

【讨论】:

    【解决方案3】:

    首先我会确保所有{ } 大括号在正确的位置都有对。我猜最后一行缺少}

    【讨论】:

      猜你喜欢
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      相关资源
      最近更新 更多