函数参数传递的方式有两种:
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);
- ?>
评论