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

내 함수 내에서 $ orderNr의 데이터를 액세서 할 수없는거야 이유에 대해 어떤 생각?

+4

숨겨진 전역 매개 변수가 아닌 매개 변수로 전달하십시오. 이렇게하면 코드가보다 구체적이고 오류가 발생하기 쉽습니다. 모든 세계를 제거하고 나중에 사용하지 않도록하십시오. – hakre

+0

클래스 내의 $ orderNr을 선언하십시오. –

+0

함수에서 변수가 아닌 클래스가 선언됩니다 : PDF 클래스의'global $ order'와'$ orderNr = $ order-> get_order_number();' – 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를 만들 수 있습니다.

관련 문제