【问题标题】:Can't use function return value in write context不能在写上下文中使用函数返回值
【发布时间】:2014-09-08 07:36:13
【问题描述】:

我有这个简单的会话类

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 不是常规函数。它是语言结构。所以它只需要变量:stackoverflow.com/questions/1532693/…
  • @Phantom 我打算写这个作为答案......我同意你的看法,这就是问题所在。
  • @Phantom 正确,但是在方法上调用 isset 无论如何也没有任何意义!!从逻辑上讲,您的说法是这种方法集..虽然我知道那不是它会尝试做的..哈哈。

标签: php class session


【解决方案1】:

你必须定义一个变量作为传递给isset:

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

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

if (Session::get($form.'_token') !== 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) { ... }

这样的东西会更有益。

【讨论】:

  • 他们没有在新版本中更改它。但他们使错误更加用户友好Fatal error: Cannot use isset() on the result of a function call (you can use "null !== func()" instead)
  • 是的,抱歉,我更多地考虑其他结构,如 empty(),因为我认为它在以后的版本中有效。没想到。
  • 感谢@RaggaMugffin-420 ....解决了我的问题。有这个很久了,但只是决定做点什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 2010-12-04
  • 2015-04-13
  • 2023-03-12
相关资源
最近更新 更多