PHP-安全地替换类

PHP-安全地替换类,php,class,extends,Php,Class,Extends,假设我上了一节课: class abc { function a() { .. } } 将来,比如说为了更新,我制作了这个类的更新版本,所有相同的函数加上一些新函数和私有变量: class abc2 { function a() { .. } } 现在,我想要的不是更新我的整个代码来查找旧类abc,而是用abc2替换它,有没有办法在我的旧代码中调用abc的对象,它应该返回abc2。这样,我就不必在代码中的所有abc实例中更新类名 我知道我可以在类abc2中使用extends关键

假设我上了一节课:

class abc {
   function a() { .. }
}
将来,比如说为了更新,我制作了这个类的更新版本,所有相同的函数加上一些新函数和私有变量:

class abc2 {
    function a() { .. }
}
现在,我想要的不是更新我的整个代码来查找旧类
abc
,而是用
abc2
替换它,有没有办法在我的旧代码中调用
abc
的对象,它应该返回
abc2
。这样,我就不必在代码中的所有
abc
实例中更新类名

我知道我可以在类
abc2
中使用
extends
关键字,但我担心我的私有变量或函数无法访问

class abc extends abc2 {
// don't add any methods or whatever
}

class abc2 {
   function a() { .. }
}
这样一来,abc2的所有方法都与abc相同。至于私人问题,没有简单的办法解决。要么重写所有代码以修复该类,要么保护私有方法。至少尝试使用这个扩展方法,看看是否有冲突发生,我当然不希望如此

一个解决方案是使用名称空间,您可以在其中重新编码以使用newnamespace\abc;而不是oldnamespace\abc;在你的代码中。然而,这也意味着重写代码

这样一来,abc2的所有方法都与abc相同。至于私人问题,没有简单的办法解决。要么重写所有代码以修复该类,要么保护私有方法。至少尝试使用这个扩展方法,看看是否有冲突发生,我当然不希望如此


一个解决方案是使用名称空间,您可以在其中重新编码以使用newnamespace\abc;而不是oldnamespace\abc;在你的代码中。不过,这也意味着要重写代码。

在ide中重构?使用接口如何?@Guy,真的不知道如何使用接口:(使用接口、工厂模式、测试和阅读模式与重构,Luke.:^)在ide中重构?使用接口如何?@Guy,真的不知道如何使用接口:(使用界面、工厂模式、测试和阅读模式与重构,Luke.:^)