在写上下文中不能使用函数返回值

时间:2014-07-17 12:20:03

标签: php class session

我有这个简单的会话类

class Session
{
    public static function init() {
       @session_start();
    }

    public static function set($key, $value) {
        $_SESSION[$key] = $value;
    }

    public static function get($key) {
        if (isset($_SESSION[$key]))
            return $_SESSION[$key];
    }

    public static function destroy() {
        unset($_SESSION);
        session_destroy();
    }
}

在我的其他课程中

public function verifyFormToken($form)
{
    // check if a session is started and a token is transmitted, if not return an error
    if(!isset(Session::get($form.'_token'))){ 
        return false;
    }

    // check if the form is sent with token in it
    if(!isset($data['token'])) {
        return false;
    }

    // compare the tokens against each other if they are still the same
    if (Session::get($form.'_token') !== $data['token']) {
        return false;
    }

    return true;
}

我可以设置会话没问题但是当我使用verifyFormToken()来获取它时,我收到此错误消息

  

在写上下文中不能使用函数返回值

指向此行

if(!isset(Session::get($form.'_token'))){ 

1 个答案:

答案 0 :(得分:2)

您必须将变量定义为传递给isset:

$token = Session::get($form.'_token');
if ($token !== NULL) { ... }

或者在get方法中使用isset时,只需执行以下操作:

if (Session::get($form.'_token') !== NULL) { ... }

编辑**

在这种情况下,这很好,因为会话令牌永远不会为null,但作为会话控制器,值可能会故意设置为NULL,或者可能未设置,因此get方法需要返回唯一值以确定其是否设置。即。

define('MY_SESSION_NOT_SET',md5('value_not_set'));

class Session
{
    public static function init() {
       @session_start();
    }

    public static function set($key, $value) {
        $_SESSION[$key] = $value;
    }

    public static function get($key) {
        if (isset($_SESSION[$key]))
            return $_SESSION[$key];
        else
            return MY_SESSION_NOT_SET;
    }

    public static function destroy() {
        unset($_SESSION);
        session_destroy();
    }
}

if (Session::get($form.'_token') === MY_SESSION_NOT_SET) { ... }

这样的事情会更有益。