正在写一个restful api,在传递函数参数时遇到一个问题
假设函数定义是这样的
function getbookchapters($id, $page = “1”, $new_chapter = true) {
//some code here
}
调用函数这样写
$returnobject = getbookchapters(@$_post[‘id’], @$_post[‘page’], @$_post[‘new_chapter’]);
我的本意是,api接收post方法传递过来的3个参数,通过执行函数返回需要的数据,函数第2第3参数是可选的,但是调用函数的时候这2个参数还必须通过$_post获取,这就有个问题,如果post过来的参数没有他们2个可选参数就会报错,所以我用艾特符抑制错误
可是这样的话,函数体内这2个参数就被赋了初值,也就是没有起到默认值的效果
我的问题是,在正常接收3个参数的情况下,如果哪个参数没传递的话就启用默认值,不知道有没有这样的方法?如果实在不行那就只能在函数体内判断并赋默认值,不用可选参数了
回复讨论(解决方案)
$returnobject = call_user_func_array(‘getbookchapters’, $_post);
自己处理好 $_post 成员应有的次序
function getbookchapters($id, $page = “1”, $new_chapter = true) {
var_dump(func_get_args());
}
$_post = array(‘id’ => 100);
$returnobject = call_user_func_array(‘getbookchapters’, $_post);
$_post = array(‘id’ => 100, ‘page’ => 2);
$returnobject = call_user_func_array(‘getbookchapters’, $_post);
array(1) {
[0]=>
int(100)
}
array(2) {
[0]=>
int(100)
[1]=>
int(2)
}
function getbookchapters($id, $page = “1”, $new_chapter = true) {
var_dump(func_get_args());
}
$_post = array(‘id’ => 100);
$returnobject = call_user_func_array(‘getbookchapters’, $_post);
$_post = array(‘id’ => 100, ‘page’ => 2);
$returnobject = call_user_func_array(‘getbookchapters’, $_post);
array(1) {
[0]=>
int(100)
}
array(2) {
[0]=>
int(100)
[1]=>
int(2)
}
如果是这样的话,和下边也没什么本质区别了吧
function getbookchapters($id, $page, $new_chapter) {
if (!$page) {$page = “1”;}
if (!$new_chapter) {$new_chapter = true;}
}
以上是我的理解,勿喷
如果这样定义 function getbookchapters($id, $page, $new_chapter) {
那么 $id, $page, $new_chapter 都是不可缺省的
如果这样定义 function getbookchapters($id, $page = “1”, $new_chapter = true) {
$page, $new_chapter 是可缺省,而缺省时就去默认值
我 #2 是演示了不定数量参数的传递(php7 还支持 getbookchapters(… $_post) 这样调用)
你应自己去看你定义的形参的值
如果这样定义 function getbookchapters($id, $page, $new_chapter) {
那么 $id, $page, $new_chapter 都是不可缺省的
如果这样定义 function getbookchapters($id, $page = “1”, $new_chapter = true) {
$page, $new_chapter 是可缺省,而缺省时就去默认值
我 #2 是演示了不定数量参数的传递(php7 还支持 getbookchapters(… $_post) 这样调用)
你应自己去看你定义的形参的值
我那个空间还停留在5.3.x呢。。。。。。
其实我对外的接口你在调用的时候可以不写后两个,不过在接口实现部分还是默认尝试取了全部参数的,也就是说调用的时候不管你写几个参数,其实都是取3个参数的,但是调用时如果不写后两个参数,$_post取到的就是空,但也算赋值了,会覆盖函数定义的默认值,也就是我定义的默认值是无效的,不管默认值是什么,函数体内他们都是空,这样就是我的问题所在,所以
不管是否设置了默认值,都要像我上边那样去判断才行,这是我的解决方法。。。。。。。@_post是个变数。。。。。。。