繁体   English   中英

PHP使用$ _SESSION变量作为类函数中的默认变量

[英]PHP use $_SESSION variable as default in class function

我有一个与$_SESSION变量有很多接口的类。 如果未指定任何功能,则某些功能应默认为当前用户。 我在$_SESSION['userid']有用户ID,并可以在某些地方使用它。 但是,当我尝试将$_SESSION变量用作函数参数的默认值时,出现错误。 这样做的最佳方法是什么?

这是我得到的错误:

Fatal error: Constant expression contains invalid operations in main.php on line whatever

<?php
class User {

    public function log_out() {
        unset($_SESSION['userid']);
    }

    public function get_data($uid = $_SESSION['userid']) {

    }

    public function logged_in() {
        return isset($_SESSION['userid']);
    }

    public function enabled($uid = $_SESSION['userid']) {

    }

}
?>

您不能在方法签名中使用变量。 您可以将$ uid参数默认为null。 然后,如果$ uid为null,则在函数主体中使用会话中的值。

您无法执行此操作:

public function get_data($uid = $_SESSION['userid']) {

}

但是,这很好:

public function get_data($uid = null) {
    $uid = $uid ?? $_SESSION['userid'];
}

PHP不允许将常量表达式/调用函数作为参数的默认值。

您可以尝试$uid = null;

在函数内部,

$uid = $uid ?: $_SESSION['user_id'];

(?:是Elvis运算符,它检查空值并替换为分配的值PHP5.3 +)

但是,由于可以多次执行,因此可以考虑创建一个类变量并在构造函数中初始化该值。

private $uid;

public __constructor($uid = null) { $this->uid = uid ?: $_SESSION['user_id']; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM