在尝试模拟一些PHP行为时,我偶然发现了这个:
$a=array(0 => 1, 'test' => 2);
$b=array('test' => 3, 0 => 1);
var_dump($a==$b, $a>$b, $b>$a);
Run Code Online (Sandbox Code Playgroud)
根据输出var_dump $b大于$a.在PHP手册中有一个标准数组比较的转录,它表明数组的值是逐个比较的,如果第二个数组中缺少第一个数组的键,则数组是无法比较的.到现在为止还挺好.但是,如果我尝试这个(仅改变第一个元素$a):
$a=array(0 => 2, 'test' => 2);
$b=array('test' => 3, 0 => 1);
var_dump($a==$b, $a>$b, $b>$a);
Run Code Online (Sandbox Code Playgroud)
所有三个比较结果都是false.这看起来对我来说>是"无法比拟的"(因为结果与结果相同<,而数组也不==是,这没有任何意义),但这不符合PHP手册的转录.这两个键都出现在两个数组中,我希望$a这次更大,因为键0的内容更大$a(2比1).
我试图挖掘到PHP源代码,发现zend_hash_compare()中zend_hash.c,但代码似乎有工作的手册描述.
这里发生了什么?
在对象的实例中,我喜欢使用闭包机制来模拟私有成员变量.对于潜在的大量创建对象,我不需要一些私有成员,但是我必须声明它们才能在闭包中使用它们,例如"one","two"和"three":
var obj=function()
{
var one;
var two;
var three;
var M=function()
{
one=5;
};
};
Run Code Online (Sandbox Code Playgroud)
(不要介意这实际上不是我的设置的一个工作示例,只是为了演示使用M的三个变量的闭包)
var语句本身是否已经消耗了内存,或者这取决于实际为这些变量分配一些东西,比如"one"?