Php 是否可以替换一个对象,但保留对它的所有相同引用

Php 是否可以替换一个对象,但保留对它的所有相同引用,php,Php,在PHP中,可以将class1的对象A替换为class2的对象B,这样所有对A的引用现在都重定向到B 目标是避免跟踪对对象的所有引用(可能存在于复杂的关系系统中),并逐个替换对象 更详细一点的上下文:在解析svg文件期间,我需要对象A作为临时替代,表示一个标记,一旦解析文件,它将被标记引用的实际实例所替换。问题是,可能引用尚未解析的标记,标记可能引用不同几何类型的对象 以下是我想要的行为的(通用)示例: $A = new Class1(); $Array_1["name1"] = $A; ..

在PHP中,可以将class1的对象A替换为class2的对象B,这样所有对A的引用现在都重定向到B

目标是避免跟踪对对象的所有引用(可能存在于复杂的关系系统中),并逐个替换对象

更详细一点的上下文:在解析svg文件期间,我需要对象A作为临时替代,表示一个
标记,一旦解析文件,它将被
标记引用的实际实例所替换。问题是,
可能引用尚未解析的标记,
标记可能引用不同几何类型的对象

以下是我想要的行为的(通用)示例:

$A = new Class1();

$Array_1["name1"] = $A;
...
$Array_n["namen"] = $A;
$object_1->field_1 = $A;
...
$object_n->field_n = $A;

$B = new Class2(); // In my case, $B is assigned to a field of $A, and both extend the same abstract class.

TELL_PHP_ENGINE_TO_REPLACE($A, $B);  //Needed operation
请注意,此操作必须在php引擎级别进行,方法是更改与zval结构相关的句柄和处理程序字段、处理程序表等


目前这可能是不可能的,但我想在花时间编写一个函数来手动执行所有替换之前进行检查。此外,每次修改架构时都必须更新一个手动函数。

我不确定是否理解了evreyhting,但由于PHP5对象是通过引用传递的,因此$obj_a=$obj_b将创建一个a的引用副本。这可能会让您感兴趣=>并且«当克隆对象时,PHP5将执行对象所有属性的浅拷贝。任何引用其他变量的属性都将保留为引用。»请参观一下。好的,这里有一个例子:如果你想,那就没有办法了。但您可以使用代理模式使A对象包裹另一个B对象(尚未创建),然后在需要时创建该对象。有三种类型的代理,信条使用的代理也可以做这项工作。如果我没有错(我现在看不到视频),下面的链接包含一个简短的解释:另一个例子: