【发布时间】:2015-10-27 13:21:34
【问题描述】:
好的,我已经创建了一个我遇到的问题的简单重现,我已经测试了代码并且它运行了。我的问题是,如何在 Rock->mb() 内部调用 Paper->important(),如果 Rock 实例位于 Paper 实例内部,而不将实例化对象注入到每个方法中? 我'通过将 mypaper 的 $this 传递/注入到 rock 的方法中来完成它。主要问题是只有一种 rock 方法需要它,那么考虑到我正在运行许多函数,如何轻松访问实例化对象的方法而不将它们传递给每个函数?最后一个问题是,也许是否重要我将它们注入到每个方法中,它会使用额外的内存还是资源? 我应该通过引用传递 $this 吗?,它会节省内存吗?另外,当我传递未使用的额外参数时会发生什么?
<?php
class Rock{
public function ma($args){ //what happens when it gets injected into this function?
return $args." in ma";
}
public function mb($args,$context){ //do I have to inject it?
if($args=="args2"){
$context->important();
return "<br>".$args." in mb";
}
}
//50 other functions that DONT require paper->important()
}
class Paper{
public function __construct($vitalString){
$this->vitalString = $vitalString;
}
public function all(){
$list = ['ma'=>'args1','mb'=>'args2'];
$objRock = new Rock();
foreach($list as $meth=>$args){
if(method_exists($objRock,$meth)){
$response = $objRock->{$meth}($args,$this);
//can I avoid injecting the instantiating $this, into every function I call if only one needs it?
echo $response;
}
}
}
function important(){
echo "<br>".$this->vitalString;
}
}
$myPaper = new Paper("Super Duper");
$myPaper->all();
?>
这是输出
在 ma 中的 args1
超级骗子
args2 以 mb 为单位
【问题讨论】:
-
酷酷... 很多人对此作出回应。也许我没有在正确的地方或正确的方式提出问题......
-
您的问题非常不清楚。介绍基本看不懂,代码乱七八糟。请改写问题;也许试着解释一下你正在尝试做什么以及你期望发生什么。
-
@lxg dlporter98 很好地回答了我的问题。
标签: php class methods reference instance