我有一个函数需要一些在我的函数之外定义的变量。 我认为仅仅在我的函数中使用global重新声明我的变量就足够了。但由于某种原因,它不起作用。
这是我的代码:
$orderNr = $order->get_order_number();
require('fpdf.php');
class PDF extends FPDF {
// Page header
function Header() {
global $orderNr;
// Arial bold 9
$this->SetFont('Arial', 'B', 8);
// Line break
$this->Ln(10);
$this->Multicell(50, 4, $orderNr, 1, 'L');
$this->Cell(140, 8, '', 1);
}
}
为什么我无法在我的函数中访问$ orderNr的数据?
答案 0 :(得分:0)
我并不总是很快就能做到这一点,但你应该将订单和PDF库一起带到一起,而不要将它们相互耦合。这将使事情保持一致但灵活:
class OrderPdf
{
public function create(Order $order, $class = 'FPDF')
{
if (is_string($class) {
$pdf = new $class();
} else {
$pdf = $class;
}
if (! $pdf instanceof FPDF) {
throw new InvalidArgumentException(
sprtinf('Need a FPDF, %s given', var_export($pdf, true)
);
}
$orderNr = $order->get_order_number();
$this->header($pdf, $orderNr);
return $pdf;
}
function Header(FPDF $pdf, $orderNr)
{
// Arial bold 9
$pdf->SetFont('Arial', 'B', 8);
// Line break
$pdf->Ln(10);
$pdf->Multicell(50, 4, $orderNr, 1, 'L');
$pdf->Cell(140, 8, '', 1);
}
...
}
用法:
require('fpdf.php');
$orderPdf = new OrderPdf();
$pdf = $orderPdf->create($order);
OrderPdf
对象现在可以从订单创建FPDF。