You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用三元运算符设置Session类属性及取消属性赋值时出现报错的技术求助

解决你的Session类登录检查代码问题

嗨,我来帮你搞定这个报错问题!你的代码里有几个语法和逻辑上的小问题,咱们一步步梳理修正:

你代码里的核心问题

  • 属性访问错误:$this->$signedIn 多了一个多余的$,类属性访问应该是$this->signedIn(直接写属性名,不需要加$)。
  • 三元运算符使用不当:你用.(字符串拼接符)来连接多个赋值操作,这完全不符合三元运算符的语法——三元的每个分支必须是单个合法表达式,多个操作需要用括号包裹并通过逗号分隔(逗号在PHP里是表达式分隔符,会依次执行每个操作)。
  • unset是语句而非表达式:你不能直接把unset($this->userId)放在三元分支里,因为三元要求两边都是可求值的表达式,而unset是没有返回值的语句,直接放会报错。

修正后的三元运算符写法

如果坚持要用三元实现需求,可以这样写:

public function checkTheLogin() {
    isset($_SESSION['userID']) 
        ? ($this->signedIn = true, $this->userId = $_SESSION['userID']) 
        : ($this->signedIn = false, isset($this->userId) && unset($this->userId));
}

这里做了这些调整:

  1. 修正了属性访问的错误写法
  2. 用括号把多个操作包裹,通过逗号分隔,让每个分支成为合法的表达式
  3. 给unset加了isset($this->userId)判断,避免尝试销毁未定义属性时抛出警告

更推荐的写法:if-else

虽然你想用三元,但当逻辑涉及多个操作时,if-else的可读性和维护性会好很多,代码也更直观:

public function checkTheLogin() {
    if (isset($_SESSION['userID'])) {
        $this->signedIn = true;
        $this->userId = $_SESSION['userID'];
    } else {
        $this->signedIn = false;
        if (isset($this->userId)) {
            unset($this->userId);
        }
    }
}

这样写不仅不容易出错,后续维护代码的人也能一眼看懂逻辑。

内容的提问来源于stack exchange,提问作者Mishen Thakshana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 20:27:30