我有一个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
,这将为开发人员造成混乱
我是对的吗?
答案 0 :(得分:0)
答案是:一切都取决于项目的细节。
您无法修改常量的值。 并且' $ r'变量不是指向&self; USER_BASIC_DETAIL_FIELDS'的指针。它是&self; USER_BASIC_DETAIL_FIELDS'的副本。 我想在这种情况下你需要一个静态变量而不是常量。