次のような 2 つの戻り値を持つ関數(shù)を持つことは可能ですか:
リーリーその場(chǎng)合、それぞれの返品を個(gè)別に取得するにはどうすればよいですか?
技術(shù)的には、複數(shù)の値を返すことはできません。ただし、この制限を回避する方法はあります。複數(shù)の値を返す最も似た方法は、list
キーワードを使用することです:
技術(shù)的には、実際の配列を保存するのではなく、配列を返し、list
を使用してその配列の要素を別の値で保存します。この手法を使用すると、感じます最も複數(shù)の値を返すようになります。
list
この解決策は php 固有のものです。一部の言語(yǔ)には同様の構(gòu)造がありますが、そうでない言語(yǔ)はさらに多くあります。複數(shù)の値を「返す」ために一般的に使用される別のメソッドがあり、これはほぼすべての言語(yǔ)で (何らかの形で) 利用できます。ただし、このアプローチはまったく異なるように見(jiàn)えるため、慣れるまでに時(shí)間がかかるかもしれません。
このテクノロジは、PHP 自體によって定義された一部の関數(shù)でも使用されます (たとえば、str_replace、preg_match の $matches)。これは、複數(shù)の値を返すこととは大きく異なるように感じるかもしれませんが、少なくとも知っておく価値はあります。
リーリー
上記のメソッドは、関數(shù)が複數(shù)の値を返す主な方法をまとめたものです。ただし、これらの方法にはいくつかのバリエーションがあります。 PHP では配列を使用して多くのことができるため、最も興味深いバリアントは実際に配列を返すバリアントです。まず、配列を配列以外のものとして扱わずに、単純に配列を返すことができます。
リーリー
上記のコードの最も興味深い部分は、関數(shù)內(nèi)のコードが最初に提供した例と同じであり、関數(shù)を呼び出すコードのみが変更されていることです。これは、関數(shù)の呼び出し元が関數(shù)によって返された結(jié)果をどのように扱うかは、関數(shù)を呼び出した人次第であることを意味します。または、連想配列を使用することもできます。
リーリー
Php にはcompact 関數(shù)があり、これを使用すると、上記と同じことを、より少ないコードで実行できます。 (まあ、サンプルのコードは減りませんが、実際のアプリケーションではおそらくコードが減ります。) ただし、入力の節(jié)約は最小限で、コードが読みにくくなると思うので、自分ではやりません。ただし、ここに例があります:
リーリー
compact には、ここでの呼び出しコードで使用できる
extract に相當(dāng)するものがありますが、これを使用するのは悪い考えであることに注意してください (特に次のようなものに対して)このように簡(jiǎn)単です)、サンプルさえ與えません。問(wèn)題は、変數(shù)が「魔法のように」作成されるため、コードの他の部分を見(jiàn)ないとどの変數(shù)が作成されるのかを確認(rèn)できないことです。
最後に、list
は連想配列ではうまく機(jī)能しないことに言及したいと思います。以下はあなたの期待に応えます:
ただし、次の場(chǎng)合は動(dòng)作が異なります:
リーリー 連想配列で list
を使用し、將來(lái)他の誰(shuí)かが呼び出された関數(shù)のコードを変更する必要がある場(chǎng)合 (これはどのような場(chǎng)合でも起こり得る)、突然壊れる可能性があるため、お?jiǎng)幛幛筏蓼埂?list
配列を連想配列とともに使用しないでください。
2 つの変數(shù)を返すことはできません。ただし、 配列を伝播して返したり、動(dòng)的変數(shù)を返す條件を作成したりすることはできます。 たとえば、この関數(shù)は
$var2 を返します。
リーリー
アプリ內(nèi):
両方が必要な場(chǎng)合は、関數(shù)を少し変更できます
リーリー