Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.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
PHP5.x中的按引用传递_Php_Pass By Reference_Return By Reference - Fatal编程技术网

PHP5.x中的按引用传递

PHP5.x中的按引用传递,php,pass-by-reference,return-by-reference,Php,Pass By Reference,Return By Reference,我正在学习Zend PHP5认证,一切看起来都不错,但我找不到传递或返回引用变量的真实示例 如果有人能举例说明何时使用它,那就太好了。假设您想编写一个函数,从数组中删除某些值 function remove_elements($array, $item1, $item2, ...) { ... } 您可以复制数组并返回它。但是如果你想知道是否有东西被移除了呢?而是就地修改数组并返回删除的元素数。因此: function remove_elements(&$array) { //

我正在学习Zend PHP5认证,一切看起来都不错,但我找不到传递或返回引用变量的真实示例


如果有人能举例说明何时使用它,那就太好了。

假设您想编写一个函数,从数组中删除某些值

function remove_elements($array, $item1, $item2, ...) {
  ...
}
您可以复制数组并返回它。但是如果你想知道是否有东西被移除了呢?而是就地修改数组并返回删除的元素数。因此:

function remove_elements(&$array) {
  // remove elements
  return $number_removed;
}
如果您在函数中创建了一个复杂的结构,您可能希望返回对它的引用,而不是它的副本。但这是一个相当边缘化的案例,因为PHP使用写时复制(即在修改之前不会复制),但存在一些有效的用例

在编写类的成员函数时,通过引用返回更有意义。您可以返回对数据成员的引用,但这也会破坏封装


最后,值得注意的是,默认情况下,所有对象都是通过引用传递和返回的。其他所有内容都是通过值传递和返回的。

通过引用传递:函数如


默认情况下,php5中的对象通过引用传递。(有关正确的说明,请参阅)

通过引用传递参数已得到回答

作为按引用返回值的(现实世界)示例,选择方法返回对与其自身调用上下文相同对象的引用的任意位置($this)。如果返回值是副本/克隆,则此操作将不起作用(如预期的那样)

例如

这会打印出
foo=1bar=2
,我想这是人们所期望的结果,这里没有什么意外。 如果该方法按值返回$this,它将不再工作。您可以通过强制php返回副本来测试这一点。此行使用

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相同:((Fluent界面就像我所知道的那样链接)

图像您有一个带有加载方法的流畅接口。加载接口替换或添加一些数据。在这里,通过引用值$success调用来确定加载是否成功可能很有用

通过引用返回:
以一些具有行列表的数据库对象为例。行数指向所有对象的右侧数据(平行)。如果返回nr.并将其传递给下一个对象,则可以跳过一个对象中的行,也可以跳过其他对象中的行。始终有一组有效的对象。

对于一半的问题回答得很好,尽管这没有给出有关通过引用返回的信息。仍然没有:p function&foo():这是PHP手册资料:1.;2.:默认情况下,php5中的对象是通过引用传递的。“这是错误的。”对象"不是值,无法传递。
new MyClass
的计算结果为对象引用。对象引用可以通过值或引用传递,就像所有其他类型一样。对于所有类型的变量,
&
参数通过引用传递,否则通过值传递。如上所述,参数中没有
&
,因此s按值传递。如果需要,对象引用也可以按引用传递。newacct:pedantic在此上下文中,但同意,此处没有按引用传递。它是按值传递和返回的。谢谢。(addObject)它通过引用返回。默认情况下,它是一个对象。这是一个很好的示例,因为您可以在更改列表中的对象时更改返回的对象。否,您正在使用对象引用(在PHP5中,对象不是值),并按值返回它。此外,通过引用传递
$someData
也是无用的,因为您没有更改它。
foo=1 bar=n/a
    public function addObject(array &$someData){
$newObj = Fabric::create($someData);
$this->listOfObj[] = $newObj;
return $newObj;
}

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