0

背景:プロジェクトに CakePHP を使用していますが、列/フィールドに NULL を持つ DB レコードを見つけて保存するとどうなるか疑問に思っていました。http://goldapplesoftware.ca/blog/2011-09-storing-null-values-database-cakephpおよびCakePHP: Find where field is not nullによると、CakePHP は (一般的に) MySQL NULL 列を PHP の NULL に変換するようです。価値。これは私の直感 (DB の NULL => PHP の NULL) には最適ですが、PHP では驚くほどトリッキーです。

配列スロットが定義されているかどうかを確認したいのですが、値がNULLであるため、注意が必要です。

完全だが紛らわしいhttp://php.net/manual/en/types.comparisons.phpを読んだ後、設定、設定解除、およびnullのいくつかのページ(最も便利なのはhttp://php.netを含む) /manual/en/language.types.null.php ) Check if Variable exists と === true とほぼ同じ結論に達しました。つまり、変数が定義されている (ただし、値が null である) かどうかを次のように確認できます。

if (isset($array['x']) && $array['x'] === NULL)

(または、配列の場合:

if( array_key_exists('x', $array) && $array['x'] === NULL)

)

私の質問: PHP が変数を内部で処理する方法について、簡潔でできれば直観的な説明を探しています。

読んだすべてのことを熟考した後、私が持っていた最も近いメンタル モデルは JavaScript Scope Chain ( Javascript の Scope Chain ) であることに気付きました。PHP で変数を定義すると、シンボル テーブル/エントリにシンボルが追加され、その変数に NULL を割り当てても名前は削除されませんが、値が NULL で上書きされます。また、設定を解除すると名前が削除されます。テーブル。

これは何が起こっているのかに近いですか?誰かがより良い説明を持っていますか?

4

1 に答える 1

1

PHP は変数を JavaScript や他のスクリプト言語と同様に処理します。PHP はタイプ セーフではないため、堅牢なハッシュ テーブルを使用すると思われるものを正確に使用します。

それらの変数の値を指す変数名であるキーを含むと考えることができます。値はほとんどの場合文字列と考えることができます。これらのキーは、不要になるか、スコープを失うまで、スコープ内に保持する必要があります。したがって、キーの値を NULL に設定すると、キーは引き続き存在し、NULL の値を指します。ただし、C の delete や C# の Dispose のように変数を完全に削除したい場合は、unset などを使用して、ハッシュ テーブルからキーを完全に削除する必要があります。

それがあなたの質問に答えることを願っています。さらに説明が必要な場合はお知らせください。

于 2013-04-29T07:16:32.583 に答える