PHP简写If/Else使用return时

Ili*_*sev 7 php shorthand

在PHP中编写shorthands的方法很简单.

不常见但最短的例子:

!isset( $search_order ) && $search_order = 'ASC';
Run Code Online (Sandbox Code Playgroud)

更常见但更长一点:

!isset( $search_order ) ? $search_order = 'ASC' : $search_order = NULL;
Run Code Online (Sandbox Code Playgroud)

我们甚至可以将上面的例子组合成一个惊人的速记:

!isset( $_POST['unique_id'] ) && preg_match( '/^[a-zA-Z0-9]{8}$/', $_POST['unique_id'] ) ? $post_unique_id = $_POST['unique_id'] : $post_unique_id = NULL;
Run Code Online (Sandbox Code Playgroud)


但是我们如何使用上面的例子和函数返回,例如:

function filter_gender_request($data) {  
    preg_match('/(fe)?male/i', $data, $data);
    isset($data[0]) && return $data[0]; // It doesn't work here with return
}
Run Code Online (Sandbox Code Playgroud)

同时,如果我说明以下内容,isset($data[0]) && return $data[0];那么一切都按预期工作:

if (isset($data[0]) ) {
    return $data[0];
}
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?如果第一个也是最短的例子在函数之外完美无缺,那么为什么它不能用于返回呢?

是否有可能使用返回的短线?

nic*_*ckb 31

使用当前语法,当$data[0]未设置时,您希望函数返回什么?当然,根据具体情况,您不希望您的功能返回任何内容.

我看到的唯一选择是三元运算符,在这里你返回的东西不是$data[0]没有设置的东西:

return isset($data[0]) ? $data[0] : null; 
Run Code Online (Sandbox Code Playgroud)


Vik*_*nko 13

对于未来的googlers.

使用php 7 null coalesce(??)运算符

return $data[0] ?? null; 
Run Code Online (Sandbox Code Playgroud)


Mar*_*c B 11

你惊人的快捷方式实际上是相当可怕的代码.您正在滥用三元运算符,并且该代码实际上远比您写出来时更难以阅读且更难维护.人们期望三元进行测试并返回一个/或值.在其中执行赋值不是正常行为.

  • 这里有一个关于这个答案的开放式Meta讨论:[审核审核似乎有误](http://meta.stackexchange.com/questions/196881/review-audit-seems-wrong) (6认同)
  • 这是你的一个重点.代码非常聪明,但保持它会很痛苦 (3认同)