Php Can';t在写上下文中使用函数返回值

Php Can';t在写上下文中使用函数返回值,php,class,session,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[$

我有一节简单的课程

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'))){ 

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

$token = Session::get($form.'_token');
if ($token !== NULL) { ... }
或者在get方法中使用isset时,只需执行以下操作:

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

在本例中,这很好,因为会话令牌永远不会为null,但作为会话控制器,值可能会被故意设置为null,也可能不会被设置,因此get方法需要返回唯一的值来确定其设置是否为null。i、 e

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) { ... }

这样做会更有益。

Isset不是一个常规函数。它是语言结构。所以它只需要变量:@Phantom我要写这个作为答案。。。我同意你的看法,这就是问题所在。@Phantom正确,但同时在方法上调用isset也没有任何意义!!从逻辑上讲,你的说法就是这个方法集。。虽然我知道它不会这么做。。哈哈。他们没有在新版本中更改它。但是他们让这个错误变得更加用户友好
致命错误:无法对函数调用的结果使用isset()(您可以使用“null!==func()”)
是的,对不起,我更多地考虑了其他构造,如empty(),因为我认为在以后的版本中可以使用。我真的没想清楚。谢谢@RaggaMugffin-420……这解决了我的问题。这已经有很多年了,但只是决定做点什么