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