为什么在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.
答
如果你不想指定一个特定的类,那么你为什么甚至使用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;
}
我认为类名应该引用。 – prodigitalson
@prodigitalson你是对的。回答编辑。 – cwallenpoole
如果他发送一个错误的第二个参数会发生什么? –