TCPDF自定义页脚调用外部变量报错Undefined variable: name的解决方法
问题原因
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
相关产品推荐
相关产品推荐

