PHPのend()配列関数の結果を変数に割り当てて、結果を操作する必要があるのはなぜですか?
質問
次のように配列の最後の空のエントリを削除しようとしましたが、エラーが発生します:"書き込みコンテキストで関数の戻り値を使用できません":
if (empty(end($crontabEntryList))) {
array_pop($crontabEntryList);
}
(下部のように)最初にendの戻り値を変数に割り当てた場合、空の場合は最後のエントリを削除できます。 end()の手動エントリに従って、最後の要素の値を返すか、空の場合はFALSEを返します配列。"グーグルで考えられる説明を見つけました。ブール値は「書き込み可能」ではありません。
しかし、このエラーは私の特定のコンテキストで返され、おそらく SOでここに記載されているその他。ブール値が返される可能性があるからです。私のインスタンスの配列は明らかに空ではなく、したがってfalseではなくend()が「最後の要素の値を返す」ためです。
私の仮定は正しいですか?どちらの場合、これはPHPの緩やかに型付けされた性質と矛盾していませんか?それとも、配列の最後の要素が「書き込み不可」だからでしょうか?その場合、「書き込みコンテキスト」を正確に構成するものは何ですか? PHPで?
$last = end($crontabEntryList);
if (empty($last)) {
array_pop($crontabEntryList);
}
解決
これは、end()または" writability"とは関係ありません。ブール値の
empty()
および isset()
は関数ではなく、言語の構成要素です。
empty()
のドキュメント:
注:empty()は変数を次のようにのみチェックします それ以外は解析になります エラー。言い換えれば、次の 動作しません:empty(trim($ name))。
再度: only 変数は empty()
に渡すことができます。
他のヒント
empty()はそのように奇妙です。私はそれを受け入れ、可能な場合は回避することを学びました(あなたが提供した解決策を使用して)。
配列から空の値を消去しようとしている場合は、 array_filter()
end()の戻り値に負のチェックを使用することを提案できますか?見ての通り、end()は最後の要素の値を返すか、空の場合はFALSEを返します。したがって、追加のコードを使用して空でテストする別の変数を作成する代わりに、end()の戻り値をテストするだけです。
/* Edited */
if(!(trim(end($crontabEntryList)))) {
array_pop($crontabEntryList);
}
文字列の配列を使用してシステムでこれをテストしましたが、目的の効果があるようです。