モンスターカレンダー

« 2004年9月 »
123456789101112131415161718192021222324252627282930

PEAR DB_DataObjectのエラーの拾い方(続き)

| コメント(0)

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でいいんですね。これから自信を持って使います(^^)

*** 記事に追記しました。***

コメントする