一尘不染

将当前对象($ this)转换为后代类

php

我有一类可能需要将对象更改为更远的一行的后代类。这可能吗?我知道一个选择是返回它的副本,但改用子类,但是最好实际修改当前对象……所以:

class myClass {
  protected $var;

  function myMethod()
  {
    // function which changes the class of this object
    recast(myChildClass); 
  }
}

class myChildClass extends myClass {
}

$obj = new myClass();
$obj->myMethod();
get_class_name($obj); // => myChildClass

阅读 350

收藏
2020-05-29

共1个答案

一尘不染

如其他答案中所述,您可以使用讨厌的 黑魔法 PECL扩展来做到这一点。

虽然,您真的不想要它。您想在OOP中解决的任何问题都有一种符合OOP的方法。

运行时类型层次结构修改不符合OOP(实际上,有意识地避免了这一点)。有些设计模式应该适合您的需求。

请告诉我们您为什么要这么做,我敢肯定必须有更好的方法来做到这一点;)

2020-05-29