ZendFW + Smarty3の autoloader 併用

ZendFWとSmartyのautoloader が干渉して画面がエラーだらけになるのだが、
検索して、ようやく回避方々を発見。


Warning: include_once(Smarty\Internal\Data.php)
Warning: include_once(Smarty\Internal\Template.php)

http://karenziv.com/2010/09/zend-framework-and-smarty-3/

問題は、
http://okwave.jp/qa/q6495553.html
と同じ物だけれど、回避方法がちょっと違います。



そんなわけで、Autoloaderの初期化はこうなった。

<?php
// index.php ( 起動スクリプト )
$application->getAutoloader()
		->setFallbackAutoloader(true)
		->pushAutoloader(null,"Smarty_")
		->unregisterNamespace(array('Zend','ZendX'));

pushAutoloader() の callback 関数にnull を入れた際の挙動は

クラス名のプレフィックス "Smarty_" の際に callback 関数のチェックで null が is_callableに渡されて、無視される。


という事なので、Zend_Autoloader の設定を Smarty クラスの呼び出しより先にする必要がある。

他の autoload を使うライブラリがそれ以上増える場合は、Smartyのautoloaderを一度キャンセルし、Zend_Autoloader に明示的に登録

<?php
define("SMARTY_SPL_AUTOLOAD",false);

require_once "Smarty.class.php";
//(略)
	->pushAutoloader("smartyAutoload","Smarty_");


とか。たぶん。