为什么我不能在函数参数默认值中使用$ this

时间:2013-07-08 17:19:04

标签: php codeigniter function

我尝试在codeigniter中传递一个参数。

这对我有用:

function the_kwarg($gender){
    $gender = $this->uri->segment(3);
}

然而,我不明白为什么这是错误的

function the_kwarg($gender=$this->uri->segment(3)){
    //$gender = $this->uri->segment(3);
}

为什么这样做是错误的?。

4 个答案:

答案 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基本上是函数的参数