11.7. Yaf_Session

简介

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()是幂等的, 多次调用也不会重复启动会话.

与$_SESSION的关系

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";
     }
     ?>