0

尝试使用以下代码在 PHP 中扩展 FPDF 类:

class Reports extends FPDF{

        var $reporttitle = 'TEST';

        function settitle($titlename){      
            $this->$reporttitle = $titlename;
        }
        function header(){
            $this->SetMargins(.5,.5);   
            $this->Image('../../resources/images/img028.png');
            $this->SetTextColor(3,62,107);
            $this->SetFont('Arial','B',14);
            $this->SetY(.7);
            $this->Cell(0,0,$this->$reporttitle,0,0,'R',false,'');
            $this->SetDrawColor(3,62,107);          
            $this->Line(.5,1.1,10,1.1);
        }
    }

我用变量 $pdf 实例化该类并尝试调用该方法:

    $pdf = new Reports('L','in','Letter');  
    $pdf-> settitle('Daily General Ledger');
    $pdf->AddPage();    

我收到一个内部 500 错误....调试告诉我 $reporttitle 是一个空属性。谁能给我一些关于如何在扩展类中设置变量字段的见解?谢谢。

4

2 回答 2

3

不要使用美元符号作为类属性的前缀:

            $this->reporttitle = $titlename;

PHP 评估你的$reporttitle第一个,因为你使用了美元符号,所以你基本上是在做:

$this-> = $titlename;
//     ^ nothing

演示一下,如果你先 delcared $reporttitle = 'reporttitle',它会起作用。


另外值得注意的是,您的变量不是私有的,它是公共的,因为您使用了 PHP4var语法:

var $reporttitle = 'TEST';

如果您想要一个私有变量,请使用 PHP5 访问关键字。请记住,派生类无法访问私有变量,因此如果您有一个扩展类,Reports则将reporttitle无法访问。

private $reporttitle = 'TEST';
于 2012-12-26T22:22:31.033 回答
1
$this->$reporttitle = $titlename;

应该:

$this->reporttitle = $titlename;
于 2012-12-26T22:21:57.073 回答