&安培;对象(__ PHP_Incomplete_Class)#1

时间:2012-12-18 02:21:22

标签: php

我正在尝试在会话中存储一个整数值,如下所示:

if(!isset($_SESSION['images'])){

   if(!isset($_SESSION['user_id'])){
         $_SESSION['images'] = array();
         array_push($_SESSION['images'], (int)$newFilename );
   }
 } else {
        if(!isset($_SESSION['user_id'])){
             array_push($_SESSION['images'], (int)$newFilename);
             file_put_contents("upload.txt", (int)$newFilename);
        }
   }

但是相同的代码可以在我的localhost(php 5.3.13)上运行,但是在使用php 5.2.17进行托管时不起作用(这是我在这里可以看到的唯一区别)。 我知道在$ _SESSION中存储对象存在一些问题,但是我很想存储一个像这样的一维数组:

$newFilename = $images->getLastFileId();
//$newFilename == array['200','201', '202'...n];

当$ _SESSION ['images']有一个元素时,一切正常,但如果有> 1个元素,我有一个错误&object(__PHP_Incomplete_Class)#1var_dump($_SESSION)表明我有一个对象(看起来像php试图存储在$newFilename对象$images)中:

array(1) { ["images"]=> &object(__PHP_Incomplete_Class)#1 (9) {     ["__PHP_Incomplete_Class_Name"]=> string(15) "ImageCollection" ["imgSize"]=> 
 string(0) "" ["imgAngle"]=> string(0) "" ["imgUrl"]=> string(0) "" 
 ["imgDir"]=> string(7) "upload/" ["thumbDir"]=> string(9) 
 "upload/m/" ["imgPreviewDir"]=> string(0) "" ["avatarsWidth"]=> int(50) 
["avatarsDir"]=> string(8) "avatars/" } }

同样,此代码在我的localhost上正常运行。哪个可能是问题?

更新我解决了问题,但我不太清楚导致此问题的原因。也许这是php bug,但我的代码在$_SESSION['images']重命名为$_SESSION['imagesNew']后才开始正常工作 - 因此$ _SESSION变量的名称不再与变量$ images的名称相同。

1 个答案:

答案 0 :(得分:2)

TL; DR - 您展示的代码不应出现此行为,因此必须在其他地方引起。

有关症状的更多信息,请假设您有此类定义:

class Test
{
  private $x = 'hello';
}

让我们序列化:

file_put_contents('serialized.txt', serialize(new Test));

文件内容(不要尝试复制/粘贴它,它不起作用):

O:4:"Test":1:{s:7:"Testx";s:5:"hello";}

现在,在另一个脚本中,让我们unserialize()(没有类定义):

var_dump(unserialize(file_get_contents('serialized.txt')));

输出:

object(__PHP_Incomplete_Class)#1 (2) {
  ["__PHP_Incomplete_Class_Name"]=>
  string(4) "Test"
  ["x":"Test":private]=>
  string(5) "hello"
}

虽然您发布的代码似乎没有提示,但您显示的输出是ImageCollection个对象的数组,因此为了使其起作用,您需要首先require定义,例如:

require 'imagecollection.class.php';
// open your session here

或使用autoloader