如何访问函数外部的变量?

时间:2013-08-28 08:17:55

标签: php function variables

我有一个函数需要一些在我的函数之外定义的变量。 我认为仅仅在我的函数中使用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的数据?

1 个答案:

答案 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。