2012-07-25 143 views
1

我正在使用tFPDF類。將變量傳遞給擴展另一個類的類

我正在使用此代碼來獲得自定義擴展此類頁眉和頁腳

class PDF extends tFPDF{ 
    function Header(){ 
     $this->Image('../../images/logo-admin.png',10,6,30); 

     $this->SetFont('DejaVu','',13); 
     $this->Cell(247,10,$produto,0,0,'C',false); 

     $this->SetDrawColor(0,153,204); 
     $this->SetFillColor(98,197,230); 
     $this->SetTextColor(255); 
     $this->Cell(30,10,date('d/m/Y'),1,0,'C',true); 

     $this->Ln(20); 
    } 

    function Footer(){ 
     $this->SetY(-15); 
     $this->SetFont('Arial','',8); 
     $this->Cell(0,10,'P'.chr(225).'gina '.$this->PageNo().'/{nb}',0,0,'C'); 
    } 
} 

我需要做的,是與不屬於類的變量在某種程度上改變$produto

我打電話給這個班,使用$pdf = new PDF();

我如何可以傳遞一個變量這一類,所以我可以使用一個字符串,像$pdf = new PDF('SomeString');,並用它裏面的類象$this->somestring = $somestringfromoutside

+0

構造函數有什麼問題? – 2012-07-25 15:30:54

回答

3

你可以使用protected var並聲明一個setter。

class PDF extends tFPDF { 

protected $_produto = NULL; 

public function Header(){ 
    /* .. */ 
    $this->Cell(247,10,$this->_getProduto(),0,0,'C',false); 
    /* .. */ 
} 

public function Footer(){ 
    /* .. */ 
} 

public function setProduto($produto) { 
    $this->_produto = $produto; 
} 

protected function _getProduto() { 
    return $this->_produto; 
} 

} 

// Using example 
$pdf = new PDF(); 
$pdf->setProduto('Your Value'); 
$pdf->Header(); 
+1

這就是我所需要的,謝謝你的回答,我不敢相信我沒有想到getter/setter方法......謝謝! :) – silentw 2012-07-25 15:40:01

+0

你也是。但是,如果你需要一個真正的getter,你必須重構並暴露'_getProudto()'方法''public''中的'protected'。你也可以在名稱中刪除'_'前綴,它只是一個Zend命名約定。 – 2012-07-25 16:06:20

1

最好的辦法是使用__construct()方法用一個默認參數for $ myString

class PDF extends tFPDF{ 
    public $somestring; 

    function __construct($myString = '') { 
     parent::__construct(); 
     $this->somestring = $myString; 
    } 

    function Header(){ 
     $this->Image('../../images/logo-admin.png',10,6,30); 

     $this->SetFont('DejaVu','',13); 
     $this->Cell(247,10,$produto,0,0,'C',false); 

     $this->SetDrawColor(0,153,204); 
     $this->SetFillColor(98,197,230); 
     $this->SetTextColor(255); 
     $this->Cell(30,10,date('d/m/Y'),1,0,'C',true); 

     $this->Ln(20); 
    } 

    function Footer(){ 
     $this->SetY(-15); 
     $this->SetFont('Arial','',8); 
     $this->Cell(0,10,'P'.chr(225).'gina '.$this->PageNo().'/{nb}',0,0,'C'); 
    } 
} 
0

如果您只專門試圖注入$ producto變量。這將是很容易足以讓這樣的代碼中的一個變化:

function Header($producto){ 

這將允許您將參數傳遞到頁眉函數調用。

像這樣:

$tfpdf = new tFPDF(); 
$tfpdf->Header($producto); 

如果你真的想在實例化時傳遞的價值,那麼你需要定義一個構造函數,並可能是一個類屬性來存儲您的$ PRODUCTO值。然後,您將$ producto值傳遞給構造器並相應地設置屬性。然後在你的頭文件中你可以引用$ this-> producto而不是$ producto。

相關問題