PHP 变量是通过值还是通过引用传递的?

PHP 变量是按值传递还是按引用传递?


答案 1

根据PHP文档,它是按价值计算的。

默认情况下,函数参数按值传递(因此,如果函数内参数的值发生更改,则不会在函数外部更改)。若要允许函数修改其参数,必须通过引用传递这些参数。

若要始终通过引用传递函数的参数,请在函数定义中的参数名称前面附加一个与号 (&)。

<?php
function add_some_extra(&$string)
{
    $string .= 'and something extra.';
}

$str = 'This is a string, ';
add_some_extra($str);
echo $str;    // outputs 'This is a string, and something extra.'
?>

答案 2

在 PHP 中,默认情况下,对象作为对新对象的引用传递。

请参阅此示例:

class X {
  var $abc = 10; 
}

class Y {

  var $abc = 20; 
  function changeValue($obj)
  {
   $obj->abc = 30;
  }
}

$x = new X();
$y = new Y();

echo $x->abc; //outputs 10
$y->changeValue($x);
echo $x->abc; //outputs 30

现在看到这个:

class X {
  var $abc = 10; 
}

class Y {

  var $abc = 20; 
  function changeValue($obj)
  {
    $obj = new Y();
  }
}

$x = new X();
$y = new Y();

echo $x->abc; //outputs 10
$y->changeValue($x);
echo $x->abc; //outputs 10 not 20 same as java does.

现在看到这个:

class X {
  var $abc = 10; 
}

class Y {

  var $abc = 20; 
  function changeValue(&$obj)
  {
    $obj = new Y();
  }
}

$x = new X();
$y = new Y();

echo $x->abc; //outputs 10
$y->changeValue($x);
echo $x->abc; //outputs 20 not possible in java.

我希望你能理解这一点。


推荐