1

PHPについて私(そして他のすべての人)をいつも悩ませていることの1つは、関数の命名とパラメーターの不一致です。もう1つの最近の煩わしさは、値ではなく参照によって関数パラメーターを要求する傾向です。

PHPのマニュアルをざっと見てみるsort()と、例として関数が見つかりました。その関数を実装している場合は、値ごとに配列を取得し、それを新しい配列に並べ替えて、新しい値を返します。PHPではsort()、ブール値を返し、既存の配列を変更します。

呼び方sort()

$array = array('c','a','b');
$sorted_array = sort($array);

PHPが私に電話をかけてほしい方法sort()

$array = array('c','a','b');
sort($array);
$sorted_array = $array;

さらに、以下は致命的なエラーをスローします。Fatal error: Only variables can be passed by reference

sort(array('c','a','b');

これの一部はPHPの昔の遺産かもしれないと思いますが、このように行われたのには理由があったに違いありません。PHP 5+のように参照IDでオブジェクトを渡すことで値を確認できますが(文字列、配列、整数などの場合はわかりません)、参照渡しと値渡しの中間にあると思います。

私はコンピュータサイエンスの専門家ではないので、おそらくあなたが収集できるように、私はこれらの概念のいくつかをまだ把握しようとしています、そして私は物事がこのように設定されている理由があるかどうかについて興味がありますか?それがただの残り物であるかどうか。

4

2 に答える 2

2

主な理由は、PHPがCプログラマーによって開発されたためであり、これは非常にCプログラミングパラダイムです。Cでは、変更するデータ構造へのポインターを渡すのが理にかなっています。PHPでは、それほど多くはありません(特に、参照はポインターと同じではないため)。

于 2012-06-12T20:46:12.407 に答える
2

これはスピードの理由で行われていると思います。
ほとんどの場合、作業中の配列をコピーではなくソートする必要があります。

sortが配列の新しいコピーを返す必要がある場合は、sort()を呼び出すたびに; PHPエンジンは配列を新しい配列にコピーする必要があり(速度が低下し、スペースコストが増加します)、この動作を制御する方法はありません。

元の配列を並べ替えないようにする必要がある場合(これはそれほど頻繁には発生しません)、次のようにします。

$copy = $yourArray;
sort($yourArray);
于 2012-06-12T20:49:07.077 に答える