次のような 2 つの戻り値を持つ関数を持つことは可能ですか:
その場合、それぞれの返品を個別に取得するにはどうすればよいですか?
技術的には、複数の値を返すことはできません。ただし、この制限を回避する方法はあります。複数の値を返す最も似た方法は、list キーワードを使用することです:
list
技術的には、実際の配列を保存するのではなく、配列を返し、list を使用してその配列の要素を別の値で保存します。この手法を使用すると、感じます最も複数の値を返すようになります。
list この解決策は php 固有のものです。一部の言語には同様の構造がありますが、そうでない言語はさらに多くあります。複数の値を「返す」ために一般的に使用される別のメソッドがあり、これはほぼすべての言語で (何らかの形で) 利用できます。ただし、このアプローチはまったく異なるように見えるため、慣れるまでに時間がかかるかもしれません。
このテクノロジは、PHP 自体によって定義された一部の関数でも使用されます (たとえば、str_replace、preg_match の $matches)。これは、複数の値を返すこととは大きく異なるように感じるかもしれませんが、少なくとも知っておく価値はあります。
)。これは、複数の値を返すこととは大きく異なるように感じるかもしれませんが、少なくとも知っておく価値はあります。
リーリー
compact 関数があり、これを使用すると、上記と同じことを、より少ないコードで実行できます。 (まあ、サンプルのコードは減りませんが、実際のアプリケーションではおそらくコードが減ります。) ただし、入力の節約は最小限で、コードが読みにくくなると思うので、自分ではやりません。ただし、ここに例があります: リーリー
関数があり、これを使用すると、上記と同じことを、より少ないコードで実行できます。 (まあ、サンプルのコードは減りませんが、実際のアプリケーションではおそらくコードが減ります。) ただし、入力の節約は最小限で、コードが読みにくくなると思うので、自分ではやりません。ただし、ここに例があります:
compact には、ここでの呼び出しコードで使用できる extract に相当するものがありますが、これを使用するのは悪い考えであることに注意してください (特に次のようなものに対して)このように簡単です)、サンプルさえ与えません。問題は、変数が「魔法のように」作成されるため、コードの他の部分を見ないとどの変数が作成されるのかを確認できないことです。
には、ここでの呼び出しコードで使用できる
に相当するものがありますが、これを使用するのは悪い考えであることに注意してください (特に次のようなものに対して)このように簡単です)、サンプルさえ与えません。問題は、変数が「魔法のように」作成されるため、コードの他の部分を見ないとどの変数が作成されるのかを確認できないことです。
最後に、list は連想配列ではうまく機能しないことに言及したいと思います。以下はあなたの期待に応えます:
ただし、次の場合は動作が異なります:
連想配列で list を使用し、将来他の誰かが呼び出された関数のコードを変更する必要がある場合 (これはどのような場合でも起こり得る)、突然壊れる可能性があるため、お勧めします。 list 配列を連想配列とともに使用しないでください。
2 つの変数を返すことはできません。ただし、 配列を伝播して返したり、動的変数を返す条件を作成したりすることはできます。 たとえば、この関数は
を返します。 リーリー アプリ内:
を返します。 リーリー
両方が必要な場合は、関数を少し変更できます
技術的には、複数の値を返すことはできません。ただし、この制限を回避する方法はあります。複数の値を返す最も似た方法は、
リーリーlist
キーワードを使用することです:技術的には、実際の配列を保存するのではなく、配列を返し、
list
を使用してその配列の要素を別の値で保存します。この手法を使用すると、感じます最も複数の値を返すようになります。
リーリーlist
この解決策は php 固有のものです。一部の言語には同様の構造がありますが、そうでない言語はさらに多くあります。複数の値を「返す」ために一般的に使用される別のメソッドがあり、これはほぼすべての言語で (何らかの形で) 利用できます。ただし、このアプローチはまったく異なるように見えるため、慣れるまでに時間がかかるかもしれません。このテクノロジは、PHP 自体によって定義された一部の関数でも使用されます (たとえば、str_replace、preg_match の $matches
3 番目の方法は、オブジェクトを使用して必要なさまざまな値を保持することです。これにはより多くの入力が必要となるため、上記の 2 つの方法よりも使用頻度は低くなります。それでも、同じ変数セットが複数の場所で使用されている場合 (もちろん、上記のメソッドをサポートしていない言語、または追加の入力なしで実行できる言語の場合) には、この機能を使用するのが合理的かもしれません。)。これは、複数の値を返すこととは大きく異なるように感じるかもしれませんが、少なくとも知っておく価値はあります。
リーリー
上記のメソッドは、関数が複数の値を返す主な方法をまとめたものです。ただし、これらの方法にはいくつかのバリエーションがあります。 PHP では配列を使用して多くのことができるため、最も興味深いバリアントは実際に配列を返すバリアントです。リーリー
上記のコードの最も興味深い部分は、関数内のコードが最初に提供した例と同じであり、関数を呼び出すコードのみが変更されていることです。これは、関数の呼び出し元が関数によって返された結果をどのように扱うかは、関数を呼び出した人次第であることを意味します。リーリー
Php にはcompact
関数があり、これを使用すると、上記と同じことを、より少ないコードで実行できます。 (まあ、サンプルのコードは減りませんが、実際のアプリケーションではおそらくコードが減ります。) ただし、入力の節約は最小限で、コードが読みにくくなると思うので、自分ではやりません。ただし、ここに例があります:
リーリーcompact
には、ここでの呼び出しコードで使用できる
extractに相当するものがありますが、これを使用するのは悪い考えであることに注意してください (特に次のようなものに対して)このように簡単です)、サンプルさえ与えません。問題は、変数が「魔法のように」作成されるため、コードの他の部分を見ないとどの変数が作成されるのかを確認できないことです。
最後に、
リーリーlist
は連想配列ではうまく機能しないことに言及したいと思います。以下はあなたの期待に応えます:ただし、次の場合は動作が異なります:
リーリー連想配列で
list
を使用し、将来他の誰かが呼び出された関数のコードを変更する必要がある場合 (これはどのような場合でも起こり得る)、突然壊れる可能性があるため、お勧めします。list
配列を連想配列とともに使用しないでください。2 つの変数を返すことはできません。ただし、 配列を伝播して返したり、動的変数を返す条件を作成したりすることはできます。 たとえば、この関数は
$var2
リーリーを返します。 リーリー
アプリ内:両方が必要な場合は、関数を少し変更できます
リーリー