PHP 在类函数中使用 $_SESSION 变量作为默认值
Posted
技术标签:
【中文标题】PHP 在类函数中使用 $_SESSION 变量作为默认值【英文标题】:PHP use $_SESSION variable as default in class function 【发布时间】:2019-02-22 04:01:41 【问题描述】:我有一个类与$_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'])
?>
【问题讨论】:
【参考方案1】:您不能在方法签名中使用变量。您可以将 $uid 参数默认为空。如果 $uid 为空,则在函数体中使用会话中的值。
示例
你不能这样做:
public function get_data($uid = $_SESSION['userid'])
但是,这很好:
public function get_data($uid = null)
$uid = $uid ?? $_SESSION['userid'];
【讨论】:
【参考方案2】:在 PHP 中不允许将常量表达式/调用函数作为参数的默认值。
你可以试试$uid = null;
函数内部,
$uid = $uid ?: $_SESSION['user_id'];
(?: 是 Elvis 运算符,它检查空值并替换为赋值,PHP5.3+)
但是,由于你可能会多次这样做,你可以考虑创建一个类变量并在构造函数中初始化值。
private $uid;
public __constructor($uid = null)
$this->uid = uid ?: $_SESSION['user_id'];
【讨论】:
由于您明确地为$uid
参数提供默认值 null
,我认为使用空合并运算符会更合适。
是的,但是如果有人传入 false 或空字符串怎么办? uid 将是一些意想不到的值
在这种情况下,我认为使用以下内容会更合适。 $this->uid = !empty($uid) ? $uid : $_SESSION['user_id']
。但是,如果您需要明确地检查您的检查,那么我会说您的类布局和命名约定有问题。就目前而言;任何看过上述类和方法的人都会明白,传递一个空字符串或 false 不是最初的程序员想要的。
$this->uid = uid ?: $_SESSION['user_id'];
实际上与$this->uid = !empty($uid) ? $uid : $_SESSION['user_id']
没有什么不同,不是吗?任何人都知道他们不应该传递空字符串或 false,但他们可能不会在传递之前检查 $var。
顺便说一句,我的帖子有点跑题了,这个问题你的回答最好。以上是关于PHP 在类函数中使用 $_SESSION 变量作为默认值的主要内容,如果未能解决你的问题,请参考以下文章
PHP:$_SESSION - 在 $_SESSION 变量中存储临时使用的数据的优缺点是啥
为啥 PHP $_SESSION 变量在 header() 方法中使用时不起作用?