2017-06-14 17 views
0

array_pusharray_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)が格納されているメモリ内の場所で行われます。我々はself::USER_BASIC_DETAIL_FIELDSとして引数1を渡している場合

することは、その後array_pushの同じ動作でそれは開発者

ために混乱を作成するクラスの定数USER_BASIC_DETAIL_FIELDSを変更しようと、私は右ですか?

+3

私は答えがYESだと思います – RiggsFolly

+2

A constant *は、その定義によって、変わらないものです。参照渡しすることはできません。変数はその値を変更するために参照渡しされます。定数として宣言して以来 'self :: USER_BASIC_DETAIL_FIELDS'を修正するのはなぜですか? – axiac

+0

@axiacはい、あなたは正しいです。当初、私は 'array_push'が変更された配列を返して1番目の引数に渡してからこのエラーを受け取ったと考えました – SohelAhmedM

答えて

0

答えはすべてがあなたのプロジェクトの詳細によって決まります。


定数の値を変更することはできません。 '$ r'変数は 'self :: USER_BASIC_DETAIL_FIELDS'へのポインタではなく、 'self :: USER_BASIC_DETAIL_FIELDS'のコピーです。 私はあなたがその場合は定数の代わりに静的変数を必要と考えると思います。

関連する問題