有个比较有趣的php语法问题

szuzsq 2018-05-02 10:55:35
关于类的__set和__get函数.

class JSONSerial {
protected $m_datas = null;
public function __set($name, $value) {
$this->m_datas[$name] = $value;
}
public function __get($name) {
return isset($this->m_datas[$name]) ? $this->m_datas[$name] : null;
}
}

以上代码我感觉没毛病.
但是如果使用时,以下2种情形,结果是不一样的.


$serial = new JSONSerial();
$serial->hot_type = 2;

$hot_type = isset($serial->hot_type) ? $serial->hot_type : 0;
echo $hot_type . "<br>";
$hot_type = $serial->hot_type != null ? $serial->hot_type : 0;
echo $hot_type . "<br>";


亲测,前面输出0,后面输出2.为毛?
我的php是5.4.45
...全文
575 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
szuzsq 2018-05-04
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
这只能说明你太马虎了,忽略了 isset 的特殊性 JSONSerial 加上 __isset 就可以了
        public function __isset($name) {
                return isset($this->m_datas[$name]);
        }
大神膜拜,确实不知道这个机制. 惯性思维很可怕.
xuzuning 2018-05-02
  • 打赏
  • 举报
回复
这只能说明你太马虎了,忽略了 isset 的特殊性 JSONSerial 加上 __isset 就可以了
        public function __isset($name) {
                return isset($this->m_datas[$name]);
        }

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧