PHP中推荐这种语法吗?

时间:2013-05-20 17:29:29

标签: php

我不知道这是允许的,直到最近在测试一些东西时我发现它是。我不知道这个功能的文档,所以我现在知道这是如何工作的。如果可以,我应该使用它吗?因为它确实减少了代码的重复。请考虑以下示例:

    //using this feature

    if( is_numeric( $number = array_pop( $array ) ) ) {
        //work directly with $number and popped array
    }

    //not using this feature

    if( is_numeric( end( $array ) ) ) {
        $number = array_pop( $array );
        //had to use an extra statement, plus more processing since what could have been done in just statement had to be done in two
    }

3 个答案:

答案 0 :(得分:2)

=赋值运算符。运算符需要两个(或可能更多)操作数返回一个值。

一个更为人熟知的显而易见的例子是加法运算符 +。它需要一个左操作数和一个右操作数并返回一个值。你不会三思而后行将它用作函数参数:

is_numeric(1 + 2)

赋值运算符的工作方式相同:

is_numeric($foo = 'bar')

赋值运算符的作用是将右操作数分配给左操作数,表达式作为一个整体然后返回右操作数。您可以在任何可以使用表达式的地方使用它,这几乎无处不在。

答案 1 :(得分:1)

是的,即使在is_numeric内或if条件内也可以在任何地方完成作业。 PHP首先执行赋值,结果(赋值的值)用作is_numeric的参数。

这是一种完全有效且受支持的语法,您将看到它的使用。但是,有些人(包括我自己)会争辩说,对于代码可读性,通常应避免使用这种语法。在浏览代码时很容易错过第一个示例中的赋值,因此当您一年后回来时,代码的含义可能更难解释。第二个例子,虽然它占用更多的行,但更容易阅读和理解。

我正试图找到明确说明文档的位置。尚未找到参考,但在user comment on Function Arguments中提及。

答案 2 :(得分:0)

array_pop更改数组的内部。而end只返回最后一个元素,这相当于一个“peek”命令。所以这取决于。如果您希望数组缩小,请使用array_pop,如果您希望保留原始数组,请使用end