Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在函数参数中传递类变量_Php - Fatal编程技术网

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

Php 如何在函数参数中传递类变量,php,Php,示例类的主函数对不同的数据使用reusableFunction两次,并在每种情况下尝试将该数据发送到不同的实例变量$this->result1container和$this->result2container,但数据不会进入实例变量 我可以通过将reusableFunction转换为两个不同的函数来实现它,一个是使用array_push$this->result1container$resultdata,另一个是使用array_push$this->result2container$result

示例类的主函数对不同的数据使用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);
    }

}

如果这是一个重复的问题,我道歉,并将很高兴地从这个问题的答案,如果有人愿意指出我那里。我的研究没有找到任何答案,但这可能只是因为我不知道要搜索的正确问题在我看来你想要的是:


如果您没有通过引用传递&那么您只是在reuseableFunction中创建变量的本地副本。

在我看来,您希望:


如果您没有通过引用传递&那么您只是在reuseableFunction中创建变量的本地副本。

您正在更改副本,而不是原始副本。为原始阵列添加别名:

这应该可以完成任务。或者,返回更改后的数组,并将其分配给它所属的对象成员,以便于重用,并在真正的功能仅用于推送的情况下将它们分开

另外

array_push($resultcontainer, $resultdata);
可以写成

$resultcontainer[] = $resultdata;

但这只是供参考。

您更改的是副本,而不是原件。为原始阵列添加别名:

这应该可以完成任务。或者,返回更改后的数组,并将其分配给它所属的对象成员,以便于重用,并在真正的功能仅用于推送的情况下将它们分开

另外

array_push($resultcontainer, $resultdata);
可以写成

$resultcontainer[] = $resultdata;

但这只是供参考。

您可以将属性名称作为字符串传递给方法,如下所示:

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

可以将属性名称作为字符串传递给方法,如下所示:

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


我觉得自己很笨。我测试了几个小时的各种解决方案,我离一开始就差一个字符了。谢谢保罗。@Turenne:请接受这个答案,请看这里:-谢谢你的帮助@哈克雷:等15分钟过去,试着理解为什么马斯奇建议不要使用引用。@Turenne:我认为马斯奇提醒我们应该小心引用/变量别名,因为它们并不总是容易理解/处理的。如果您想了解更多关于引用的信息,PHP手册中有关于引用的信息-我不能只是在注释中解释它。@Turenne:I+1这个答案是正确的,因为它是正确的。我想知道,为什么要通过引用传递?为什么不回来呢?我觉得自己很笨。我测试了几个小时的各种解决方案,我离一开始就差一个字符了。谢谢保罗。@Turenne:请接受这个答案,请看这里:-谢谢你的帮助@哈克雷:等15分钟过去,试着理解为什么马斯奇建议不要使用引用。@Turenne:我认为马斯奇提醒我们应该小心引用/变量别名,因为它们并不总是容易理解/处理的。如果您想了解更多关于引用的信息,PHP手册中有关于引用的信息-我不能只是在注释中解释它。@Turenne:I+1这个答案是正确的,因为它是正确的。我想知道,为什么要通过引用传递?为什么不直接返回呢?这里有一个链接,链接到一个来自PHP 5.3的Johannes Schlüter发布管理器的博客帖子:不要使用PHP引用您给出的链接确实是一个很好的阅读,但不要过度概括:总结到目前为止:-不要使用OO的引用,但要摆脱PHP 4遗留问题。-不要使用性能参考。。这不是一个将军从不这样做,而是一个知道你在做什么的提醒。如果确实没有人知道引用是什么,就不要使用它们。我真的看不到使用引用的理由&在PHP中,但是有一些很好的理由反对它。没有他们一切都会更好!如果你感兴趣的话,我可能会在SO上选择一些我的答案,并将它们链接到这里,展示一些角落案例的参考资料的用法。但只要你愿意。我大体上同意你的看法
nd Johannes,你应该知道它们足够好,不要使用它们,对于备用案例,你知道它们足够好,你可以使用它们。这里有一个链接,来自Johannes Schlüter PHP5.3发布管理器的博客帖子:不要使用PHP引用你给出的链接确实是一个很好的阅读,但不要过度概括:总结到目前为止:-不要使用OO的引用,但要摆脱PHP4遗留问题。-不要使用性能参考。。这不是一个将军从不这样做,而是一个知道你在做什么的提醒。如果确实没有人知道引用是什么,就不要使用它们。我真的看不到使用引用的理由&在PHP中,但是有一些很好的理由反对它。没有他们一切都会更好!如果你感兴趣的话,我可能会在SO上选择一些我的答案,并将它们链接到这里,展示一些角落案例的参考资料的用法。但只要你愿意。我大体上同意你和约翰内斯的观点,你应该足够了解它们,不要使用它们,对于备用的箱子,你应该足够了解它们,可以使用它们。