Techracho

Zend_Loaderがparent.phpを読もうとする

このエントリーをはてなブックマーク Share
2009.07.29    PHP, Zend Framework, 馬場      baba   

Zend Frameworkを使い始めました。

いちいちファイルをrequire_onceするのは面倒なので、Autoloaderを使います。

$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->setFallbackAutoloader(true);

また、Zend_Db_Tableのfindがrowsetを返すのが気にくわないため、findOne()を実装することにします。

class App_Db_Table extends Zend_Db_Table_Abstract
{
	public function findOne()
	{
		$args = func_get_args();
		$result = call_user_func_array(array($this, 'parent::find'), $args);
		return $result->current();
	}
}

parentのfindを呼ぶとき、
call_user_func_array(array(’parent’, ‘find’), $args);
とすると、E_STRICTなPHP5では、staticでない関数をstaticに呼び出したと言われてエラーになります。
なので、このように
call_user_func_array(array($this, ‘parent::find’), $args);
と呼び出すわけですが、

Zend_Loaderがあまり賢くないので、parent:: を見てparent.phpを探しに行ってしまいます

Warning: include(parent.php) [function.include]: failed to open stream: No such file or directory in …

Zendのフォーラムでも同じ症状の人がいましたが、これという解決案は見つからないみたいなので、
Zend/Loader.php:83行目
include $file

@include $file
に変えてめでたしめでたし。

なんだかなぁ。

COPYRIGHT [C] 2009 BEYOND PERSPECTIVE SOLUTIONS LTD. ALL RIGHTS RESERVED.