« 上一篇下一篇 »

参数的引用传递和值传递

如果希望编写一个名为increment()的函数增加一个变量的值,我们可能会按如下方式编写这个函数:Function increment($value,$amount =1)[ $value = $value +$amount;]这段代码是没有用的。下面测试代码的输出结果是“10”。$value =10;Increment($value); echo $value;

        如果希望编写一个名为increment()的函数来增加一个变量的值,我们可能会按如下方式编写这个函数:

        Function increment($value,$amount =1)[

        $value = $value +$amount;

        ]

       这段代码是没有用的。下面测试代码的输出结果是“10”。

       $value =10;

       Increment($value);

      echo  $value;

      $value的内容没有被修改。这要归因于作用域规则。这段代码将创建一个名为$value的变量,它的值是10.然后调用函数increment()。当函数被调用时,它内部的变量$value被创建。它的值加上1,所以$value在函数内部的值为11,直到函数结束,接下来我们返回到调用它的代码。在这段代码中,变量$value是一个不同的变量,具有全局域,所以它的值没有变。

        解决这个问题的一个方法就是将函数内的$value声明为全局变量,但这意味着为了使用这个函数,要进行变量运算的变量需要被命名为$value。

       还有一个方法是使用引用传递。这里,在参数被传递给函数的时候,函数不会在创建一个新变量,而是函数获得一个原来变量的引用。这个引用有一个变量名称,它以美元符号开始。可以像另一个变量那样使用它。其区别在于它不是获得变量本身的值,而是指向原来的值。任何对该引用的修改都会影响到原始变量值。
可以通过在函数定义的参数名前加一个地址符(&)来指定参数的引用传递。在函数调用处不用修改。

       前面的increment()的例子中就可以修改为引用传递参数,这样它就可以正常工作了。

       function increment(&$value,$amount =)[$value = $value+$amount;

        ]

       现在,我们有了一个可运行的函数,而且可以任意给想要进行增量运算的变量命名。就像前面提到过的,在函数的内外使用同样的名称会引起混淆,所以我们给主脚本变量一个新的名称。如下所示的测试代码在调用increment()之前显示10,调用之后会显示11.

       $a =10;

      echo $a.’<br />’;

      increment($a);

      echo $a.’<br />;

« 上一篇下一篇 »