-3

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

    //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
    }
4

3 回答 3

2

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

一个更广为人知和明显的例子是加法运算符 +。它接受一个左操作数和一个右操作数并返回一个值。您不会三思而后行将其用作函数参数:

is_numeric(1 + 2)

赋值运算符的工作原理相同:

is_numeric($foo = 'bar')

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

于 2013-05-20T18:32:48.833 回答
1

是的,分配可以在任何地方完成,甚至在条件内部is_numeric或内部if。PHP 首先执行赋值,结果(被赋值的值)被用作is_numeric.

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

我试图找到在文档中明确说明这一点的位置。尚未找到参考,但在 Function Arguments 的用户评论中提到了它。

于 2013-05-20T18:00:19.827 回答
0

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

于 2013-05-20T17:32:45.027 回答