PHP 如何在 for 循环中重新声明类


php how to redeclare class in a for loop

我使用一个名为PDFmerger的库,自然地,它将pdf合并在一起。我希望每天晚上运行一个 cron 来构建它们,以便为第二天做好准备。问题是当我在第一个代码之后运行代码时,它失败了,因为它正在尝试重新声明类。

for声明...

            foreach ($pdfs_to_build as $pdf) {
                // do stuff
                $this->merge_pdfs($pdf['pdf_id']);
            }

还有我在循环中运行的 pdf 合并代码......

$pdf = new PDFMerger;
$pdf->addPDF(DIR_BOOKS.$book_path.'/static-pages/page-1.pdf', '1'); 
$pdf->addPDF(DIR_FINAL_PDFS.$pdf_id.'/custom-page-1.pdf','1'); 
$pdf->addPDF(DIR_BOOKS.$book_path.'/static-pages/page-2.pdf', '1'); 
$pdf->merge('file', DIR_FINAL_PDFS.$pdf_id.'/final-build-'.$pdf_id.'.pdf');

第一个 1 完成后的错误,我们已经进入下一个......

致命错误:无法在第 24 行的/var/www/example/pdfmerger/PDFMerger.php 中重新声明类 PDFMerger

我想知道是否有解决方法?

问题不在于你给new PDFMerger打了两次电话,这是完全可以接受的。 问题是文件:

/var/www/example/pdfmerger/PDFMerger.php

正在被include(或以其他方式执行)两次,在第 24 行:

class PDFMerger {

这就是触发错误的原因,该类已经被声明了。 弄清楚为什么该文件被包含两次,您的错误就会消失。

你的代码很好。这不会失败。但是,您发布的内容中未列出,您包括PDFMerger.php .可能是通过在循环内运行 https://pdfmerger.codeplex.com/显示include 'PDFMerger.php';

只需将该行移出循环和/或将include更改为 include_once 即可。