2017-06-14 86 views
0

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

+3

我认为答案是YES – RiggsFolly

+2

A *常数*就其定义而言是不变的。它不能通过引用传递;变量通过引用传递以改变它们的值。你为什么要修改'self :: USER_BASIC_DETAIL_FIELDS',因为你声明它是一个常量? – axiac

+0

@axiac是的,你是对的。最初我以为'array_push'会返回修改后的数组,所以在第一个参数传递它,然后得到这个错误 – SohelAhmedM

回答

0

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


您不能修改常量的值。 而'$ r'变量不是指向'self :: USER_BASIC_DETAIL_FIELDS'的指针,而是'self :: USER_BASIC_DETAIL_FIELDS'的副本。 我觉得比你需要一个静态变量,而不是常量在这种情况下。

相关问题