路径和 Class 名称正确,但无法使用继承 PHP Class
The Path and Class Name is Correct, But Failed To Use Inherited PHP Class
我正在使用 FPDF 和 WriteHTML 脚本 (http://www.fpdf.org/en/script/script42.php) 将我的 HTML 转换为 PDF。
我已经将 FPDF 库连同 WriteHTML
脚本一起下载到我的 /lib/fpdf
文件夹中。
那么 /lib/fpdf
文件夹中的内容是:
/lib/fpdf/fpdf.php
/lib/fpdf/html2pdf.php
然后我写这段代码:
require_once ('html2pdf.php');
$html_code = ''; // some HTML code here
$pdf = new PDF_HTML();
$pdf->AddPage();
$pdf->WriteHTML($html_code);
$pdf->Output();
这个简单的代码给我这个错误:
Fatal error: Call to undefined method PDF_HTML::FPDF() in /home/***/html2pdf.php on line 52
这就是第 52 行的真正含义:
$this->FPDF($orientation,$unit,$format);
为什么我在正确按照教程进行操作时收到该错误消息。为什么 html2pdf 脚本无法识别该方法?谢谢
错误说明了一切。您尝试调用根本不存在的方法。我看了PDF_HTML
class的源码,确实没有这个方法
可用的方法有(+ FPDF class 定义的方法):
PDF_HTML()
class 的构造
WriteHTML()
OpenTag()
CloseTag()
SetStyle()
PutLink()
看来您要么实例化了错误的 class,要么调用了错误的函数。
您只需将 html2pdf.php
中的函数 PDF_HTML
重命名为 __construct
(使其成为 新样式 PHP构造函数)并将 $this->FPDF
替换为 parent::__construct
(以调用正确的函数):
// THIS:
function PDF_HTML($orientation='P', $unit='mm', $format='A4')
{
//Call parent constructor
$this->FPDF($orientation,$unit,$format);
// BECOMES THAT:
function __construct($orientation='P', $unit='mm', $format='A4')
{
//Call parent constructor
parent::__construct($orientation,$unit,$format);
解释:
问题是 fpdf.php
(1.8) 的最新版本使用了新式构造函数 (__construct
) 而 script42.php
中的 PDF_HTML
尚未更新为使用新式构造函数(旧式构造函数是 ClassName
)。
由于 PDF_HTML
继承自 FPDF
,$this->FPDF
应该调用父构造函数(参见 Calling PHP Parent Constructors With Old/New Syntax),如果 FPDF
是使用旧式构造函数:
class FPDF {
// Constructor (in PHP < 5.3.3), Deprecated in PHP 7+
public function FPDF () {
}
}
class PDF_HTML {
// Constructor (in PHP < 5.3.3)
public function PDF_HTML () {
$this->FPDF(); // Call to parent constructor
}
}
您在 script42.php
中清楚地看到 PDF_HTML
使用旧式构造函数:
function PDF_HTML($orientation='P', $unit='mm', $format='A4')
不幸的是,FPDF
1.8 使用新样式构造函数:
class FPDF {
public function __construct () { }
}
因此您不能使用旧样式调用以新样式定义的父构造函数。
注意:如果你真的想像现在一样使用script42.php
的代码,你应该尝试寻找旧版本的fpdf.php
(FPDF 1.7 使用旧式构造函数)并使用 PHP 版本 < 7
,因为旧式构造函数在 PHP 7+
中已弃用(在 PHP 5.3.3+
中是 considered standard function)。
我正在使用 FPDF 和 WriteHTML 脚本 (http://www.fpdf.org/en/script/script42.php) 将我的 HTML 转换为 PDF。
我已经将 FPDF 库连同 WriteHTML
脚本一起下载到我的 /lib/fpdf
文件夹中。
那么 /lib/fpdf
文件夹中的内容是:
/lib/fpdf/fpdf.php
/lib/fpdf/html2pdf.php
然后我写这段代码:
require_once ('html2pdf.php');
$html_code = ''; // some HTML code here
$pdf = new PDF_HTML();
$pdf->AddPage();
$pdf->WriteHTML($html_code);
$pdf->Output();
这个简单的代码给我这个错误:
Fatal error: Call to undefined method PDF_HTML::FPDF() in /home/***/html2pdf.php on line 52
这就是第 52 行的真正含义:
$this->FPDF($orientation,$unit,$format);
为什么我在正确按照教程进行操作时收到该错误消息。为什么 html2pdf 脚本无法识别该方法?谢谢
错误说明了一切。您尝试调用根本不存在的方法。我看了PDF_HTML
class的源码,确实没有这个方法
可用的方法有(+ FPDF class 定义的方法):
PDF_HTML()
class 的构造
WriteHTML()
OpenTag()
CloseTag()
SetStyle()
PutLink()
看来您要么实例化了错误的 class,要么调用了错误的函数。
您只需将 html2pdf.php
中的函数 PDF_HTML
重命名为 __construct
(使其成为 新样式 PHP构造函数)并将 $this->FPDF
替换为 parent::__construct
(以调用正确的函数):
// THIS:
function PDF_HTML($orientation='P', $unit='mm', $format='A4')
{
//Call parent constructor
$this->FPDF($orientation,$unit,$format);
// BECOMES THAT:
function __construct($orientation='P', $unit='mm', $format='A4')
{
//Call parent constructor
parent::__construct($orientation,$unit,$format);
解释:
问题是 fpdf.php
(1.8) 的最新版本使用了新式构造函数 (__construct
) 而 script42.php
中的 PDF_HTML
尚未更新为使用新式构造函数(旧式构造函数是 ClassName
)。
由于 PDF_HTML
继承自 FPDF
,$this->FPDF
应该调用父构造函数(参见 Calling PHP Parent Constructors With Old/New Syntax),如果 FPDF
是使用旧式构造函数:
class FPDF {
// Constructor (in PHP < 5.3.3), Deprecated in PHP 7+
public function FPDF () {
}
}
class PDF_HTML {
// Constructor (in PHP < 5.3.3)
public function PDF_HTML () {
$this->FPDF(); // Call to parent constructor
}
}
您在 script42.php
中清楚地看到 PDF_HTML
使用旧式构造函数:
function PDF_HTML($orientation='P', $unit='mm', $format='A4')
不幸的是,FPDF
1.8 使用新样式构造函数:
class FPDF {
public function __construct () { }
}
因此您不能使用旧样式调用以新样式定义的父构造函数。
注意:如果你真的想像现在一样使用script42.php
的代码,你应该尝试寻找旧版本的fpdf.php
(FPDF 1.7 使用旧式构造函数)并使用 PHP 版本 < 7
,因为旧式构造函数在 PHP 7+
中已弃用(在 PHP 5.3.3+
中是 considered standard function)。