我是在Zend PHP5认证学习,一切都看起来不错,但我无法找到传递或返回变量我参考现实世界的例子。

这将是非常好的,如果有人有一个例子,当使用此?

有帮助吗?

解决方案

让我们假设你想编写一个函数,从数组中删除某个值。

function remove_elements($array, $item1, $item2, ...) {
  ...
}

您可以复制数组,并返回。但是,如果你想知道,如果移除什么?相反,您修改数组就地并返回删除的元素的数量。所以:

function remove_elements(&$array) {
  // remove elements
  return $number_removed;
}

如果您在函数内部创建一个复杂的结构,你可能要参考返回到它,而不是它的一个副本。但是,这是一个相当边缘的情况下,因为PHP使用写入时复制(即其不可复制的,直到它的修改),但也有一些有效的使用情况。

通过引用返回更有意义当你写一个类的成员函数。你可以返回到一数据成员的引用但是这也可以打破封装。

最后,值得一提的是,所有的对象都是通过并经默认引用返回。一切被传递,并通过返回值。

其他提示

通过引用传递:类似功能 ASORT()

$array = array(3, 2, 1);
asort($array);

在PHP5对象由默认引用传递。 (为了正确描述,参见 http://docs.php.net/language.oop5.references

通过引用传递参数已经回答...

作为(真实世界)例如用于通过参考一个返回值挑选任何流利介面其中方法返回作为它自己的呼叫上下文传递到相同的对象的引用($这一点)。这是行不通的(如预期),如果返回值是拷贝/克隆。

E.g。

class MyClass {  
  protected $foo = 'n/a';
  protected $bar = 'n/a';

  function foo($val) {
    $this->foo = (int)$val;
    return $this;
  }

  function bar($val) {
    $this->bar = (int)$val;
    return $this;
  }

  function __toString() {
    return 'foo='.$this->foo.' bar='.$this->bar;
  }
}

$o = new MyClass;
$o->foo(1)
  ->bar(2);
echo $o;

这版画foo=1 bar=2,我认为这是一个结果所预期的,没有惊喜在这里。 如果该方法通过返回值$这一点,那就不再工作。您可以通过强制PHP返回副本测试。代替的return $this线使用

return clone $this;

和输出将是

foo=1 bar=n/a

(我不认为这是直观的接口; - ))

这可能是有用的,如果你有chainig工作,如:

    public function addObject(array &$someData){
$newObj = Fabric::create($someData);
$this->listOfObj[] = $newObj;
return $newObj;
}

....
$this->addObj(array('idontknow' => 'anything'))->setName('mr.knowitall')->save();

... Sry基因。相同VOLKERS :((该流利接口是链接像我知道的话)。

图像你有一个流利接口与负载方法。负载接口更换或添加一些数据。这可能是与参考价值$成功的呼叫采取行动,以确定所述负载是成功的有用。

返回参考: 以具有行的列表中的某些数据库对象。该NR。行点的所有对象(parallesl)的正确的数据。如果返回的NR。并把它传递到下一个对象,你可以跳过行中的一个对象,然后在别人跳过了。总是具有对象的的Valide一堆。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top