关于PHP中对象的问题,HELP!!!!高分求救 session其实PHP的对象功能很弱的,不如干脆面向过程,不要用对象了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我想 $p=new ... ;只要保存这个$p就可以了,session,cookie,隐藏表单方式都可以的,我试过在普通函数中用global $p;后,可以正常访问类中的方法。 没办法,只能通过对象来管理,不然不晓得怎么办:(我现在要管理一个对象数组是不是只要把数组名注册为session然后直接使用用这个数组名,就能够让数组中所有的对象都保存在session里面了呢?? 可以将对象保存在session中var $myClass=new MyClass();session_register("myClass");这样就把myClass对象保存在了会话(session)中。不过这样一个代价是,你必须在每一个php脚本中包含对象的声明文件(比如MyClass.php),因为session是对每个php脚本可见的。可以这样优化: 将对象序列化(serialize)后的字符串保存在session中,在另外一个需要此对象的页面中再反向(unserialize)生成这个对象,当然这个页面要包含MyClass.php。 值得注意的是,对象中的部分信息比如对于mysql或其他数据源、文件的连接句柄会丢失,需要在对象中声明两个函数,__sleep()用于序列化时保存连接信息,__wakeup用于反向时重建连接。 补充:对象保存在session中,会自动被序列化serialize成一个字符串保存,再次被调用时自动unserialize(),所以同样存在上面提到的__sleep()保存或清除不必要的数据和__wakeup()恢复丢失的数据的问题。 纠正一下我的说法。你可以这样做:class.php 类定义文件<?phpclass A { var $v; function A($v) { $this->v = $v; } function show() { echo "$this->v ok"; }}?>file1.php<?phpinclude "class.php";session_start();$p = new A(123);$_SESSION['p'] = $p;header("location: file2.php");?>file2.php<?include "class.php";session_start();$p = $_SESSION['p'];$p->show();?>至于ABabyStudio(ABabyStudio) 说的__sleep(),__wakeup()如何使用,还请他明示。 还是用session吧,比较方便实用。if(!session_is_registered("arrayname")) { // 如果不存在则新建 $arrayname=array(); session_register("arrayname"); $arrayname[0]="abc"; $arrayname[1]="lmf"; …… }在下一个页面用session_start();就可以应用$arrayname数组了,很方便的。^_^ $a=mysql_fatch_object($rs);$_SESSION['b']=$a;echo $_SESSION['b']->name; 简单的位运算符 请老师帮忙,难道每一句都做了索引? mysql 多字段排序的问题,在线等 去掉相关数组中的重复记录 php表单提交 告那些对学习PHP还不坚定的朋友 请教:如何获得获cookie的生存击期? 在网页里如何调用本地机里的一个EXE程序? PHP 向大家请教正则匹配替换 插入的记录为什么不能获取最新一条记 哪位兄弟有PHP无数据库留言薄? ??????我要往库里加好多数据,帮我看看这代码那有问题??????
只要保存这个$p就可以了,session,cookie,隐藏表单方式都可以的,
我试过在普通函数中用global $p;后,可以正常访问类中的方法。
我现在要管理一个对象数组
是不是只要把数组名注册为session然后直接使用用这个数组名,就能够让数组中所有的对象都保存在session里面了呢??
var $myClass=new MyClass();
session_register("myClass");
这样就把myClass对象保存在了会话(session)中。不过这样一个代价是,你必须在每一个php脚本中包含对象的声明文件(比如MyClass.php),因为session是对每个php脚本可见的。可以这样优化:
将对象序列化(serialize)后的字符串保存在session中,在另外一个需要此对象的页面中再反向(unserialize)生成这个对象,当然这个页面要包含MyClass.php。
值得注意的是,对象中的部分信息比如对于mysql或其他数据源、文件的连接句柄会丢失,需要在对象中声明两个函数,__sleep()用于序列化时保存连接信息,__wakeup用于反向时重建连接。
对象保存在session中,会自动被序列化serialize成一个字符串保存,再次被调用时自动unserialize(),所以同样存在上面提到的__sleep()保存或清除不必要的数据和__wakeup()恢复丢失的数据的问题。
class.php 类定义文件
<?php
class A {
var $v;
function A($v) {
$this->v = $v;
}
function show() {
echo "$this->v ok";
}
}
?>file1.php
<?php
include "class.php";
session_start();$p = new A(123);
$_SESSION['p'] = $p;header("location: file2.php");
?>file2.php
<?
include "class.php";
session_start();
$p = $_SESSION['p'];
$p->show();
?>至于ABabyStudio(ABabyStudio) 说的__sleep(),__wakeup()如何使用,还请他明示。
if(!session_is_registered("arrayname")) { // 如果不存在则新建
$arrayname=array();
session_register("arrayname");
$arrayname[0]="abc";
$arrayname[1]="lmf";
……
}
在下一个页面用session_start();
就可以应用$arrayname数组了,很方便的。^_^
$_SESSION['b']=$a;
echo $_SESSION['b']->name;