《PHP程序设计》中的例子运行出错,请教高手。

kitcaii 2009-08-09 12:12:50
1. Log.inc文件

<?php
class Log {
var $filename;
var $ fp;

function Log($filename) {
$this->filename = $filename;
$this->open();
}
function open() {
$this->fp = fopen($this->filename, "a") or die("Can't open {$this->filename}");
}
function write($note) {
fputs($this->fp, "$note\n");
}
function read() {
return join(' ', file($this->filename));
}
function __wakeup() {
$this->open();
}
function __sleep() {
// write information to the account file
fclose($this->fp);
return array('filename');
}
}
?>




2. front.php文件

<?php
include_once('Log.inc');
session_start();
?>

<html><head><title>Front Page</title></head>
<body>
<?php
$now = strftime("%c");
if (!session_is_registered('l')) {
$l = new Log("persistent_log");
session_register('l');
$l->write("Create $now");
echo("Create session and persistent log object.<p>");
}
$l->write("Viewed first page $now");
echo "The log contains:<p>";
echo nl2br($l->read());
?>
<a href = "next.php">Move to the next page</a>
</body>
</html>



3. next.php

<?php
include_once('Log.inc');
session_start();
?>
<html><head><title>Next Page</title></head>
<body>
<?php
$now = strftime("%c");
$l->write("Viewed page2 at $now");
echo "The log contains:<p>";
echo nl2br($l->read());
?>
</body>
</html>



红色的代码出现如下错误
Fatal error: Call to a member function write() on a non-object in
PHP的版本号5.2 session save_path = "C:/tmp" 是php.ini的配置有问题吗?
...全文
44 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
FC_LAMP 2009-08-19
  • 打赏
  • 举报
回复
首先 我们看看那个定义基本类的"Log.inc文件",既然PHP是5以上的为什么还以4版本或以的方式来写类呢 (如构造函数)。

第二 : 由这个三文件以及代码我们应看出来,你是想把类存于session中再在另外一个页面使用,可是方法不对。代码中(如下:)

$l = new Log("persistent_log");
session_register('l');

这个并没有把类实例化的对象存于SESSION中,只是存了一个'l'的东东,所以你第一次进“front.php”页时不会报错,但是你再次刷新或者是由这个页进入“next.php ”页时,就会报以上的错误了。

第三 :修改方法(如下:)

if(!session_is_registered('l')){
$l = new Log("persistent_log");
$_SESSION['l']=$l;
}
$l->write("Viewed first page $now");

这样就可以了。(另外,你说这个是《PHP程序设计》中的例子,我真是感到无语了,那些人都是干什么吃的,难道就是只知道“钱”??)

nabice 2009-08-09
  • 打赏
  • 举报
回复
应该先生成对象,你的代码里没有生成对象。
nabice 2009-08-09
  • 打赏
  • 举报
回复
代码乱七八糟。。。
$l->write("Viewed page2 at $now");
????

代码肯定贴错了。。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧