current()は、配列の最初の要素を単に取得する関数ではなく、依存します。
各PHPアレイは、下部にポインターを維持し、「現在の要素」を指します。現在()の目的は、ポインターによって指し示された値を返すことです。
ポインターが有効な要素を指している場合、 current()はその要素の値を返します。
配列が空である場合、またはポインターがアレイの範囲を超えている場合、コンテキストに応じて誤ったまたはnullが返されます。
空の配列の場合、ポインターがポイントする要素がまったくないため、戻り値は自然にnullです。
多くの人々がこの質問を持っています:配列には価値がないので、「故障」を示すために虚偽を返してみませんか?
その理由は、PHPデザイナーが「機能実行に失敗した」と「実際には配列に要素がない」を区別したいということです。
falseは通常、「エラー」または「失敗」を意味します。
NULLは、「ここには価値がない」をより適切に表現します。
したがって、空の配列でcurrent()を呼び出してnullを返すことは、より合理的な選択です。
より良い理解のために、いくつかの配列ポインター関連関数を比較できます。
<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
開発者がcurrent()を使用する場合、 nullとfalseの違いに特に注意を払う必要があります。 if(current($ arr))を直接判断するために使用する場合、 nullとfalseは両方ともブールのコンテキストで偽の値として扱われるため、あいまいになる可能性があります。
より安全なアプローチは、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