我正在尝试编写一个简单的数据库包装类。我写了一个像这样的方法:
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。
为什么会失败?
答案 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;
}