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

PHP类set方法赋值属性后所有get返回最后设置值的问题咨询

异常产生原因

核心错误是PHP类属性访问语法书写错误:你在所有setter、getter方法中使用了$this->$_views、$this->$_urls、$this->$_traffic的写法,属性名前多写了一个$符号,这属于PHP的可变属性语法,并非访问指定类属性的标准写法。

  • 调用setViewCount(44)时,类属性$_views初始值为null,PHP会将null转为空字符串作为实际属性名,实际执行的是给$this->""赋值44
  • 调用setUrlCount(55)时,类属性$_urls初始值同样为null,继续给$this->""赋值55,覆盖之前存入的44
  • 调用setTraffic(99999)时,类属性$_traffic初始值还是null,再次给$this->""赋值99999,覆盖之前存入的55
  • 所有getter方法取值时,同样因为属性名对应的变量值为null,读取的都是$this->""中存储的最后一次赋值99999,最终输出的三个字段值完全一致。
修复方案

将类中所有属性访问语句里,属性名前多余的$符号删除即可,修正后的Log类代码如下:

<?php

namespace Task;

class Log {
  private $_views = null;
  private $_urls = null;
  private $_traffic = null;

  /**
   * @param int $count
   */
  public function setViewCount(int $count) {
    $this->_views = $count;
  }

  /**
   * @return int
   */
  public function getViewCount() {
    return $this->_views;
  }

  /**
   * @param int $count
   */
  public function setUrlCount(int $count) {
    $this->_urls = $count;
  }

  /**
   * @return int
   */
  public function getUrlCount() {
    return $this->_urls;
  }

  /**
   * @param int $trafficData
   */
  public function setTraffic(int $trafficData) {
    $this->_traffic = $trafficData;
  }

  /**
   * @return int
   */
  public function getTraffic() {
    return $this->_traffic;
  }
}

?>

修改后重新执行测试代码,将得到预期输出:{"views":44,"urls":55,"traffic":99999}。

语法提示:PHP中访问类实例的固定属性时,$this->后直接写属性名即可,不需要给属性名加$前缀;只有当你需要用某个变量的值动态指定要访问的属性名时,才会使用$this->$变量名的可变属性写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:24:28