php 函数参数传递的方式传值传址
2012-08-27 16:07
423 查看
1、传值方式。缺省情况下,函数参数通过传值的方式传递,因此即使在函数内部改变参数的值,它并不会改变函数外部参数的值。
2、传址方式。传址时只需在函数调用时在参数的前面加上“&”号即可。将函数外部的值的内存地址传递给内部的参数,在函数内部的所有操作都会改变函数外部参数的值。所以希望函数修改外部参数的值,必须使用传址传址方式。
<?php
//定义一个函数
function f3($a){
$a++;
}
$x=1;
f3($x);
echo "x=$x";//传值方式调用函数
$x=1;
f3(&$x);
echo "x=$x";//传址方式调用函数
?>
<?php
function add_some_extra(&$string)
{
$string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo $str; // 输出'This is a string, and something extra.'
?>
<?php
/* 在PHP中,函数不需要在被调用之前定义,在调用后才进行定义也是允许的。
在少数情况下,函数在需要一定的判断条件下,才能被定义。这样函数的定义必须在函数被调用之前完成。 */
$makefoo = true;
bar(); /*你不能调用foo()函数,它在这里不存在。但是能够调用bar(),调用之后在后面进行定义即可。*/
if ($makefoo) {
function foo()
{
echo "foofoo";
}
}
if ($makefoo) foo(); /* 现在我们可以正常调用foo(),因为只有$makefoo为true和定义了foo()函数后,foo()函数才存在。 */
function bar()
{
echo "barbar";
}
?>
<?php
function foo()
{
function bar()
{
echo "I don't exist until foo() is called. ";
}
}
/* 这里不能调用bar(),因为它不存在。 */
foo();
/* 现在我们可以调用bar(),只有在调用foo()后,bar()才存在。 */
bar();
?>
为函数指定默认参数的值
<?php
function test_defaultargs($arg="default value"){
echo "参数值为:".$arg."<br>";
}
test_defaultargs();
test_defaultargs("new value");
?>
<?php
function makecoffee($type = "cappuccino")
{
return "Making a cup of $type. ";
}
echo makecoffee();
echo makecoffee("espresso");
?>
请注意当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,可能函数将不会按照预期的情况运行。
<?php
function makeyogurt($type = "acidophilus", $flavour)
{
return "Making a bowl of $type $flavour. ";
}
echo makeyogurt("raspberry"); // 这个例子将不会按照我们预期的情况运行。
?>
<?php
function makeyogurt($flavour, $type = "acidophilus")
{
return "Making a bowl of $type $flavour. ";
}
echo makeyogurt("raspberry"); // 这个例子的输出是:Making a bowl of acidophilus raspberry.
?>
函数名可变
<?php
function f1(){
echo "这是函数f1()。<br>";
}
function f2(){
echo "这是函数f2()。<br>";
}
$var1="f1";
$var1(); //调用函数f1()
$var1="f2";
$var1(); //调用函数f2()
//注意:调用可变函数名需要在变量前加$。
?>
<?php
function foo() {
echo "foofoo.<br>";
}
function bar($arg = '') {
echo "barbar'$arg'.<br>";
}
function echoit($string)
{
echo $string;
}
$func = 'foo';
$func(); // 调用foo()
$func = 'bar';
$func('test'); // 调用bar()
$func = 'echoit';
$func('test'); // 调用echoit()
?>
函数可变长度参数
<?php
//向函数传递数组
function takes_array($input)
{
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
?>
func_num_args() -- 返回传递给函数的参数的数量
<?php
function foo()
{
$numargs = func_num_args();
echo "Number of arguments: $numargs .'<br>'";
}
foo(1, 2, 3);
?>
func_get_arg() -- 从参数列表中返回一个参数值
<?php
function foo()
{
$numargs = func_num_args();
echo "Number of arguments: $numargs .'<br>'";
if ($numargs >= 2) {
echo "Second argument is: " . func_get_arg(1) ."<br>";
}
}
foo (1, 2, 3);
?>
func_get_args() -- 返回一个包含函数参数的数组
<?php
function foo()
{
$numargs = func_num_args();
echo "Number of arguments: $numargs .'<br>'";
if ($numargs >= 2) {
echo "Second argument is: " . func_get_arg(1) . "<br>";
}
$arg_list = func_get_args();
for ($i = 0; $i < $numargs; $i++) {
echo "Argument $i is: " . $arg_list[$i] . "<br>";
}
}
foo(1, 2, 3);
?>
相关文章推荐
- 小论PHP的函数参数传递方式
- 关于delphi 的函数调用和参数传递方式深入研究之疑惑
- 函数参数传递方式
- PHP页面间参数传递的四种方式
- 第二周实践项目(1)~C/C++语言中函数参数传递的三种方式
- 第二周项目- C/C++语言中函数参数传递的三种方式
- 第二周项目-c语言中函数参数传递的三种方式
- 函数参数传递方式详解
- 值传递和引用传递-----函数参数传递的两种方式
- Delphi 函数传递参数的不同方式
- PHP回调函数类型传递方式总结
- 第二周项目1-C/C++语言中函数参数传递的三种方式
- 第二周项目1-C/C++语言中函数参数传递的三种方式
- Delphi过程函数传递参数的几种方式
- PHP中获取函数调用时实际传递的参数信息
- 第2周、项目1—C++语言中函数参数传递的三种方式
- Java函数参数传递方式详解
- 第二周【项目1】 函数参数传递的三种方式
- php扩展开发:编写一个传递引用参数的函数
- PHP传递任意数量的函数参数