当前位置: 首页 > 面试题库 >

数组到对象和对象到数组在PHP中-有趣的行为

范鸿
2023-03-14
问题内容

您能解释下一个有趣的行为吗?

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”
}

问题答案:

数组键包含一个标记,该标记应为类测试的私有属性。

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

$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);

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

输出:

数组(3){
  [“ xpublic”] =>
  字符串(2)“ x1”
  [“ testxprivate”] =>
  字符串(2)“ x2”
  [“ * xprotected”] =>
  字符串(2)“ x3”
}

object(stdClass)#1(3){
  [“ xpublic”] =>
  字符串(2)“ x1”
  [“ xprivate”:“ test”:private] =>
  字符串(2)“ x2”
  [“ xprotected”:protected] =>
  字符串(2)“ x3”
}

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

(更新:添加了受保护的类成员)



 类似资料:
  • 问题内容: 我需要将PHP数组转换为json,但我没有得到我期望的结果。我希望它是一个可以轻松使用数字索引导航的对象。这是一个示例代码: 这就是我得到的 但是我想得到一个对象而不是数组: 谢谢 :) 问题答案: 你想。 顾名思义,该标志将json输出强制为一个对象,即使通常将其表示为数组也是如此。 您还可以删除一些更简洁的代码:

  • 问题内容: Swift在Underscore.js中是否有类似_.findWhere的内容? 我有一个类型为struct的数组,想检查array是否包含属性等于的struct对象。 尝试使用,但它们仅适用于基本类型,例如或。引发有关不符合协议之类的错误。 问题答案: FWIW,如果您不想使用自定义功能或扩展名,则可以: 首先生成数组,然后从中生成数组。 如果阵列很大,则可能需要执行以下操作: 或许

  • 问题内容: 在一个我目前正在从事的项目中,我遇到了一个角度异常: 在寻找解决方案的搜索中,我直接在浏览器中输入了Web服务的URL,但令人惊讶的是,我没有收到预期的数组。 Web服务类: 当我输入网址时,我希望看到带有JSON对象的JSON数组: 但是,相反,我收到的JSON对象的属性与我期望的JSON对象相同,没有任何数组: 所以我想知道为什么没有数组,当我添加另一个Clazz对象时会发生什么。

  • 问题内容: 如何将XML文档转换为Java对象(或数组)?我这样阅读XML: 现在,我希望将XML作为对象(或数组),但是我应该怎么做呢?是否有任何方法,教程或类可以做到这一点? 问题答案: 您将需要JAXB解组。

  • 问题内容: 我需要解析一个看起来像这样的json文件: 我想将这些X坐标和Y坐标放入JavaObject Click中,该类如下所示: 我看过gson是因为他们说这很容易,但是我不知道如何从文件中做到这一点。 问题答案: 假设您的json字符串数据存储在名为的变量中:

  • 本文向大家介绍Java中合并数组到新对象数组,包括了Java中合并数组到新对象数组的使用技巧和注意事项,需要的朋友参考一下 以下是在Java中,将数组合并为新对象数组的Java程序- 示例 输出结果 名为Demo的类包含“ concat_fun”,该类接受两个对象并返回连接的对象作为输出。在主字符串中,创建两个整数对象,第三个对象用于存储合并后的对象。相关消息显示在控制台上。