2

$_SESSION我有一个与变量有很多接口的类。如果未指定,某些功能应默认为当前用户。我有用户ID,$_SESSION['userid']并在某些地方很好地使用它。但是,当我尝试将该$_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']) {

    }

}
?>
4

2 回答 2

3

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

例子

你不能这样做:

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

}

但是,这很好:

public function get_data($uid = null) {
    $uid = $uid ?? $_SESSION['userid'];
}
于 2019-02-22T04:18:21.283 回答
1

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

你可以试试$uid = null;

在函数内部,

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

(?: 是 Elvis 运算符,它检查空值并用赋值替换,PHP5.3+)

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

private $uid;

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

于 2019-02-22T04:24:09.837 回答