在PHP中编写shorthands的方法很简单。
!isset( $search_order ) && $search_order = 'ASC';
!isset( $search_order ) ? $search_order = 'ASC' : $search_order = NULL;
!isset( $_POST['unique_id'] ) && preg_match( '/^[a-zA-Z0-9]{8}$/', $_POST['unique_id'] ) ? $post_unique_id = $_POST['unique_id'] : $post_unique_id = NULL;
但是我们如何使用上面的例子和函数返回,例如:
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
}
同时,如果我说明以下内容,而不是isset($data[0]) && return $data[0];
,那么一切都按预期工作:
if (isset($data[0]) ) {
return $data[0];
}
我在这里做错了什么?如果第一个也是最短的例子在函数之外完美无缺,那么为什么它不能用于返回呢?
是否有可能使用返回的短线?
答案 0 :(得分:29)
使用您当前的语法,如果未设置$data[0]
,您希望函数返回什么?当然,你不希望你的函数不返回任何东西,具体取决于条件。
我看到的唯一选择是ternary operator,如果未设置,则返回$data[0]
以外的其他内容:
return isset($data[0]) ? $data[0] : null;
答案 1 :(得分:11)
你惊人的捷径实际上是相当可怕的代码。您正在滥用三元运算符,并且该代码实际上远比您写出来时更难以阅读且更难维护。人们期望三元进行测试并返回一个/或值。在其中执行分配不是正常行为。
答案 2 :(得分:11)
对于未来的googlers。
使用php 7 null coalesce(??)operator
return $data[0] ?? null;
答案 3 :(得分:4)
您的代码存在的问题是您尝试将return
语句作为三元表达式的一部分执行。三元运算符通常会产生如下的赋值:
$message = is_error() ? get_error() : 'No Errors';
这导致根据$message
的返回值分配给is_error()
。您的代码正在尝试处理操作中的程序控制语句。 return
无法分配给变量。
出于这个原因,其他用户发布的内容更适合您的情况。
答案 4 :(得分:2)
oke我不知道你在做什么,但这应该有效:
return ( isset($data[0]) ? $data[0] : false);
答案 5 :(得分:1)
同意这里所回答的内容,一旦你离开它并且回来,或者更糟糕的是,未来的另一位开发者,这种速记更难以阅读。
想象一下,即使是一个小的500行脚本文件,当你使用它时还有40行简写elseif,你可以尝试添加或更改代码吗?
特别是当主题或内容不是您熟悉的内容时,调试或添加内容会变得令人头痛。
这更容易管理,无论它是什么,它只是代码:
if ($var == 'unicorns')
{
$this->remove_horn;
}
elseif ($var == 'horse')
{
$this->glue_on_horn;
}
else
{
$this->must_be_a_zebra;
}
只是说