php - 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
一个一个地删除这些方法(但不是在大规模修剪中)。我想要手动控制复制、复制和删除方法。
解决方案
PHP 不是 JavaScript。在不知道你的原因的情况下,听起来你可能想研究依赖注入/控制反转。
或者,有一个名为runkit的 PHP 扩展,可以非常直接地允许您添加/删除方法。因此,您可以简单地拥有一个包含所有方法的 Base 类,并使用 runkit 删除任何您不想要的方法。但是,Runkit 尚未针对 php7 进行更新。
话虽如此,特征最接近“您可以添加到任何类的预定义方法”。结合内置的PHP 魔术方法 __call,您可以像他们对这个基于特征的库 (spatie/macroable) 所做的那样进行操作。
一般来说,像这样编写、测试和运行代码有很多缺点。俗话说:剪羊的方法不止一种。
推荐阅读
- aws-lambda - 调用 lambda 函数处理程序 java
- jenkins - Bitbucket cloud webhook 不触发 Jenkins Build:无分支信息
- r - 如何在年龄金字塔图中填写缺失的年龄?
- python - 如何从 column_name != some_value 的数据库中查找记录?
- python - If 语句简单
- types - 给定一个类型,如何找到我需要实现的所有功能
- javascript - 类型错误:createTestCafe 不是函数
- r - 如何在不增加 NA 的情况下排除纵向分析中的某些参与者
- javascript - 无法将我的 css 文件正确链接到部分标题
- google-bigquery - Pentaho 数据集成 Google BigQuery Loader 异常