读书人

ZendFramework学习第三章(核心组件

发布时间: 2012-09-10 22:20:12 作者: rapoo

ZendFramework学习第三章(核心组件—会话处理之Zend_Session基本用法)

今天很是蛋疼!Zend_Session研究了半天没出结果,最后发现自己没有在入口文件处启用session!!搞的我一下午很郁闷,破电脑卡呀卡的很是恼火。。。下边把我小小成就讲给大家吧。

在php中,会话(session)代表服务器端与客户端之间的一种持久的状态数据。它的本质是一种数据,代表着服务器与客户端之间的一种状态。例如,论坛登录的用户数据、用户登录的时间、正在浏览的页面等都属于会话的范畴。

对于Session的介绍我不做过多的解释了,自己百度去吧。下边讲讲Zend_Session的基本用法


实现会话

要使用Zend_Session会话,需要以下几步。

1》引用命名空间类(Zend_Session_Namespace)

2》为命名空间类实例化一个对象。可以使用new关键字为实例化对象,其中要使用参数命名空间。如果不指定参数,则类的构造函数会使用默认的命名空间参数,其值为default。

3》使用Zend_Session_Namespace类的实例成员,可以对其进行赋值或者读取操作。

下面通过实例演示:


在此之前请大家检查自己在入口文件是否启用了Session(启用方法:Zend_Session::start();)。

我是将下面代码写到了控制器的方法里:

$mynamespace=new Zend_Session_Namespace('Myspace'); //实例化对象
if (isset($mynamespace->numberOfPageRequests)) //判断是否有值,当然没了。。。
{
$mynamespace->numberOfPageRequests++; //如果有的话累加
}
else
{
$mynamespace->numberOfPageRequests=1; //如果没有的话给值为1
}
echo "用户的浏览次数为:";
echo "<font size=\"6\" color=\"#ff0000\">";
echo $mynamespace->numberOfPageRequests; //输出获取的对象成员值
echo "</font> 次";

运行结果:

可想而知。。。。 也就是每刷新一次页面,用户的浏览次数加1。


遍历会话命名空间

会话命名空间Zend_Session_Namespace 支持foreach(通过循环遍历所有成员的php语句)语句。基于此,可以使用foreach语句对会话命名空间进行迭代,以遍历会话命名空间中的全部的值。演示:

$myNamespace=new Zend_Session_Namespace('Myspace');
$myNamespace->webhost="127.0.0.1";
$myNamespace->hostname="localhost";
$myNamespace->user="root";
$myNamespace->password="321654";
$myNamespace->db_name="test";
$myNamespace->db_type="Mysql";
foreach ($myNamespace as $index => $value)
{
echo "命名空间myNamespace中的:".$index;
echo "为:".$value."<p>\n";
}

运行结果:

命名空间myNamespace中的:webhost为:127.0.0.1

命名空间myNamespace中的:hostname为:localhost

命名空间myNamespace中的:user为:root

命名空间myNamespace中的:password为:321654

命名空间myNamespace中的:db_name为:test

命名空间myNamespace中的:db_type为:Mysql


访问会话命名空间

访问会话命名空间可以使用通常对于一般变量的方法,如直接为变量赋值、直接读取变量的值、使用isset()函数判断其是否为null值、使用unset()来注销变量等。演示:

$login=new Zend_Session_Namespace('other');
$login->user="Administrator";
if (isset($login->user))
{
echo "\$login->user已经有值,其值为:";
echo $login->user;
unset($login->user);
}
else
{
echo "\$login->user无值";
}
echo "<p><p>";
if (isset($login->pass))
{
echo "\$login->pass 已经有值,其值为:";
echo $login->pass;

}
else
{
echo "\$login->pass无值@!";
echo "<p>";
$login->pass="12345679";

}
echo "<p>";
foreach ($login as $index => $value)
{
echo "命名空间login中的:".$index."为".$value."<p>\n";
}


运行结果:

$login->user已经有值,其值为:Administrator

$login->pass无值@!

命名空间login中的:pass为12345679

从运行结果可以看出一开始应为给$login->user赋值所有$login->user有值。但经过 unset($login->user);语句将变量注销所以后边命名空间遍历的时候而没有$login->user。

还有一开始$login->pass确实是无值的,但是经过 $login->pass="12345679";赋值操作后,遍历命名空间时,有了$login->pass的值。大家可以仔细按程序流程走一边。


好了今天不早了,该回家了。希望和大家每天一起共同进步!



读书人网 >.NET Framework

热点推荐