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

问题描述 投票:1回答:2

我有一个类与$_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']) {

    }

}
?>
php class default
2个回答
2
投票

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

你无法做到这一点:

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

}

但是,这很好:

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

0
投票

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

你可以试试$uid = null;

在功能里面,

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

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

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

private $uid;

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

© www.soinside.com 2019 - 2024. All rights reserved.