1.1 什么是函数呢?
将一些重复的过程嵌入在一个命名的代码块中,然后在必要的时候调用这个名.这个代码块称为函数(function);
2.1.1创建函数:
php提供了一个预定义的语法模式来定义一个函数,如下:
function function_name(paramenters){例如下面的函数:
function-body
}
function footer(){这样定义后可以在任何地方调用:
echo "<p><a href=\"http://www.phpno.com\">新疆PHPer交流论坛</a></p>";
}
<?php2.1.2 按值传递参数:
footer();
?>
向函数传递数据是常用的功能.例如要比较两个数的大小:
function Max($a,$b){在这里函数接受了两个参数,$a和$b,可以这样调用函数:
$max=$a>$b?$a:$b; //这里用到一个三元运算,即当$a>$b时,$max=$a,否则$max=$b
}
Max(6,8);
也可以向函数传递变量:
2.1.2-L1
<?php这中方式称为按值传递或者传值(passing by value),这样的话,函数范围内对这些值的任何改变都在函数外部被忽落掉.2.1.3 按引用传递参数:
$a=6;
$b=8;
Max($a,$b);
?>
这种方式区别与2.1.2的方式,它可以让函数内部对参数的改变在外部得到体现,按引用传递参数(也称传引用)要在参数前面加上&符号.
例2.1.3-L1
<?php输出的应该是:
$a=2006;
$b=2007;
function cont(&$a,$b){
$a+=$b;
$b+=$a;
}
cont($a,$b);
echo "a:".$a."<br/>";
echo "b:".$b."<br/>";
?>
a的值是:4013
b的值是:2007
此时$a已经变为4013,而b并没有变化.
2.1.4 默认参数值:
给函数的参数设置一个默认值后,如果在没有提供这个参数的时候,函数就会把这个默认值赋值给该参数.
<?php输出为:2006
$a=2007;
function cont($a,$b=2006){
echo $b;
}
cont($a);
?>
给定参数默认值的时候,注意必须是常数表达式,而不能指定函数调用或变量等非常量值.
2.1.5 可选参数:
你也可以设置某参数为可选(optional)参数,不过这个参数要放在参数列的最后一位,并且要设置默认值为空:
function sum($a,$b,$c=''){如果你有多个参数的时候,也可以选择性的传递参数:
$sum=$a+$b+$c;
echo $sum;
}
function sum($a,$b='',$c=''){调用sum的时候可以只传递$a和$c:
echo $a+$b+$c;
}
sum(2046,'',2008);2.1.6 从函数返回值
一般情况下,脚本的结果可能取决与函数的结果,也可能取决与在执行函数时对数据的修行,而由于变量作用域的差异,函数体无法很容易的将信息传递给调用者,这个时候就可以通过
return关键字向调用者传递数据.
1.return()
return()语句可以向函数调用者返回任意的数值,将程序控制权返回到调用者的作用域.如果return()在全局作用域内调用,将终止脚本的执行.
返回刚才的sum()函数,计算的结果暂时不能显示给用户,而是将这个值返回给调用块:
function sum($a,$b,$c=''){也可以不需要赋值给$sum:
$sum=$a+$b+$c;
return $sum;
}
function sum($a,$b,$c=''){2.返回多个值
return $a+$b+$c;
}
这里以构造函数list()为例说明返回多个值:
例:2.1.6-L1
<?php注解: micrtime()函数是返回当前 UNIX 时间戳和微秒数,返回格式为“msec sec”的字符串,其中 sec 是当前的 Unix 时间戳,msec 是微秒部分。字符串的两部分都是以秒为单位返回的。
function getmicrotime(){
return explode(" ",microtime());
}
list($msec, $sec)=getmicrotime();
echo $msec."<br/>";
echo $sec."<br/>";
?>
explode()是使用一个字符串分割另一个字符串,这里用来分割micrtime()得到的两个值组成的一个字符串.
调用getmicrotime()函数后,此时返回的是两个值,$msec和$sec;
这个函数可以丰富一下用来做检测程序运行时间
<?php
function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec); //注意这里只是返回一个两个数值的和
}
$time_start = getmicrotime();
for($i=0;$i<1000;$i++){
echo $i;
}
$time_end = getmicrotime();
echo "\n\n[执行时间: " . ($time_end - $time_start) . "秒]\n\n";
?>