有几种很好的方法可以在PHP中写速记。 较不常见但最短的例子: ! 更常见,但更长一些: !isset($ search _...

问题描述 投票:0回答:6
!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];
}
,那么一切都按预期运行:

$data[0]

我在这里做错了什么?如果第一个和最短的示例在功能之外无瑕,那么为什么它不适用于返回呢?
有可能使用带有回报的速记?

在您的当前语法中,您希望在未设置
php shorthand
6个回答
36
投票
时您的功能会返回什么?当然,您不会指望您的功能会根据条件返回任何内容。

我看到的唯一替代方案是the the the oterator

,当未设置时,您会返回其他东西:
return isset($data[0]) ? $data[0] : null;

未来的Googles.

使用php 7 null cocce(??)操作员

return $data[0] ?? null;
    

28
投票

代码的问题是,您正在尝试执行

return

语句作为三元表达式的一部分。三元操作员通常会导致分配:
$message = is_error() ? get_error() : 'No Errors';

12
投票
根据

$message

的返回值,这将导致分配给

4
投票
。您的代码正在尝试在操作中处理程序控制语句。

return

不能分配给变量。

出于这个原因,其他用户发布的内容是您情况的更好选择。

我不知道你在做什么,但这应该有效:

return ( isset($data[0]) ? $data[0] : false);

    
在这里回答的内容,一旦您离开它,回来了,或者更糟的是将来的另一个开发人员,那么速记就很难阅读。 
想象一下,即使是一个小的500行脚本文件,您使用40行的速记Elseif,您可以尝试添加或更改代码吗?

特别是当主题或内容不是您熟悉的事物时,它会令人头疼或增加加法。

这更易于管理,并且无关紧要,它只是代码:


2
投票

只是说


我喜欢这样的perl,可让您扭转IF语句的顺序,这使得可读的单线。  像OP一样,我希望找到可以让我做的东西

1
投票
function deleteUser($user) { return if (!$this->isAuthorized()); $this->entityManager... }

tanth

function deleteUser($user) { if (!$this->isAuthorized()) { return; } ... }

我认为,如果“返回”是第一个单词,则更容易看到方法的退出点。 只是一个偏好。 无论如何,PHP不支持它。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.