PHP の 'foreach' は実際にどのように機能しますか?
PHP の Foreach は、配列、通常のオブジェクト、および 3 種類の値の反復をサポートします。走査可能なオブジェクト。
配列とオブジェクト反復:
配列とオブジェクトの場合、反復メカニズムはより複雑です。 PHP 配列は実際には、挿入順序に従って走査される順序付けられた辞書です。プレーン オブジェクトの反復は、オブジェクトのプロパティも辞書として保存されるため、配列の反復に似ています。
反復中、内部配列ポインターは直接使用されません。代わりに、HashPointer が現在の要素を追跡するために使用されます。ループ本体の実行後、要素がまだ存在する場合に限り、HashPointer が復元されます。それ以外の場合は、現在の配列ポインターが使用されます。
配列が参照ではなく、参照カウントが 1 より大きい場合、反復前に複製されます。この複製は、IAP の変更が元の配列に漏洩するのを防ぐために行われます。
反復中の変更:
PHP では反復中の変更が許可されているため、混乱を招く動作が発生する可能性があります。 。反復中に要素が削除された場合、HashPointer のバックアップ/復元メカニズムが成功した場合にのみ、HashPointer は次の要素に進みます。失敗した場合は、現在の配列ポインター (配列の最後にある) が代わりに使用されます。
ネストされたループも foreach の動作に影響を与える可能性があります。外側のループの現在の要素が削除された場合、HashPointer の復元に失敗するため、外側のループは最初の反復後に停止します。
PHP 7 の変更点:
PHP 7 では、foreach イテレーションにいくつかの変更が導入されました。
以上がPHP の「foreach」ループは実際に内部でどのように動作するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。