0

我有一个函数,它需要一些在我的函数之外定义的变量。我认为只需在全局函数中重新声明我的变量就足够了。但由于某种原因它不起作用。

这是我的代码

$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 的数据的任何想法?

4

1 回答 1

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。

于 2013-08-28T08:28:50.390 回答