array_push中的第一个参数只接受变量

时间:2017-06-14 12:11:11

标签: php arrays pass-by-reference

array_push

我有一个PHP语句如下(在类的方法中)

array_push(self::USER_BASIC_DETAIL_FIELDS, 'cname_username');

给了我错误

 Cannot pass parameter 1 by reference

然后我尝试将它分配给变量并且一切正常

$r = self::USER_BASIC_DETAIL_FIELDS;
array_push($r, 'cname_username');

我的问题是为什么PHP会在上面的情况下抛出错误? 我有一个答案,但我不确定在这里问。答案如下:

array_push不会返回修改后的数组,但会更改参数1中给出的变量。因此,在内存中存储变量(参数1)的位置进行更改。

如果我们将参数1作为self::USER_BASIC_DETAIL_FIELDS传递然后使用array_push的相同行为,它将尝试修改类的常量USER_BASIC_DETAIL_FIELDS,这将为开发人员造成混乱

我是对的吗?

1 个答案:

答案 0 :(得分:0)

答案是:一切都取决于项目的细节。

您无法修改常量的值。 并且' $ r'变量不是指向&self; USER_BASIC_DETAIL_FIELDS'的指针。它是&self; USER_BASIC_DETAIL_FIELDS'的副本。 我想在这种情况下你需要一个静态变量而不是常量。