示例类的主要功能使用reusableFunction两次使用不同的数据,并尝试在每种情况下将该数据发送到不同的实例变量($ this-> result1container和$ this-> result2container),但数据没有进入实例变量。
我可以通过将reusableFunction变成两个不同的函数来实现它,一个是array_push($ this-> result1container,$ resultdata),另一个是array_push($ this-> result2container,$ resultdata),但我我试图找到一个不需要我复制代码的解决方案。
我的解决方案是尝试将结果容器的名称传递给函数,但是没有去。有人知道我可以让这个工作吗?
示例代码:
Class Example {
private $result1container = array();
private $result2container = array();
function __construct() {
;
}
function main($data1, $data2) {
$this->reusableFunction($data1, $this->result1container);
$this->reusableFunction($data2, $this->result2container);
}
function reusableFunction($data, $resultcontainer) {
$resultdata = $data + 17;
// PROBLEM HERE - $resultcontainer is apparently not equal to
// $this->result1container or $this->result2container when I
// try to pass them in through the parameter.
array_push($resultcontainer, $resultdata);
}
function getResults() {
return array(
"Container 1" => $this->result1container,
"Container 2" => $this->result2container);
}
}
(如果这是一个问题的副本,我道歉并很乐意从这个问题中得到答案,如果有人能够指出我那里。我的研究没有找到任何答案,但这可能只是因为我不知道要搜索的正确问题)
答案 0 :(得分:4)
在我看来,你希望成为passing by reference:
function reusableFunction($data, &$resultcontainer) {
...
如果您没有通过&
引用传递,那么您只需在reuseableFunction
内制作变量的本地副本。
答案 1 :(得分:1)
您正在更改副本,而不是原始副本。别名原始Array
by referenceDocs:
function reusableFunction($data, &$resultcontainer) {
# ^
这应该可以胜任。或者,返回已更改的Array
并将其分配给它所属的对象成员(至于可重用性并保持分开如果真正的功能仅仅是仅推送)。
此外
array_push($resultcontainer, $resultdata);
可以写成
$resultcontainer[] = $resultdata;
但那只是真的。不过。
答案 2 :(得分:0)
您可以将属性名称作为String传递给方法,如下所示:
function reusableFunction($data, $resultcontainer) {
$resultdata = $data + 17;
array_push($this->{$resultcontainer}, $resultdata);
}
//..somewhere else..
$this->reusableFunction($data, 'result2Container')
一些php专家写了一些关于“你为什么不在php中使用byReference”的文章。
另一种解决方案是将容器定义为数组。然后,您可以将“键”传递给用于将结果存储在数组中的方法。像这样:
private $results = array();
function reusableFunction($data, $resIdx) {
$resultdata = $data + 17;
array_push($this->$results[$resIdx], $resultdata);
}
//..somewhere else..
$this->reusableFunction($data, 'result2Container');
//..or pass a number as index..
$this->reusableFunction($data, 1);