您能解释下一个有趣的行为吗?
class test {
//Class *test* has two properties, public and private.
public $xpublic = 'x1';
private $xprivate = 'x2';
}
$testObj = new test();
让我们转换$testObj为数组。
settype($testObj, 'array');
var_dump($testObj);
结果:
array(2){
[“ xpublic”] =>字符串(3)“ x1”
[“ testxprivate”] =>字符串(4)“ x2”
}
好,xprivate财产变成testxprivate
让我们将此数组转换为对象。
$newObj = (object)$testObj;
var_dump($newObj);
结果:
object(stdClass)#1(2){
[“ xpublic”] =>字符串(3)“ xxx”
[“ xprivate”:“ test”:private] => string(4)“ xxx3”
}
$newObj是一个stdClass对象。
问题是:
为什么要testxprivate成为新对象的私有财产xprivate(不是testxprivate)?PHP如何知道该$testObj数组是一个对象?
如果我定义相等的数组:
$testArray = array('xpublic'=>'x1', 'testxprivate'=>'x2');
然后将其转换为对象:
var_dump((object)$testArray);
我将获得具有两个 公共 属性的对象,xpublic并且testxprivate与预期的一样:
object(stdClass)#2(2){
[“ xpublic”] =>字符串(2)“ x1”
[“ testxprivate”] =>字符串(2)“ x2”
}