ThinkPHP 中有一个叫行为扩展的功能模块,其实就是设计模式当中的“监听者模式” (当然啦,这个还是处于十分粗糙的),对于网站的初始化等处理还是挺有用处的。 当中有一个行为标签叫 app_begin ,见名知意,就是在整个应用最开始时执行的操作。 但是有个缺憾,在 app_begin 这个标签的 Behavior 无法执行 session 的 增删改查 ,到底为何呢? 可以查看 TP 的源码: ThinkPHP/Library/Think/
App.class.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
public static function run() { load_ext_file(COMMON_PATH); Hook::listen('app_init'); App::init(); Hook::listen('app_begin'); if (!IS_CLI) { session(C('SESSION_OPTIONS')); } G('initTime'); App::exec(); Hook::listen('app_end'); return; }
|
这里注意,先执行了 Hoop:listen(‘app_begin’) , 再执行 session(C(‘SESSION_OPTIONS’)) 的 session 初始化,因此,在 app_begin 的 Behavior 是不能使用 session 的。 如果需要令到 app_begin 当中的 session 操作生效,必须 将运行的顺序交换一下,如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
public static function run() { load_ext_file(COMMON_PATH); Hook::listen('app_init'); App::init(); if (!IS_CLI) { session(C('SESSION_OPTIONS')); } Hook::listen('app_begin'); G('initTime'); App::exec(); Hook::listen('app_end'); return; }
|