php传递默认参数出错?

数据库类文件:DB.class.php======================================<?php//数据库连接类classDB{//获取对象句... 数据库类文件:DB.class.php
======================================
<?php

//数据库连接类
class DB{

//获取对象句柄
static public function getDB(){
$_mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if (mysqli_connect_errno()){
echo '数据库连接错误!错误代码:'.mysqli_connect_error();
exit();
}
$_mysqli->set_charset('utf8');
return $_mysqli;
}

//清理
static public function unDB(&$_result, &$_db){
if (is_object($_result)){
$_result->free();
$_result = null;
}
if (is_object($_db)){
$_db->close();
$_db = null;
}
}
}
?>
=========================================

运行该文件:test.php
=========================================
<?php
require 'DB.class.php';
$_db = DB::getDB();
$_sql = "INSERT INTO `manage`(`id`, `user`, ) VALUES (null,'name',)";
$_db->query($_sql);
DB::unDB($_result=null, $_db);
?>
=========================================

输出结果:提示我变量应该通过引用传递
=========================================
Strict Standards: Only variables should be passed by reference in E:\www\test.php on line 6
=========================================

如果将test.php中的$_result=null改为$_result,就一切正常,为什么这里不能设置参数的默认值呢???是不是php的配置问题呢???
展开
 我来答
0o胡少侠o0
2014-04-12 · 超过15用户采纳过TA的回答
知道答主
回答量:30
采纳率:100%
帮助的人:37.8万
展开全部
这样是不符合php的规范,你定义的函数参数是引用传递(变量前加了&符号),但使用时却是值传递($_result=null),这里有个例子:http://www.hankcs.com/program/jie-jue-strict-standards-only-variables-should-be-passed-by-reference.html
设置函数参数默认值应该在定义函数的地方,而不是调用的地方,而且应该把预设置默认值的参数放在后面,如上面的函数方法应该改为:
static public function unDB(&$_db, &$_result=NULL){
...

}

这样在调用这个方法的时候是可以这样的:DB::unDB($_db);即$_result可以省略
追问
你这个方法确实不错哦,但是我百度了一下,发现有很多人还是用DB::unDB($_result=null, $_db);
难道他们这样用不会出错吗??这点我比较好奇啊!

还有一个问题,因为之前用DB::unDB($_result=null, $_db);一直出错,所以我就直接用了DB::unDB($_result, $_db); 没有报错,现在改的话文件很多比较麻烦,这样会不会有什么问题呢?
追答
你前面定义方法的地方“&$_result”加了‘&’,表示引用传值,后面在调用方法的地方却是“$_result=null”,这相当于是:DB::unDB(null, $_db),null不是引用,而是实的。所以这样写不对。如果一定要DB::unDB($_result=null, $_db)这么用;你可以试着把前面定义方法的地方“&$_result”改成“$_result”试试,或者在调用方法的地方把$result=null单独写在外面,如:
$_result=null;

DB::unDB($_result, $_db);

这么写也没事
匿名用户
2014-04-12
展开全部
这个容我想想 再想想
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-04-12
展开全部
因为你这里是调用函数,当然不能给默认值啦,在定义函数时我们可以给一个函数的参数写默认值,但是你这是在调用,哪能这样写的??
追问
我说错了,应该说是给$_result赋值,因为这里是插入数据,没有用到结果集,总感觉不给$_result赋值的话,代码不够规范,那你觉得这里应该怎么写比较好呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-04-12
展开全部
没看明白!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式