我有一个与$_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']) {
}
}
?>
答案 0 :(得分:2)
您不能在方法签名中使用变量。您可以将$ uid参数默认为null。然后,如果$ uid为null,则在函数主体中使用会话中的值。
您无法执行此操作:
public function get_data($uid = $_SESSION['userid']) {
}
但是,这很好:
public function get_data($uid = null) {
$uid = $uid ?? $_SESSION['userid'];
}
答案 1 :(得分:0)
在PHP中不允许使用常量表达式/作为参数默认值的调用函数。
您可以尝试$uid = null;
在函数内部
$uid = $uid ?: $_SESSION['user_id'];
(?:是猫王运算符,它检查空值并替换为分配的值PHP5.3 +)
但是,由于可以多次执行,因此可以考虑创建一个类变量并在构造函数中初始化该值。
private $uid;
public __constructor($uid = null) {
$this->uid = uid ?: $_SESSION['user_id'];
}