如何在函数参数中传递类变量

时间:2011-08-08 23:02:19

标签: php

示例类的主要功能使用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);
    }

}

(如果这是一个问题的副本,我道歉并很乐意从这个问题中得到答案,如果有人能够指出我那里。我的研究没有找到任何答案,但这可能只是因为我不知道要搜索的正确问题)

3 个答案:

答案 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);