函数含义php
函数结构java
function 函数名 () { //代码块 }
函数名定义规则数组
[a-zA-Z_\x7f-\xff]
[a-zA-Z0-9_\x7f-\xff]
函数的返回值函数
PHP
并无在函数声明的时候显示函数是否有返回值,若是函数内部使用了return
即表示有返回值,反之则表示没有返回值,返回类型能够为对象、数组、字符串等。函数变量code
//局部变量 //局部动态变量:变量只在函数内部执行,执行完毕则被销毁; //局部静态变量:使用static修饰,执行完毕不被销毁; //注:函数内部定义的变量,为局部变量,函数外部不能访问。 function func() { $a = 3; //局部动态变量 static $b = 34; //局部静态变量 } //全局变量 //在函数外部定义的变量,称为全局变量。在函数内部使用全局变量的时候,不能和其余语言同样直接使用,有两种使用方法: //(1)用global关键字进行声明后使用 $a = 3; function func() { global $a; echo $a; } //(2)使用超全局变量数组$GLOBALS直接访问 $a = 3; function func() { echo $GLOBALS['a']; }
函数的参数对象
值传递和引用传递递归
//值传递:当一个变量的值赋予给另一个变量的时候,改变其中一个变量的值,将不会影响到另一个变量的值 //引用传递:新变量指向了原始变量,改动新的变量将影响到原始变量,反之亦然。(只有有名字的变量才能引用传递,好比表达式就不能够) //注:在函数中传递参数的类型为对象时,即便不加&,也是引用传递,由于对象名对应的是该对象的引用地址。 $a = 4; function func1($c) //值传递 { $c = 7; } func1($a); echo $a, "\n"; //4,函数没有改变$a的值 function func2(&$d) //引用传递 { $d = 7; } func2($a); echo $a, "\n"; //7,函数改变了$a的值
参数默认值作用域
//若是$a和$b没有默认值,调用该函数的时候必须传值,不然会报错,若是有默认值,能够不传参数 function func($a = 3, $b = 5) { echo "a的值为{$a}, b的值为{$b}\n"; } func();
可变参数列表开发
/* *在函数定义时,形参能够省略不写,在函数内部能够经过系统方法获取传递进行的参数数组。 *func_num_args():传入函数实参的个数 *func_get_args():传入函数实参列表(数组形式) *func_get_arg(index):传人函数具体位置的实参 */ function fun6() { echo func_num_args(), "\n"; //3 print_r(func_get_args()); //数组 echo func_get_arg(0); //10 } fun6(10, 11, 12);
传参类型限定字符串
//函数定义时,能够给参数限定类型,共三种类型:array,object,callback function func(array $a) //实参必须为数组类型 { print_r($a); } //func(1); //会报错 func([1, 2, 3]);
复杂函数
可变函数
//将函数的名字赋值给变量,经过变量去调用函数,让函数的调用更具多样性 /* * is_callable(函数):判断函数可否被调用 * function_exists(函数):判断函数是否存在 */ function func() { echo 'hello, world', "\n"; } $fun = 'func'; if (is_callable($fun)){ //判断是否能调用 echo '能调用', "\n"; $fun(); } if (function_exists($fun)){ echo '能调用', "\n"; $fun(); }
函数的嵌套
/* * php全部定义的函数,做用域都是全局的 * * 和其余语言好比java相比,php不存在内置函数,意思就是说bar()不是foo()的内置函数, * 二者没有区别,做用域都是全局的,在bar()函数内不能调用foo()中声明的变量,可是bar() * 函数必须在foo()调用以后才会被定义,才能被调用 * */ function foo() { $a = 'hello, world'; function bar() { /* 不能调用变量$a */ echo 'bar()函数被调用'; } /* 内部能够调用bar(),由于其已经被定义 */ //bar(); } /* 如今不能调用bar(),由于其尚未被定义 */ foo(); /* 如今能够调用bar(),由于foo()调用以后,bar()已经被定义 */ bar();
递归调用:函数调用本身自己,递归里面须要有跳出递归的判断条件
匿名函数
/* * 匿名函数 * 函数没有指定名称,称为匿名函数 * 经过将函数赋给变量,经过变量来实现调用函数 */ $say = function($str) { echo 'hello, world'; }; $say('aaa');