【发布时间】:2011-09-11 17:57:34
【问题描述】:
我有一个简单的 PHP 会话和 AJAX 示例,在会话中保存数组时可以使用:
请求文件:
<?php
session_start();
$_SESSION['data'] = array('foo','bar');
echo count($_SESSION['data']);
?>
<html>
<head>
<title>Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
</head>
<body>
<button id="but1">Go</button>
<script type="text/javascript">
$('#but1').click(function() {
$.ajax({
url:'ajaxtest_remote.php',
success:function(result) {
alert(result);
}
});
});
</script>
</body>
</html>
远程文件:
<?php
session_start();
echo 'count=' . count($_SESSION['data']);
?>
第一个文件的 echo 显示 2,success 函数中的 alert 显示“count=2”。快乐的日子。
问题发生的地方是如果我将数组换成类对象:
请求文件:
<?php
session_start();
include('ajaxtest_class.php');
$_SESSION['obj'] = new TestClass('foo,bar');
echo count($_SESSION['obj']->dataList);
?>
<!-- HMTL AS ABOVE -->
远程文件:
<?php
session_start();
echo 'count=' . count($_SESSION['obj']->dataList);
?>
类文件:
<?php
class TestClass {
var $dataList;
function TestClass($incoming) {
$this->dataList = explode(',',$incoming);
}
}
?>
这仍然在第一页上显示 2,但 ajax 成功警报返回“count=0”。谁能解释这是为什么?
更新1
如果我将类文件导入远程,它仍然不起作用,尽管我可以证明类已加载。
<?php
session_start();
include('ajaxtest_class.php');
$c = new TestClass('a,b,c');
echo 'count=' . count($_SESSION['obj']->dataList) . '-' . count($c->dataList);
?>
来自 ajax 成功的新警报显示为 count=0-3。
更新2
var_dump($_SESSION['obj']);
object(__PHP_Incomplete_Class)#8 (2) {
["__PHP_Incomplete_Class_Name"]=>
string(9) "TestClass"
["dataList"]=>
array(2) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
}
}
【问题讨论】:
-
尝试使用
var_dump调试它两次。你在旧的 php4 上吗?或者你为什么要这样写你的课程。 php5 的方式是有一个function __construct($incoming) -
我不经常尝试oop PHP,还是个新手!所以我应该用
_construct替换我的构造函数的名称?
标签: php ajax class session php4