可能重复:
Declaration of Methods should be Compatible with Parent Methods in PHP
我正在实施从SourceForge
下载的PDF(Zend_Pdf_Table)现在的问题是它给了我以下错误。
Error 1=Strict Standards: Declaration of My_Pdf_Document::save() should be compatible
with that of Zend_Pdf::save() in D:\SVN data\WebClient_PHP\trunk\library
\My\Pdf\Document.php on line 2
第2行是
class My_Pdf_Document extends My_Pdf{
第二个错误是
Error 2=Fatal error: Declaration of My_Pdf_Page::drawImage() must be compatible with
that of Zend_Pdf_Canvas_Interface::drawImage() in D:\SVN data\WebClient_PHP\trunk
\library\My\Pdf\Page.php on line 369
我的行动中的一些代码
$instance = new abc();
$select = $instance->Get_xyz($p);
try {
// create PDF
$pdf = new My_Pdf_Document('Call Logs Details.pdf', '.');
// create page
$page = $pdf->createPage();
// define font resource
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
// set font
$page->setFont($font, 24);
// create table
$table = new My_Pdf_Table(3);
// iterate over record set
// set up table content
while ($record = $select->fetch()) {
$row = new My_Pdf_Table_Row();
$cols = array();
foreach ($record as $k => $v) {
$col = new My_Pdf_Table_Column();
$col->setText($v);
$cols[] = $col;
}
$row->setColumns($cols);
$row->setFont($font, 14);
$row->setBorder(My_Pdf::TOP, new Zend_Pdf_Style());
$row->setBorder(My_Pdf::BOTTOM, new Zend_Pdf_Style());
$row->setBorder(My_Pdf::LEFT, new Zend_Pdf_Style());
$row->setCellPaddings(array(10,10,10,10));
$table->addRow($row);
}
// add table to page
$page->addTable($table, 0, 0);
// add page to document
$pdf->addPage($page);
// save as file
$pdf->save();
echo 'SUCCESS: Document saved!';
} catch (Zend_Pdf_Exception $e) {
die ('PDF error: ' . $e->getMessage());
} catch (Exception $e) {
die ('Application error: ' . $e->getMessage());
}
我知道为什么会遇到以下错误。我错过了什么?我正在使用最新的Zend框架。
答案 0 :(得分:3)
您使用不同的签名(方法定义中的参数)覆盖这些方法。你不能用PHP覆盖一个方法。
这是由My_Pdf_Document中的签名为:
引起的public function save(){
vs Zend_Pdf中的签名是:
public function save($filename, $updateOnly = false)
理想情况下,应更新My_Pdf_Document签名以匹配Zend_Pdf签名。注意:这是一个严格的错误,您可以关闭严格的错误并忽略它,希望一切正常(但我强烈建议不要这样做)。
答案 1 :(得分:1)
您尝试使用的库与ZF 1.11不完全兼容,并且该组件的作者似乎没有使用error_reporting(E_STRICT | E_ALL)
。我的建议是下载该代码库,在适当的时候更正error_reporting(E_STRICT | E_ALL)
(正如其他人在此处所述 - 有效地确保所有子方法签名与其父方法签名相匹配)。
如果原作者还在,并且需要保持更新,请将其提交给他们。