如何将此语法转换为普通的php if else

时间:2011-08-24 05:47:07

标签: php codeigniter

我正在使用codeigniter表单验证。要显示表单错误,请使用此

 $this->data['message'] = (validation_errors() ?
     validation_errors() : 
     ($this->auth_lib->errors() ? 
         $this->auth_lib->errors() : 
         $this->session->flashdata('message')))

我不明白这种语法。我认为这是一个if else声明。这很难理解。

任何人都可以将此转换为正常的if else语句吗?

因为现在我要更改错误消息格式:

$this->message->set_error($msg=array('Test 1','Test 2'));
$message=$this->message->get_message();
$this->data['message']=$message;  

任何人,请简化语法。感谢。

3 个答案:

答案 0 :(得分:6)

一个? b:c == if(a){b} else {c}

if (validation_errors())
{
    $this->data['message'] = validation_errors();
}
else if ($this->auth_lib->errors())
{
    $this->data['message'] = $this->auth_lib->errors();
}
else
{
    $this->data['message'] = $this->session->flashdata('message');
}

答案 1 :(得分:4)

$this->data['message'] = (validation_errors() ? validation_errors() : ($this->auth_lib->errors() ? $this->auth_lib->errors() : $this->session->flashdata('message')))

是一个多重三元运算,相当于:

if ( validation_errors() )
   $this->data['message'] = validation_errors();
elseif ( $this->auth_lib->errors() )
   $this->data['message'] = $this->auth_lib->errors();
else
   $this->data['message'] = $this->session->flashdata('message');

答案 2 :(得分:2)

您发布的代码正在使用ternary operators。它们可以非常方便,但如果嵌套其中几个,有时也会令人困惑。这是没有三元运算符的等价文字......

    if(validation_errors())
    {
        $this->data['message'] = validation_errors();
    }
    else
    {
        if($this->auth_lib->errors())
        {
            $this->data['message'] = $this->auth_lib->errors();
        }
        else 
        {
            $this->data['message'] = $this->session->flashdata('message');
        }
    }