作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一些共享某些属性的类,我想做类似的事情:
$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/
我是一名优秀的程序员,十分优秀!