PHP无法在扩展类中设置私有变量

时间:2012-12-26 22:19:59

标签: php class extend

尝试使用以下代码扩展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是一个空属性。任何人都可以向我提供有关如何在扩展类中设置变量字段的一些见解吗?谢谢你。

2 个答案:

答案 0 :(得分:3)

请勿使用美元符号为类属性添加前缀:

            $this->reporttitle = $titlename;

PHP首先评估您的$reporttitle,因为您使用了美元符号,所以您基本上在做:

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

要说明,如果你第一次看到$reporttitle = 'reporttitle',那就行了。


另外值得注意的是,您的变量不是私有的,因为您使用了PHP4 var语法,所以它是公开的:

var $reporttitle = 'TEST';

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

private $reporttitle = 'TEST';

答案 1 :(得分:1)

$this->$reporttitle = $titlename;

应该是:

$this->reporttitle = $titlename;