路径和类名正确,但未能使用继承的PHP类
我正在使用FPDF和WriteHTML脚本()将HTML转换为PDF 我已经在我的路径和类名正确,但未能使用继承的PHP类,php,fpdf,Php,Fpdf,我正在使用FPDF和WriteHTML脚本()将HTML转换为PDF 我已经在我的/lib/FPDF文件夹中下载了FPDF库以及WriteHTML脚本 那么/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
/lib/FPDF
文件夹中下载了FPDF库以及WriteHTML
脚本
那么/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\uhtml
类的源代码,实际上没有这样的方法
可用的方法有(+由FPDF类定义的方法):
该类的构造PDF\u HTML()
WriteHTML()
OpenTag()
CloseTag()
SetStyle()
PutLink()
看起来要么实例化了错误的类,要么调用了错误的函数。错误说明了一切。您试图调用一个根本不存在的方法。我查看了
PDF\uhtml
类的源代码,实际上没有这样的方法
可用的方法有(+由FPDF类定义的方法):
该类的构造PDF\u HTML()
WriteHTML()
OpenTag()
CloseTag()
SetStyle()
PutLink()
看起来您实例化了错误的类或调用了错误的函数。您只需将
html2pdf.php
中的函数PDF\u HTML
重命名为\u construct
(使其成为一个新样式的php构造函数),并用父函数替换$this->FPDF
:\u construct
(调用正确的函数):
说明:
问题在于,最新版本的fpdf.php
(1.8)使用了新样式的构造函数(\uu-construct
),而script42.php
中的PDF\u-HTML
尚未更新为使用新样式的构造函数(旧样式的构造函数是ClassName
)
由于PDF\u HTML
继承自FPDF
,$this->FPDF
应该被调用到父构造函数(请参阅),如果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
}
}
function PDF_HTML($orientation='P', $unit='mm', $format='A4')
class FPDF {
public function __construct () { }
}
不幸的是,FPDF
1.8使用了新样式的构造函数:
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
}
}
function PDF_HTML($orientation='P', $unit='mm', $format='A4')
class FPDF {
public function __construct () { }
}
因此,不能使用旧样式调用使用新样式定义的父构造函数
注意:如果您真的想像现在这样使用
script42.php
的代码,您应该尝试查找fpdf.php
(fpdf 1.7使用旧式构造函数)的旧版本,并使用php版本<7
,因为旧式构造函数在php7+
中被弃用(并且在php5.3.3+
)
说明:
问题在于,最新版本的fpdf.php
(1.8)使用了新样式的构造函数(\uu-construct
),而script42.php
中的PDF\u-HTML
尚未更新为使用新样式的构造函数(旧样式的构造函数是ClassName
)
由于PDF\u HTML
继承自FPDF
,$this->FPDF
应该被调用到父构造函数(请参阅),如果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
}
}
function PDF_HTML($orientation='P', $unit='mm', $format='A4')
class FPDF {
public function __construct () { }
}
不幸的是,FPDF
1.8使用了新样式的构造函数:
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
}
}
function PDF_HTML($orientation='P', $unit='mm', $format='A4')
class FPDF {
public function __construct () { }
}
因此,不能使用旧样式调用使用新样式定义的父构造函数
注意:如果您真的想像现在这样使用
script42.php
的代码,您应该尝试查找fpdf.php
(fpdf 1.7使用旧式构造函数)的旧版本,并使用php版本<7
,因为旧式构造函数在php7+
中被弃用(并且在php5.3.3+
)是你自己的类,如果是,它是如何定义的?不是,兄弟。PDF_HTML不是我的类。这是源代码:是PDF\uhtml
你自己的类,如果是,它是如何定义的?不是,兄弟。PDF_HTML不是我的类。以下是源代码:我发现这个类有问题:。它有PDF\u HTML
作为类名,也有PDF\u HTML
作为方法名。一旦我将类名更改为PDF2HTML
,就不再有错误消息了。我对PHP OOP还是新手,但使用类名作为方法名是否违法?我发现这个类有问题:。它有PDF\u HTML
作为类名,也有PDF\u HTML
作为方法名。一旦我将类名更改为PDF2HTML
,就不再有错误消息了。我对PHP OOP还是新手,但是使用类名作为方法名是违法的吗?兄弟,你的解释让这个问题看起来很清楚。非常感谢你,我真的很感激。兄弟,你的解释让这个问题看起来很清楚。非常感谢,我真的很感激。