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

问题描述:

我想写一个简单的数据库包装类。我已经写了像这样的方法:为什么在class_name为null时mysql_fetch_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; 
} 

如果调用此方法调用mysql_fetch_object失败,出现以下错误,当我不指定$ CLASS_NAME:

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

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

这是为什么会失败?

默认不是空。默认值是stdClass(从文档):

The name of the class to instantiate, set the properties of and return. If not specified, a stdClass object is returned.

如果你想保持相同的默认,你需要有这个作为你的方法签名:

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

我认为类名应该引用。 – prodigitalson

+0

@prodigitalson你是对的。回答编辑。 – cwallenpoole

+0

如果他发送一个错误的第二个参数会发生什么? –

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

如果你绝对必须使用它,这应该工作

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

,因为他想“中继”形成他的自定义功能,所以他需要有一个默认... – prodigitalson

也许是因为它是期待一个字符串,你给它空。我会做一个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; 
}