PHP 变量是通过值还是通过引用传递的?
2022-08-30 06:06:13
PHP 变量是按值传递还是按引用传递?
PHP 变量是按值传递还是按引用传递?
根据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.'
?>
在 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.
我希望你能理解这一点。