为什么当class_name为null时mysql_fetch_object失败,即使这是默认值?

时间:2011-07-26 03:28:10

标签: php mysql object

我正在尝试编写一个简单的数据库包装类。我写了一个像这样的方法:

public function get_objects($sql, $class_name = null) {
    $result = mysql_query( $sql, $this->connection );
    $objs = array();
    if( $result ) {
        while ($obj = mysql_fetch_object($result, $class_name)) {
            $objs[] = $obj;
        }
        mysql_free_result($result);
    }
    return $objs;
}

如果在调用此方法时未指定$ class_name,则调用mysql_fetch_object会失败,并显示以下错误:

PHP Fatal error:  Class '' not found in ...

问题是我不希望它使用class_name。我只是希望它执行默认行为,就好像我没有指定class_name。

为什么会失败?

3 个答案:

答案 0 :(得分:3)

默认不是 null。默认值为stdClass(来自文档):

  

要实例化的类的名称,设置属性并返回。如果未指定,则返回 stdClass 对象。

如果您想保持相同的默认值,则需要将此作为方法签名:

 public function get_objects($sql, $class_name = "stdClass") {
     // continue as normal.

答案 1 :(得分:2)

如果您不想指定特定的类,那么为什么甚至使用class_name参数?

如果你绝对必须使用它,这应该可行

if ( $result ) {
   $class_name = $class_name ? $class_name : 'stdClass';
   ...

答案 2 :(得分:0)

也许是因为它期待一个字符串,你给它null。我会做一个if检查$ class_name!= null。

public function get_objects($sql, $class_name = null) {
    $result = mysql_query( $sql, $this->connection );
    $objs = array();
    if( $result ) {
        if ($class_name){
            while ($obj = mysql_fetch_object($result, $class_name)) {
                $objs[] = $obj;
            }
        }else{
            while ($obj = mysql_fetch_object($result)) {
                $objs[] = $obj;
            }
        }
        mysql_free_result($result);
    }
    return $objs;
}