gpt4 book ai didi

php - 将 stdClass 对象转换/转换为另一个类

转载 作者:IT老高 更新时间:2023-10-28 11:55:52 26 4
gpt4 key购买 nike

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

例如:

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

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

注意:我对“更改您的存储系统”类型的答案不感兴趣,因为它不是兴趣点。请把它当作一个关于语言能力的学术问题。

干杯

最佳答案

manual on Type Juggling关于可能的类型转换。

允许的类型转换是:

  • (int), (integer) - 转换为整数
  • (bool), (boolean) - 转换为 bool 值
  • (float), (double), (real) - 转换为 float
  • (string) - 转换为字符串
  • (array) - 转换为数组
  • (object) - 转换为对象
  • (未设置)- 强制转换为 NULL (PHP 5)

您必须 write a Mapper从 stdClass 到另一个具体类的转换。应该不会太难做。

或者,如果你心情不好,你可以修改以下代码:

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

将数组伪转换为某个类的对象。这通过首先序列化数组然后更改序列化数据使其代表某个类来工作。然后将结果反序列化为此类的实例。但就像我说的那样,它是 hackish,所以期待副作用。

对于对象到对象,代码是

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

关于php - 将 stdClass 对象转换/转换为另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3243900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com