关于PHP如何在内部管理变量的简明直观的描述?

时间:2013-04-29 07:04:11

标签: php cakephp

后台:我正在使用CakePHP进行项目,并想知道当我找到/保存列/字段为NULL的DB记录时会发生什么。根据{{​​3}}和http://goldapplesoftware.ca/blog/2011-09-storing-null-values-database-cakephp,看起来CakePHP会(通常)将MySQL NULL列转换为PHP的NULL值。这对我的直觉来说很棒(在DB中为NULL => PHP中的NULL),但在PHP中却非常棘手。

这很棘手,因为我想检查是否定义了数组槽,但值为NULL。

阅读完全但令人困惑的CakePHP: Find where field is not null之后,然后isset,unset,以及几个关于null的页面(包括,最有用的是,http://php.net/manual/en/types.comparisons.php)我或多或少地相同结论为http://php.net/manual/en/language.types.null.php。也就是说,您可以使用

检查变量是否已定义(但值为null)
if (isset($array['x']) && $array['x'] === NULL)

(或者,对于数组:

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

我的问题:我正在寻找一个简明的,希望直观的解释,说明PHP如何在内部处理变量。

在思考了我读过的所有内容之后,我意识到我最接近的心智模型是JavaScript Scope Chain(Check if Variable exists and === true)。在PHP中定义变量似乎在符号表/条目中添加一个符号到哈希表,为该变量赋值NULL不会删除名称,但会导致它的值被NULL覆盖,并且取消设置会从名称中删除名称表

这是否接近正在发生的事情?有没有人有更好的解释?

1 个答案:

答案 0 :(得分:1)

PHP处理变量很像javascript和其他类似语言的脚本。由于PHP是非类型安全的,因此它完全使用您认为它的健壮哈希表。

你可以认为它包含的键是指向那些变量值的变量名,这些值可以被认为是大部分的字符串。这些密钥应该保留在范围内,直到不再需要或一旦它们松开范围。因此,如果将键的值设置为NULL,则键仍将存在,指向值NULL。但是,如果您想要完全删除类似于C中的delete或C#中的Dispose的变量,则需要使用unset等,并从哈希表中完全删除该键。

我希望能回答你的问题。如果您想要更多解释,请告诉我。