2

関数sortとを考えてみましょうarray_reverse

1 つは渡された変数を変更するのに、もう 1 つは新しいバージョンを返すのはなぜですか?

$a = array(3, 1, 2);

sort($a);
// $a === array(1, 2, 3)

array_reverse($a);
// $a === array(1, 2, 3)

sortは、引数の変更されたコピーを返すように簡単に記述できますarray_reverse

私が尋ねている理由は、「参照渡しおよび変更」アプローチと「値渡し、変更および戻り」アプローチを使用して関数を作成するかどうかを決定するためのガイドラインがあるかどうかを知りたいからです。

4

3 に答える 3

1

PHP の厄介な点の 1 つは、API の一貫性がまったくないことです。例えば:

  • パラメータの順序に一貫性がありません (針、干し草の山)。
  • アンダースコアの一貫性のない使用。一部の関数ではアンダースコアが使用されている部分もありますが、別の部分では使用されていません。

参照渡しとコピーは、大部分が同じボートに乗っていると思います。

于 2010-01-04T02:03:59.750 に答える
1

ここでおそらく最も重要なのはユーザーの意図だと思います。あなたが選択した特定の例では非常に明白というわけではありませんが、一般的に、API を設計するときにユーザーが期待すること (破壊的なインプレース変更と新しく構築された戻り値) について考えたいと思います。 .

于 2010-01-04T02:05:44.707 に答える
0

より安全な仮定であるため、値渡し、戻りコピーに固執することをお勧めします。参照渡し、変更された引数は、2 つの異なる操作が発生している場合にのみ意味があります。たとえばshift、配列が変更されたが最初の要素がreturn編集された場合です。

于 2010-01-04T03:10:20.567 に答える