我尝试在codeigniter中传递一个参数。
这对我有用:
function the_kwarg($gender){
$gender = $this->uri->segment(3);
}
然而,我不明白为什么这是错误的
function the_kwarg($gender=$this->uri->segment(3)){
//$gender = $this->uri->segment(3);
}
为什么这样做是错误的?。
答案 0 :(得分:3)
因为函数只能接受标量默认值,所以它无法在该上下文中评估$this
(或任何变量)。
来自the manual:
函数可以为标量参数定义C ++样式的默认值。
和
默认值必须是常量表达式,而不是(例如)变量,类成员或函数调用。
答案 1 :(得分:3)
函数参数默认值不能是动态表达式,例如
function foo ($x = 1 + 1) { }
是非法的,因为1 + 1
是一个表达式。我们都知道结果是常量2
,但PHP不聪明,只看到一个表达式。
答案 2 :(得分:1)
虽然人们已经给出了正确答案,但我可以举例说明如何解决问题:
function the_kwarg($gender = null){
$gender = (!is_null($gender)) ? $gender : $this->uri->segment(3);
}
答案 3 :(得分:0)
为什么不使用像
这样的功能function the_kwarg($gender){
echo $gender; // will echo male
}
// http://www.example.com/controller/the_kwarg/male
在CI中,函数名后的uri segments
基本上是函数的参数