Yaf_Session是Yaf对Session的包装, 实现了Iterator, ArrayAccess, Countable接口, 方便使用.
在PHP5.3之后, 打开yaf.use_namespace的情况下, 也可以使用 Yaf\Session
final Yaf_Session implements Iterator , ArrayAccess , Countable {public static Yaf_Session getInstance ( void );public Yaf_Session start ( void );public mixed get ( string $name = NULL );public boolean set ( string $name ,
mixed $value );public mixed __get ( string $name );public boolean __set ( string $name ,
mixed $value );public boolean has ( string $name );public boolean del ( string $name );public boolean __isset ( string $name );public boolean __unset ( string $name );
}
Yaf_Session是单例类, 只能通过getInstance()获取实例, 不能直接new. 首次调用getInstance时会话会自动启动,
因此通常不需要手工调用start(); start()是幂等的, 多次调用也不会重复启动会话.
Yaf_Session直接作用于$_SESSION超全局变量: 通过Yaf_Session写入的会话数据, 可以直接通过$_SESSION读取, 反之亦然. 两种访问方式看到的是同一份数据.
通过$_SESSION访问的例子
<?php
Yaf_Session::getInstance();
Yaf_Session::getInstance()->set("foo", "bar");
var_dump($_SESSION["foo"]); /* string(3) "bar" */
$_SESSION["hello"] = "world";
var_dump(Yaf_Session::getInstance()->get("hello")); /* string(5) "world" */
?>
由于实现了Iterator, ArrayAccess和Countable接口, 会话数据除了get()/set()/has()/del()方法外, 还可以用属性语法, 数组语法和count()来访问:
多种访问方式的例子
<?php
$session = Yaf_Session::getInstance();
/* 属性语法 */
$session->foo = "bar";
var_dump($session->foo);
/* 数组语法 */
$session["baz"] = "qux";
var_dump($session["baz"]);
/* 会话条目数 */
var_dump(count($session));
/* 遍历全部会话数据 */
foreach ($session as $name => $value) {
echo "$name => $value\n";
}
?>