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

PHP类公共数组属性类内有值外部调用为空问题排查

问题修复方案

类属性方法内有值、外部访问为空的问题,按以下优先级排查修复即可:

1. 修正实例化变量名拼写不一致问题

这是最高发的诱因,对照你贴的外部代码:

  • 实例化类时赋值的变量是$saleinvoice(sale为单数,无末尾s):$saleinvoice = new SalesInvoice();
  • 后续调用方法、访问属性时用的变量是$salesinvoice(sale为复数,多了末尾s)
    两个变量完全独立,你实际把对象存在了$saleinvoice中,后续操作的是PHP自动生成的空stdClass对象,自然读不到存入的数组数据。
    修复方式:统一所有代码段的对象变量名,保证实例化、方法调用、属性访问用的是同一个变量,不要出现单复数拼写差异。

2. 补全方法形参,闭环SQL查询逻辑

你定义的fnSalesInvoice()方法没有声明入参,但外部调用时传入了$_GET["tx"]参数。如果你的SQL查询资源$stmt是依赖这个传入的交易号生成的,方法内部实际拿不到该参数,你之前内部打印能看到值大概率是依赖了全局作用域残留的测试$stmt资源,和当前调用的查询逻辑无关。
修复后的类方法参考:

class SalesInvoice {
  public $invLineItems=array();

  public function fnSalesInvoice($tx){
      // 初始化数据库连接、生成查询stmt的逻辑要放在方法内,依赖传入的$tx做查询条件
      $conn = sqlsrv_connect(/* 你的数据库连接配置 */);
      $sql = "SELECT idInvoiceLines, iModule /* 其他需要查询的字段 */ FROM 你的发票行表 WHERE 交易号字段 = ?";
      $params = array($tx);
      $stmt = sqlsrv_query($conn, $sql, $params);

      // 先清空旧数据,避免多次调用方法时数据重复叠加
      $this->invLineItems = array();
      while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC))
      {
        $this->invLineItems[]= array(
              "lineId"=>$row["idInvoiceLines"], 
              "module"=> $row["iModule"]
              // 其余字段按实际需求补全
        );
      }
      // 注意你之前的print_r语句少了右括号,属于语法错误,调试时要补全
      // print_r($this->invLineItems);
  }
}

3. 校验属性名拼写一致性

PHP类属性大小写敏感,检查三个位置的属性名拼写完全匹配:

  • 类内声明属性:public $invLineItems=array();
  • 方法内赋值:$this->invLineItems[] = ...
  • 外部访问:$obj->invLineItems
    任何大小写差异都会导致访问到全新的空属性,读不到之前存入的数据。
修复后的外部调用参考
// 开头加这两行开全量错误提示,所有拼写、语法错误会直接报出来,不用盲查
error_reporting(E_ALL);
ini_set('display_errors', 1);

require_once('salesinvoice.php');
// 统一变量名,这里统一用带s的$salesinvoice
$salesinvoice = new SalesInvoice();
// 调用方法传参,变量名保持一致
$salesinvoice->fnSalesInvoice($_GET["tx"]);

// 打印验证数组内容
echo "<pre>";
print_r($salesinvoice->invLineItems);
echo "</pre>";

// 遍历输出
foreach($salesinvoice->invLineItems as $val){
    echo "<br>". $val["lineId"] . $val["module"] ;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:48:24