php 如何在 for 循环中重新声明 class

php how to redeclare class in a for loop

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

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');

第一个完成后出错,我们进入下一个...

Fatal error: Cannot redeclare class PDFMerger in /var/www/example/pdfmerger/PDFMerger.php on line 24

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

问题不在于您两次调用 new PDFMerger,这是完全可以接受的。问题是文件:

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

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

class PDFMerger {

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

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

只需将该行移出循环 and/or 将 include 更改为 include_once