DB_DataObject.phpを見てみました。
function factory($table) {
//略
if (!$class) {
return DB_DataObject::raiseError(
"factory could not find class $class from $table",
DB_DATAOBJECT_ERROR_INVALIDCONFIG);
}
}
で、「DB_DataObject」のraiseErrorを呼び出していました。
function raiseError($message, $type = null, $behaviour = null)
{
global $_DB_DATAOBJECT;
if ($behaviour == PEAR_ERROR_DIE && @$_DB_DATAOBJECT['CONFIG']['dont_die']) {
$behaviour = null;
}
if (PEAR::isError($message)) {
$error = $message;
} else {
$error = PEAR::raiseError($message, $type, $behaviour);
}
// this will never work totally with PHP's object model.
// as this is passed on static calls (like staticGet in our case)
if (@is_object($this) && is_subclass_of($this,'db_dataobject')) {
$this->_lastError = $error;
}
$_DB_DATAOBJECT[
'LASTERROR'] = $error;
// no checks for production here?.......
DB_DataObject::debug($message,"ERROR",1);
return $error;
}
エラーの場合は、lastErrorにセットすると同時にたしかに PEAR::raiseError でreturnはちゃんとPEAR::Errorになってますね。
factoryはreturnで拾えるということですね。
しかし、他のメソッドは
...なんでもいいんですが、エラー時にはDB_DataObject::raiseErrorしてもそれはreturnしていないです。
return値はTrue/False。
内容を見るにはやはり _lastErrorを取得する必要がありますね。。
#なんでfactoryと同じようにPEAR::Errorを返してくれないんだろう。
#そして_lastErrorを取得するメソッドがないのは。。。?? _lastError使っていいんですね??
*** version : 1.5.3 ***
(2004/9/8 13:43追記)
別のfunctionのエラー処理例
function find($n = false)
{
global $_DB_DATAOBJECT;
if (!isset($this->_query)) {
DB_DataObject::raiseError(
"You cannot do two queries on the same object (copy it before finding)",
DB_DATAOBJECT_ERROR_INVALIDARGS);
return false;
}
//略
}
====================
DB_DataObjectに関するエラー処理は以下のように書ける
$item = DB_DataObject::factory("v_item");
if (PEAR::isError($item)) {
//何かエラー処理
$reason = $item->getMessage();
//とか、、
return $item;
}
$ret = $item->get(12);
if (!$ret) {
//何かエラー処理
$reason = $item->_lastError->getMessage();
//とか、、
return item->_lastError;
}
====================
スクリプト、書き変えなくては(@_@)
(前ブログでのコメント 2004/09/08 11:31 AM bGさん)
おお、ホントですね。true / false で返してる・・・。
_lastErrorが何か気持ち悪いのでソースを見てみました。
3465行目
// this will never work totally with PHP's object model.
// as this is passed on static calls (like staticGet in our case)
PHPのオブジェクトモデルだと無理なのでstatic callしろ?
3429行目
* Last Error that has occured
* - use $this->_lastError or
* $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
_lastError で取るか PEAR::getStaticProperty で取るらしいです。(結局_lastErrorも有りと・・・。)
(前ブログでの筆者の返信)
_lastErrorでいいんですね。これから自信を持って使います(^^)
*** 記事に追記しました。***
コメントする