首页 > 解决方案 > PHP 克隆/复制/将方法从一个对象移动到另一个对象

问题描述

我已经搜索了大约一个小时左右。我一直在寻找关于错误主题的文章;“克隆方法”提出了一种称为克隆的方法;检查重复的方法;重构......这些不是我想要的。

我有一个非常通用和基本的请求,但考虑到我还没有找到讨论它的文章,这很有挑战性。我想将方法​​从一个对象移动到另一个对象。假设我创建了两个通用对象:

class Test {
    private function test0($param=null) {echo 'test0';}
    protected function test1($param=null) {echo 'test1';}
    public function test2($param=null) {echo 'test2';}
    public function test3($param=null) {echo 'test3';}
}
$test = new Test();
$copy = new stdClass();

如何在 中搜索方法$test,并在其中复制它们$copy?此外,我不想只是复制所有内容。假设我只想复制test0(),test1()test2().

然后,我想$test一个一个地删除这些方法(但不是在大规模修剪中)。我想要手动控制复制、复制和删除方法。

标签: phpfunctionobject

解决方案


PHP 不是 JavaScript。在不知道你的原因的情况下,听起来你可能想研究依赖注入/控制反转。

或者,有一个名为runkit的 PHP 扩展,可以非常直接地允许您添加/删除方法。因此,您可以简单地拥有一个包含所有方法的 Base 类,并使用 runkit 删除任何您不想要的方法。但是,Runkit 尚未针对 php7 进行更新。

话虽如此,特征最接近“您可以添加到任何类的预定义方法”。结合内置的PHP 魔术方法 __call,您可以像他们对这个基于特征的库 (spatie/macroable) 所做的那样进行操作。

一般来说,像这样编写、测试和运行代码有很多缺点。俗话说:剪羊的方法不止一种。


推荐阅读