背景:我正在将 CakePHP 用于一个项目,并且想知道当我找到/保存一个列/字段为 NULL 的数据库记录时会发生什么。根据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之后,然后 isset、unset 和几个关于 null 的页面(包括,最有用的是http://php.net /manual/en/language.types.null.php)我得出的结论或多或少与Check if Variable exists and === true相同。即,您可以检查是否定义了变量(但值为 null)
if (isset($array['x']) && $array['x'] === NULL)
(或者,对于一个数组:
if( array_key_exists('x', $array) && $array['x'] === NULL)
)
我的问题: 我正在寻找关于 PHP 如何在内部处理变量的简明、希望直观的解释。
在思考了我读过的所有内容后,我意识到我拥有的最接近的心理模型是 JavaScript 作用域链(Javascript 中的作用域链)。在 PHP 中定义一个变量似乎将一个符号添加到一个符号表/一个哈希表的条目,将 NULL 分配给该变量不会删除名称,但会导致它的值被 NULL 覆盖,并且 unset 会从桌子。
这甚至接近正在发生的事情吗?有没有人有更好的解释?