ホームページ  >  に質問  >  本文

関数は複数回戻ります

次のような 2 つの戻り値を持つ関数を持つことは可能ですか:

リーリー

その場合、それぞれの返品を個別に取得するにはどうすればよいですか?

P粉022285768P粉022285768228日前473

全員に返信(2)返信します

  • P粉548512637

    P粉5485126372024-03-26 11:41:34

    技術的には、複数の値を返すことはできません。ただし、この制限を回避する方法はあります。複数の値を返す最も似た方法は、list キーワードを使用することです:

    リーリー

    技術的には、実際の配列を保存するのではなく、配列を返し、list を使用してその配列の要素を別の値で保存します。この手法を使用すると、感じます最も複数の値を返すようになります。

    list この解決策は php 固有のものです。一部の言語には同様の構造がありますが、そうでない言語はさらに多くあります。複数の値を「返す」ために一般的に使用される別のメソッドがあり、これはほぼすべての言語で (何らかの形で) 利用できます。ただし、このアプローチはまったく異なるように見えるため、慣れるまでに時間がかかるかもしれません。

    リーリー

    このテクノロジは、PHP 自体によって定義された一部の関数でも使用されます (たとえば、str_replace、preg_match$matches)。これは、複数の値を返すこととは大きく異なるように感じるかもしれませんが、少なくとも知っておく価値はあります。

    3 番目の方法は、オブジェクトを使用して必要なさまざまな値を保持することです。これにはより多くの入力が必要となるため、上記の 2 つの方法よりも使用頻度は低くなります。それでも、同じ変数セットが複数の場所で使用されている場合 (もちろん、上記のメソッドをサポートしていない言語、または追加の入力なしで実行できる言語の場合) には、この機能を使用するのが合理的かもしれません。

    リーリー

    上記のメソッドは、関数が複数の値を返す主な方法をまとめたものです。ただし、これらの方法にはいくつかのバリエーションがあります。 PHP では配列を使用して多くのことができるため、最も興味深いバリアントは実際に配列を返すバリアントです。

    まず、配列を配列以外のものとして扱わずに、単純に配列を返すことができます。

    リーリー

    上記のコードの最も興味深い部分は、関数内のコードが最初に提供した例と同じであり、関数を呼び出すコードのみが変更されていることです。これは、関数の呼び出し元が関数によって返された結果をどのように扱うかは、関数を呼び出した人次第であることを意味します。

    または、連想配列を使用することもできます。

    リーリー

    Php には

    compact 関数があり、これを使用すると、上記と同じことを、より少ないコードで実行できます。 (まあ、サンプルのコードは減りませんが、実際のアプリケーションではおそらくコードが減ります。) ただし、入力の節約は最小限で、コードが読みにくくなると思うので、自分ではやりません。ただし、ここに例があります: リーリー

    compact には、ここでの呼び出しコードで使用できる extract に相当するものがありますが、これを使用するのは悪い考えであることに注意してください (特に次のようなものに対して)このように簡単です)、サンプルさえ与えません。問題は、変数が「魔法のように」作成されるため、コードの他の部分を見ないとどの変数が作成されるのかを確認できないことです。

    最後に、list は連想配列ではうまく機能しないことに言及したいと思います。以下はあなたの期待に応えます:

    リーリー

    ただし、次の場合は動作が異なります:

    リーリー

    連想配列で list を使用し、将来他の誰かが呼び出された関数のコードを変更する必要がある場合 (これはどのような場合でも起こり得る)、突然壊れる可能性があるため、お勧めします。 list 配列を連想配列とともに使用しないでください。

    返事
    0
  • P粉717595985

    P粉7175959852024-03-26 09:06:04

    2 つの変数を返すことはできません。ただし、 配列を伝播して返したり、動的変数を返す条件を作成したりすることはできます。 たとえば、この関数は

    $var2

    を返します。 リーリー アプリ内:

    リーリー

    両方が必要な場合は、関数を少し変更できます

    リーリー

    返事
    0
  • キャンセル返事