(28)
函数的定义:
1、函数是一个被命名的2、独立的代码段
3、它执行特定的任务(功能)
4、并可以给调用它的程序返回一个值
(28)PHP中的函数声明
函数的优点:
1. 提高程序的重用性
2. 提高程序的可维护性
3.可以提高软件的开发效率
4.提高软件的可靠性
5.控制程序的复杂性
函数的声明
1、 function 函数名(){
函数体
}
2、 function 函数名(参数1, 参数2, 参数.... ) //参数列表,如果有多个就作用,分开
{
函数体
}
3、 function 函数名(){
函数体
返回值;
}
4、 function 函数体(参数列表){
函数体
返回值
}
一、函数必须调用才能执行,可以在声明之前调用,也可以在函数声明之后调用(在C语言只能在声明之后调用,如果在之前调用要有一个头定义)其他语言,只要在脚本能找到这个函数,在其他地方调用都是一样的。
二、函数名命名和变量一样, aaa bbb ccc aaaBbbCcc, 函数名称一定要有意义
三、函数在声明时不能重名,也不能跟系统函数重名
四、可以通过向函数传递参数,改变函数的行为(在参数里面声明的变量可以在调用时赋值,而在函数里面声明的变量只有手工的去赋值)
1、 形参:就在声明函数时,声明的参数,参数就是变量,多个参数用,分开
2、 实参: 调用函数时传给形参数值(数据,也可以变量)
形参是声明,实参是给形参调用时赋值的
参数不易定义太多,因为都是一一对应容易乱套。
参数跟返回值一样都可以有可以没有。
五、如果没有返回值则称为过程
六、通过使用return 语句返回数据,例如
sum(10, 5);
function sum($x, $y){
$sum=0;
$sum=$x*$x+$y+$y
它不会有结果,因为它没有return,只是一个过程。
而
sum(10, 5);
function sum($x, $y){
$sum=0;
$sum=$x*$x+$y+$y;
return $sum;
这样就有结果了。
当然我们就可以调用了
echo sum(10, 5);//输出
echo '<br>'; //换行
echo sum(10,5)+100; //现在sum(10, 5)只相当于一个值,我们可以再加上一个值;
echo '<br>';
$sum=sum(3, 4);
echo $sum;
function sum($x, $y){
$sum=0;
$sum=$x*$x+$y+$y;
return $sum;
}
七、函数执行到return语句就结束,所以不要在这个语句后写代码,也可以使用return结束函数的执行,在PHP中不提示错误,但是没有意义,在其他语言例如java,会提示一个永远执行不到的错误。
/
echo table(10, 10, 800, "aaaa", "red");
echo table(5, 5, 500, "bbbb", "green");
echo table(2, 2, 200, "cccc", "blue");
function table($row, $col, $width, $tableName, $color){ //标记表格,可以有多个声明变量,用“,”隔开
$str='<table border=1 width="'.$width.'" align="center">'; //将所有的表格都连接到一个字符串中
$str.='<caption><h1>'.$tableName.'</h1></caption>';//里面是表名。
for($i=0; $i<$row; $i++){
if($i%2==0)
$bg="#ffffff";
else
$bg=$color;
$str.='<tr bgColor="'.$bg.'">';
for($j=0; $j<$col;$j++ ){
$str.='<td>'.($i*$row+$j).'</td>';
}
$str.='</tr>';
}
$str.='</table>';
return $str;
}
函数:
function 出差(谁, 目的地, 联系人,交通){
'''''''
return 出差的结果
}
领导2=出差(张三,上海, 王五, 飞机);
领导4=出差(李四, 大连, 赵六, 火车);
函数名的作用:
1. 调用函数,开始执行函数
2. 通过函数名后面的参数可以向函数中传递数据
3. 函数名就是返回的值
(29)
PHP的变量的范围
局部变量: 在函数中声明的变量就是局部变量,只能在自己的函数内部使用。
全局变量: 在函数外声明,在变量声明以后的,直到整个脚本结束前都可以使用,包括在函数中和{}中都可使用
PHP的变量分不出 是声明还是使用, 因为它不像javascript,加上var就是声明,不加var就是使用。
一、 在PHP中使用全局变量 要通过global关键字将这个全局变量包括到函数中才能使用到,在global声明之后才是使用全局的变量
$a=10;
a
function demo(){
global $a; /*告诉程序$a是全局变量,否则会认为是再次声明$a,如果还有一个全局变量$b,可以写成global $a;
global $b;
或者global $a,$b; */
$a+=10;
echo $a." demo<br>";
}
function test(){
global $a;
$a+=5;
echo $a." test<br>";
}
echo $a."----<br>";
demo();
echo $a."!!!!<br>";
demo();
echo $a."@@@@@<br>";
test();
echo $a."#######<br>";
二、参数就是局部变量,这个局部变量可以调用 时去赋值。
$a=10;
function demo($a){
$a+=5;
}
function test($b){
$b+=10;
}
demo($a);
test($a);
echo $a; //结果为10,跟内部声明是一样的,不会影响到外部
三、PHP的静态变量
静态变量只能声明在函数中(类中),不能在全局声明
方法:使用static在变量前;
作用:一个变量可以在同一个函数在多次调用中同用。
1. 静态变量在静态代码段中保存
2. 一个函数多次调用之间共用,但只在第一次调用 函数时声明到内存,以后再调用用,就不再声明,而直接使用,可以间接地用它来显示程序调用次数。
*/
function test(){
static $a=0; //如果不加static,那么会输出12个1,加上static之后会输出1到12
$a++;
echo $a."<br>";
}
test();
test();
test();
test();
test();
test();
test();
test();
test();
test();
test();
test();
变量函数:如果一个变量后面有括号$var=hello $var(), 就将寻找与变量值同名的函数 hello();
function one($a, $b){
return $a+$b;
}
function two($a, $b){
return $a*$a+$b*$b;
}
function three($a, $b){
return $a*$a*$a+$b*$b*$b;
}
$var=one;
$var="two"; //字符串的形式
$var=three;
echo "结果:".$var(3, 4)."<br>"; //同一个输出结果,我们可以运用不同的函数来改变结果。
我们写的程序要告诉读者的东西:
1. 函数的功能------------决定是否使用这个函数,使别人读你程序的时候易懂
2. 函数的参数------------决定函数怎么调用 ---有几个参,传什么类型的值,。。。。
3. 函数的返回值----------调用后怎么处理这个函数,是直接使用还是参与运算?
PHP5给了我们2000多个函数。。。 都属于系统函数,都可以通过名称直接使用。
如果有这样一个功能,你自己也可以写出来,系统函数也有,那么要用哪一个呢?
一定要先使用系统函数,如果系统函数没有你想要的功能,再去自己定义函数,因为就算你的代码写的再好也不如系统函数效率高。
别的语言的调用方法只有一种,就是常规调用,一个函数有几个参数调用几个值就可以了。
但是PHP的调用方法有很多
1. 常规函数
bool copy ( string source, string dest ) //拷贝文件(原字符串,目标字符串)
2. 带有mixed , mixed表示可以传任何类型的数据
bool chown ( string filename, mixed user )
3. 带有&参数的函数, 表示引用赋值, 这个参数不能传值,只能传一个变量,然后函数将变量的值改变,我们在使用这个变量时,值也是变化的
bool arsort ( array &array [, int sort_flags] )
$arr=array(1, 9, 5, 8, 3, 4);
sort($arr);
print_r($arr); //1,3,4,5,8,9,
4.默认函数 带有[]的函数, 表示这个参数是可选的,如果你传值了就使用你传的值,如果没有传值则使用默认值
直接在声明函数时,就为参数给初值。
可选值和必须值, 必须从后向前设置
bool arsort ( array &array [, int sort_flags] ) //第一个()必传值,第二个[]是可选值
(1)、function demo($a, $b, $c){
echo "### $a ### $b ##### $c ########<br>";
}
demo(); //没有赋值,会警告提示缺少三个值。
(2)、function demo($a, $b, $c){
echo "### $a ### $b ##### $c ########<br>";
}
demo(1); //唯一一个值赋给第一个
(3)、function demo($a=1, $b=20, $c){
echo "### $a ### $b ##### $c ########<br>";
}
demo(8,9);//第三个值是必须赋值,仍然警告
(4)、function demo($a=1, $b=2, $c=3){
echo "### $a ### $b ##### $c ########<br>";
}
demo(7,8,9); //输出值7,8,9
5. 带有...的参数函数, ...表示可以传任意多个参数
int array_unshift ( array &array, mixed var [, mixed ...] )
function demo(){
$args=func_get_args();
{ echo count($args); //如果用count会输出所有参数的个数 9个 }
$sum=0;
for($i=0; $i<count($args); $i++){
$sum+=$args[$i]; //可以计算出所有参数的和
}
return $sum;
}
echo demo(1, 2, 3, 4, 5, 6, 7,8,9);
用下面函数一样可以实现
function demo(){
$sum=0;
for($i=0; $i<func_num_args(); $i++){ //用func_num_args输出参数个数
$sum+=func_get_arg($i); //可以求和
}
6.回调函数 带有callback, 就是调用这个函数时需要我们传一个函数进来(函数名,函数名字串)
array array_filter ( array input [, callback callback] )
function demo($x, $y){
return $x*$y;
}
function test($x, $y){
return $x*$x + $y*$y;
}
function sum($a, $b, $fun){ //将demo函数传入$fun,同时将$a,$b传入$x,$y
return $a+$b+$fun($a,$b);
}
echo sum(2, 3, demo);
echo sum(2, 4, "test");
$a=array(1, 2, -3,4,-5,6,-7,8,9);
print_r(array_filter($a, demo)); //可以选取正数或者倍数之类的
function demo($n){
if($n%2== 0)
return true;
else
return false;
}