【问题标题】:Returning elements with php functions使用 php 函数返回元素
【发布时间】:2013-10-21 01:56:07
【问题描述】:

我有这样的课:

class Foo {
    $elements = array();

    function getElementByName($name) {
        foreach($this->elements as $elm) {
            if ($elm->name == $name) {
                return $elm;
            }
        }
    }
}

我希望以下代码可以修改我的数组的元素:

$myFoo = new Foo();
$myFoo->getElementByName('foo1')->active = true;

相反,当运行我的代码时,$elements['foo1']active 属性仍然是 false,因为它是在调用 getElementByName 之前

我认为该函数对元素进行了“复制”,我怎样才能得到数组的真实元素,这样当我修改它,然后在数组中访问它时,它的值已经改变了?

【问题讨论】:

  • 我无法重现该行为:codepad.org/7RFtib1d
  • 你猜对了。但请注意,PHP 从版本 5 开始无论如何都应该通过引用传递对象。你还在运行 PHP 4 吗?
  • @knittl PHP 4.4.9 将抛出 unexpected T_OBJECT_OPERATOR

标签: php arrays function variables pointers


【解决方案1】:

Return a reference 给它(注意 &):

function &getElementByName($name) { ... }

【讨论】:

    【解决方案2】:

    返回对元素的引用:

    function &getElementByName($name) { // & returns by reference
        foreach($this->elements as $elm) {
            if ($elm->name == $name) {
                return $elm;
            }
        }
    }
    

    从 PHP 5 开始的对象默认为passed by reference

    【讨论】:

    • 其实对象引用是按值传递的。
    猜你喜欢
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 2012-07-19
    相关资源
    最近更新 更多