現在の位置: ホーム> 最新記事一覧> なぜphp current()が空の配列でnullを返すのですか?その背後にある理由の分析

なぜphp current()が空の配列でnullを返すのですか?その背後にある理由の分析

gitbox 2025-08-26

1。現在()の仕組み

current()は、配列の最初の要素を単に取得する関数ではなく、依存します。
各PHPアレイは、下部にポインターを維持し、「現在の要素」を指します。現在()の目的は、ポインターによって指し示された値を返すことです。

  • ポインターが有効な要素を指している場合、 current()はその要素の値を返します。

  • 配列が空である場合、またはポインターがアレイの範囲を超えている場合、コンテキストに応じて誤ったまたはnullが返されます。

空の配列の場合、ポインターがポイントする要素がまったくないため、戻り値は自然にnullです。


2。なぜではないがヌル

多くの人々がこの質問を持っています:配列には価値がないので、「故障」を示すために虚偽を返してみませんか?
その理由は、PHPデザイナーが「機能実行に失敗した」と「実際には配列に要素がない」を区別したいということです。

  • falseは通常、「エラー」または「失敗」を意味します。

  • NULLは、「ここには価値がない」をより適切に表現します。

したがって、空の配列でcurrent()を呼び出してnullを返すことは、より合理的な選択です。


3。reset ()およびnext()との関係

より良い理解のために、いくつかの配列ポインター関連関数を比較できます。

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-number">100</span></span><span>, </span><span><span class="hljs-number">200</span></span><span>];

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">current</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>); </span><span><span class="hljs-comment">// 100</span></span><span>
</span><span><span class="hljs-title function_ invoke__">next</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">current</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>); </span><span><span class="hljs-comment">// 200</span></span><span>
</span><span><span class="hljs-title function_ invoke__">next</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">current</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>)); </span><span><span class="hljs-comment">// bool(false),ポインターが境界を通過するため</span></span><span>
</span></span>

ここで、配列ポインターが境界がなくなると、 current()がfalseを返します。
空の配列には、ポインターが存在しないため、ヌルが直接返されます。これらの2つの状況は、実際にはセマンティクスで異なります。

  • 空の配列:尖った要素なし→ null

  • 空ではないが、境界がない:ポインターが失敗する→ false


4。それを使用することに注意してください

開発者がcurrent()を使用する場合、 nullfalseの違いに特に注意を払う必要があります。 if(current($ arr))を直接判断するために使用する場合、 nullfalseは両方ともブールのコンテキストで偽の値として扱われるため、あいまいになる可能性があります。

より安全なアプローチは、Key()を使用して判断を支援することです。

 <span><span><span class="hljs-variable">$arr</span></span><span> = [];

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">key</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>) !== </span><span><span class="hljs-literal">null</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">current</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"配列は空です、またはポインターが無効です"</span></span><span>;
}
</span></span>

これにより、さまざまなシナリオをより正確に区別できます。

  • 関連タグ:

    NULL