2013-08-28 3 views
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); 
    } 
} 

Любые мысли о том, почему я не в состоянии Acces данные $ orderNr внутри моей функции?

+4

Передайте его как параметр, а не через скрытый глобальный параметр. Это делает ваш код более конкретным и менее подвержен ошибкам. Попробуйте удалить все глобальные и не использовать его в будущем. – hakre

+0

Объявить $ orderNr внутри вашего класса –

+0

объявить класс, откуда приходит переменная, а не переменная в вашей функции: 'global $ order' и' $ orderNr = $ order-> get_order_number(); 'в классе PDF – dabe

ответ

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 от заказа в настоящее время.

Смежные вопросы