PHP变量是按值还是通过引用消失了?

PHP变量是按值还是通过引用消失了?

0
2019-05-03 19:04:50
资源 分享
答案: 6

似乎很多人偶然感到困惑,事情被传递给功能,以及参考建议的内容。 对象变量仍然按值消失,它只是PHP5上的值是一个参考照顾。 作为证据:

<?php
class Holder {
    private $value;

    public function __construct($value) {
        $this->value = $value;
    }

    public function getValue() {
        return $this->value;
    }
}

function swap($x, $y) {
    $tmp = $x;
    $x = $y;
    $y = $tmp;
}

$a = new Holder('a');
$b = new Holder('b');
swap($a, $b);

echo $a->getValue() . ", " . $b->getValue() . "\n";

输出:

a, b

对于通过引用传递方法,我们可以更改客户看到的变量。 显然代码结束了。 我们需要将交换函数转换为:

<?php
function swap(&$x, &$y) {
    $tmp = $x;
    $x = $y;
    $y = $tmp;
}

$a = new Holder('a');
$b = new Holder('b');
swap($a, $b);

echo $a->getValue() . ", " . $b->getValue() . "\n";

输出:

b, a

为了参考。

0
2019-05-22 14:11:23
资源

取决于变化,4是按值,5是参考。

0
2019-05-07 19:37:04
资源

http://www.php.net/manual/en/migration5.oop.php

在PHP 5中有一个新的对象模型。 PHP对事物的处理实际上已经完全修改,允许更好的性能和更多的属性。 在以前的PHP变体中,事物像原始种类一样被处理(例如整数和字符串)。 这种方法的缺点是语义上整个对象在指定变量时被复制,或者作为参数传递给方法。 在新策略中,事物是通过照顾来引用的,也不是通过值来引用的(人们可以考虑将其作为对象的标识符)。

0
2019-05-07 19:04:40
资源

具有原始种类的变量在PHP5中消失了。 有东西的变量通过引用而消失。 从2006年的Linux Journal那里得到了相当有趣的报道,其中陈述了这个以及4和5之间的各种其他OO区别。

http://www.linuxjournal.com/article/9170

0
2019-05-07 19:01:21
资源

它是根据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.'
?>
0
2019-05-07 16:57:38
资源

PHP变量由值指定,按值传递给要素,并且当包含/表示事物通过引用消失时。 您可以通过引用来强制变量使用&

由值/引用实例分配:

$var1 = "test";
$var2 = $var1;
$var2 = "new test";
$var3 = &$var2;
$var3 = "final test";

print ("var1: $var1, var2: $var2, var3: $var3);

肯定会有结果

var1:检查,var2:最后检查,var3:最后检查

通过值/参考例子传递:

$var1 = "foo";
$var2 = "bar";

changeThem($var1, $var2);

print "var1: $var1, var2: $var2";

function changeThem($var1, &$var2){
    $var1 = "FOO";
    $var2 = "BAR";
}

肯定会导致:

var1:foo,var2 BAR

对象变量以参考例子为准:

class Foo{
    public $var1;

    function __construct(){
        $this->var1 = "foo";
    }

    public function printFoo(){
        print $this->var1;
    }
}


$foo = new Foo();

changeFoo($foo);

$foo->printFoo();

function changeFoo($foo){
    $foo->var1 = "FOO";
}

肯定会导致:

FOO

(最后一个例子可能会好得多......)

0
2019-05-07 16:42:34
资源