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

将stdClass对象转换/广播到另一个类

步联
2023-03-14
问题内容

我正在使用第三方存储系统,无论出于什么原因,无论输入什么内容,它都只会返回stdClass对象。因此,我很想知道是否有一种方法可以将stdClass对象转换/转换为给定类型的完整对象。

例如:

//$stdClass is an stdClass instance
$converted = (BusinessClass) $stdClass;

我只是将stdClass转换为数组并将其提供给BusinessClass构造函数,但是也许有一种方法可以还原我不知道的初始类。

注意:我对“更改存储系统”类型的答案不感兴趣,因为它不是关注点。请考虑更多有关语言能力的学术问题。

干杯


问题答案:

允许的强制转换为:

  • (int), (integer) - cast to integer
  • (bool), (boolean) - cast to boolean
  • (float), (double), (real) - cast to float
  • (string) - cast to string
  • (array) - cast to array
  • (object) - cast to object
  • (unset) - cast to NULL (PHP 5)

您将必须编写一个Mapper来执行从stdClass到另一个具体类的转换。应该不难做。

或者,如果您情绪低落,则可以改写以下代码

function arrayToObject(array $array, $className) {
    return unserialize(sprintf(
        'O:%d:"%s"%s',
        strlen($className),
        $className,
        strstr(serialize($array), ':')
    ));
}

它将一个数组伪广播到某个类的对象。通过首先序列化数组,然后更改序列化的数据以使其表示某个类,可以实现这一目的。然后将结果反序列化为此类的实例。但是就像我说的那样,它有点黑,所以要期待副作用。

对于对象到对象,代码将是

function objectToObject($instance, $className) {
    return unserialize(sprintf(
        'O:%d:"%s"%s',
        strlen($className),
        $className,
        strstr(strstr(serialize($instance), '"'), ':')
    ));
}


 类似资料:
  • 问题内容: 我从postmeta获取post_id为: 当我尝试 我有这样的数组: 而且我不知道如何遍历它,如何获得这样的数组 知道我该怎么做吗? 问题答案: 最简单的方法是对对象进行JSON编码,然后将其解码回数组: 或者,如果您愿意,也可以手动遍历对象:

  • 问题内容: 我做了以下数组: 我想知道如何使用stdClass()将此数组转换为对象,我是PHP初学者,一个简单的示例会非常有帮助,我尝试搜索类似的问题,但是答案很复杂,而且超出了我对基本类和对象的理解。 问题答案: 您只需添加此代码 如果要查看此stdClass对象,只需调用此 如果要将数组转换为目标代码,将 您不需要使用stdClass。它将自动转换为stdClass

  • 我的spring应用程序中有一个功能有问题。我在同一个数据库中有两个表,它们都包含相同类型的数据(id、标题、描述和日期)。我可以从一个表中获取数据,但不知道如何插入到第二个表中。 在我的@服务层中,我可以从表A中获取数据。但不知道如何转换为另一个类对象(两个类都包含samne数据) 注入JPA储备 还有从表A获取对象的代码(TasksRepository-JpaRepository)

  • 问题内容: 我有一个从json_decode创建的stdClass对象,当我运行count($ obj)函数时不会返回正确的数字。该对象具有30个属性,但count()函数的返回值为1。 有任何想法吗? 以下是其中一个对象的示例。(我正在从Twitter请求每日趋势信息)。如果此对象具有多个属性,则count($ obj)等于1。 问题答案: 问题在于count的目的是对数组中的索引进行计数,而不

  • 我有一张这样的地图<代码>地图 钥匙是数字1,2,3,4。。。学生对象是: 我想做的是把它转换成地图 我可以使用这些代码对地图进行分组,但summingDouble不适用于BigDecimal。此外,我无法将我的studentMap转换为StudentInfo地图:( 我的学生信息对象是:

  • 问题内容: 我有SourceObjects列表,我需要将其转换为ResultObjects列表。 我可以使用ResultObject的方法将一个对象获取到另一个对象: 我当然可以这样: 但对于能够展示如何使用 rxJava 进行相同操作的人,我将非常感激。 问题答案: 如果发出,则可以使用以下运算符: (将您的列表转换为可观察项) (将您的商品转换为其他商品) 运算符(将完成的Observable