gpt4 book ai didi

php - 如何在 PHP 中转换对象

转载 作者:IT老高 更新时间:2023-10-28 12:06:36 26 4
gpt4 key购买 nike

我有一些共享某些属性的类,我想做类似的事情:

$dog = (Dog) $cat;

是否有可能或有任何通用的解决方法?

它不是父类(super class),也不是接口(interface)或以任何方式相关。它们只是 2 个不同的类,我希望 php 将属性从猫类映射到狗并给我新对象。 ——

我想我必须再说明一点,因为这似乎是一件毫无意义的事情。

我有从不同父类继承的类,因为我已经根据保存方法制作了一个继承树,也许我从一开始就不好,但问题是我有很多类实际上是相等的,但是一个与 mysql 交互,另一个与 xml 文件交互。所以我有:

class MySql_SomeEntity extends SomeMysqlInteract{}

Xml_SomeEntity extends SomeXmlInteract{}

它的树有点深,但问题就在于此。我不能让它们从同一个类继承,因为不允许多重继承,而且我不能分离当前与父类(super class)的交互,因为这将是一个大麻烦。

基本上每个属性都是一样的。

因为我有很多这样的匹配类,所以我想做一些通用转换或类似的东西,可以转换(将值传递给每个属性),但我试图为这些类的每个人搜索最简单的方法。

最佳答案

您可以使用上述函数来转换不相似的类对象 (PHP >= 5.3)

/**
* Class casting
*
* @param string|object $destination
* @param object $sourceObject
* @return object
*/
function cast($destination, $sourceObject)
{
if (is_string($destination)) {
$destination = new $destination();
}
$sourceReflection = new ReflectionObject($sourceObject);
$destinationReflection = new ReflectionObject($destination);
$sourceProperties = $sourceReflection->getProperties();
foreach ($sourceProperties as $sourceProperty) {
$sourceProperty->setAccessible(true);
$name = $sourceProperty->getName();
$value = $sourceProperty->getValue($sourceObject);
if ($destinationReflection->hasProperty($name)) {
$propDest = $destinationReflection->getProperty($name);
$propDest->setAccessible(true);
$propDest->setValue($destination,$value);
} else {
$destination->$name = $value;
}
}
return $destination;
}

示例:

class A 
{
private $_x;
}

class B
{
public $_x;
}

$a = new A();
$b = new B();

$x = cast('A',$b);
$x = cast('B',$a);

关于php - 如何在 PHP 中转换对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2226103/

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