首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数组到对象和对象到PHP中的数组 的有趣的方式是什么?

数组到对象和对象到PHP中的数组 的有趣的方式是什么?
EN

Stack Overflow用户
提问于 2018-03-12 04:19:58
回答 2查看 0关注 0票数 0

你能解释下一个有趣的方式吗:

代码语言:javascript
复制
class test {
  //Class *test* has two properties, public and private.
  public $xpublic = 'x1';
  private $xprivate = 'x2';
}
$testObj = new test();

让我们转换$testObj为数组:

代码语言:javascript
复制
settype($testObj, 'array');
var_dump($testObj);

结果:

代码语言:javascript
复制
数组(2){
  [“xpublic”] =>字符串(3)“x1”
  [“testxprivate”] => string(4)“x2”
}

让我们将这个数组转换为对象:

代码语言:javascript
复制
$newObj = (object)$testObj;
var_dump($newObj);

结果:

代码语言:javascript
复制
对象(stdClass)#1(2){
  [“xpublic”] => string(3)“xxx”
  [“xprivate”:“test”:private] => string(4)“xxx3”
}

问题是:

为什么testxprivate成为新对象的私有财产xprivate(而不是testxprivate)?PHP如何知道该$testObj数组是一个对象?

如果我定义了相等的数组:

代码语言:javascript
复制
$testArray = array('xpublic'=>'x1', 'testxprivate'=>'x2');

然后将其转换为对象:

代码语言:javascript
复制
var_dump((object)$testArray);

我有两个获得对象的公共属性xpublictestxprivate预期:

代码语言:javascript
复制
对象(stdClass)#2(2){
  [“xpublic”] =>字符串(2)“x1”
  [“testxprivate”] => string(2)“x2”
}
EN

回答 2

Stack Overflow用户

发布于 2018-03-12 12:37:10

你可以将脚本输出与以下内容进行比较:

代码语言:javascript
复制
$array = array(
    "xpublic" => "x1", 
    # this will become a private member:
    "\x00test\x00xprivate" => "x2",
    # this will become a protected member:
    "\x00*\x00xprotected" => "x3"
);

var_dump($array);

$obj = (object) $array;

var_dump($obj);

在序列化时,使用相同的字符串来描述私有成员:

输出:

代码语言:javascript
复制
数组(3){
  [ “xpublic”] =>
  字符串(2)“x1”
  [ “testxprivate”] =>
  字符串(2)“x2”
  [ “* xprotected”] =>
  字符串(2)“x3”
}

对象(stdClass)#1(3){
  [ “xpublic”] =>
  字符串(2)“x1”
  [ “xprivate”: “测试”:私人] =>
  字符串(2)“x2”
  [ “xprotected”:保护] =>
  字符串(2)“x3”
}

在输出中var_dump(),空字节不可见。

票数 0
EN

Stack Overflow用户

发布于 2018-03-12 13:39:41

PHP引擎很可能保留内部的类结构,并且简单地给出某种数组包装,因此当你再次投射时它仍然是私有的,尽管我无法保证100%。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档