私のアプリケーションは PDF ドキュメントを作成しています。スクリプトを使用して各ページの HTML を生成します。PDF生成クラスは「Production」、ページクラスは「Page」です。
class Production
{
private $_pages; // an array of "Page" objects that the document is composed of
public getPages()
{
return $this->_pages;
}
public render()
{
foreach($this->_pages as $page) {
$pageHtml = $page->getHtml($this); // Page takes a pointer to production to access some of its data.
}
}
}
Page クラスの概要は次のとおりです。
class Page
{
private $scriptPath; // Path to Script File (PHP)
public function getHtml(Production &$production)
{
$view = new Zend_View();
$view->production = $production;
return $view->render($this->scriptPath);
}
}
目次のコーディング中に問題が発生しました。Production にアクセスし、すべてのページを取得してクエリを実行し、ページ タイトルに基づいて TOC を作成します。
// TableOfContents.php
// "$this" refers to Zend_View from Pages->getHtml();
$pages = $this->production->getPages();
foreach($pages as $page) {
// Populate TOC
// ...
// ...
}
何が起こるかというと、TableOfContents.php 内の foreach が本番環境の foreach と干渉しているということです。本番用の foreach ループは、インデックス ページ (実際にはドキュメントの表紙の後の 2 ページ目) で終了します。
ドキュメント レイアウトは次のようになります。
1) 表紙
2) 目次
3) ページ A
4) ページ B
5) ページ C
foreach ループ内の TableOfContents.php は、必要に応じてページを調べ、ドキュメント全体のインデックスを作成しますが、Production 内のループは目次で終了し、ページ A、B、および C のレンダリングには進みません。
TableOfContents.php から foreach を削除すると、連続するすべてのページが適切にレンダリングされます。
ポインタと変数のスコープに問題があるような気がするのですが、どうすれば直せますか?