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

TCPDF自定义页脚调用外部变量报错Undefined variable: name的解决方法

解决TCPDF Footer方法中调用外部变量的问题

问题原因

Footer()是TCPDF类的成员方法,处于类的局部作用域,无法直接访问外部(全局或其他方法)定义的$name变量,因此触发"Undefined variable: name"错误。

解决方案:通过类属性传递变量

最规范的方式是创建TCPDF的子类,添加自定义属性存储用户名,在实例化子类后将查询到的$name赋值给该属性,再在Footer()中通过$this访问。

步骤1:定义自定义TCPDF子类

class MyPDF extends TCPDF {
    // 定义存储用户名的类属性
    public $username;

    public function Footer() {
        // 定位到底部15mm处
        $this->SetY(-15);
        // 设置字体
        $this->SetFont('helvetica', 'I', 8);
        
        $fhtml = '
        <table>
        <tr>
        <td>User </td><td colspan="10">: ' . $this->username . '</td>
        </tr>
        </table>
        ';
        
        $this->writeHTML($fhtml, true, false, true, false, '');
    }
}

步骤2:数据库查询与PDF实例化

// 数据库连接(假设$conn已正确初始化)
// 安全的查询方式(防止SQL注入)
$stmt = mysqli_prepare($conn, "SELECT * FROM users WHERE users = ?");
mysqli_stmt_bind_param($stmt, "s", $users);
mysqli_stmt_execute($stmt);
$sqluser = mysqli_fetch_assoc(mysqli_stmt_get_result($stmt));
$name = $sqluser["login"];

// 实例化自定义PDF类
$pdf = new MyPDF();
// 将查询到的用户名赋值给类属性
$pdf->username = $name;

// 后续PDF操作(添加页面、写入内容等)
$pdf->AddPage();
$pdf->Write(0, 'PDF内容示例');
// 输出PDF
$pdf->Output('custom_footer.pdf', 'I');

可选方案:使用全局变量(不推荐)

如果不想创建子类,可以在Footer()方法开头声明global $name;来引入全局变量,但这种方式会破坏代码封装性,不建议在复杂项目中使用:

public function Footer() {
    global $name; // 声明使用全局变量$name
    
    $this->SetY(-15);
    $this->SetFont('helvetica', 'I', 8);
    $fhtml = '
    <table>
    <tr>
    <td>User </td><td colspan="10">: ' . $name . '</td>
    </tr>
    </table>
    ';
    $this->writeHTML($fhtml, true, false, true, false, '');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:27:37