💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 函数 * 为完成某一功能的程序的集合。 * 一个函数在50-100行内比较合理 * 函数可以没有返回值 **系统函数列表** ~~~ echo '<pre>'; print_r(get_defined_functions()); ~~~ ### 概念: 1. 提高的代码的复用性 2. 利于模块化编程 ### 文件引入: require require_once include include_once ~~~ //3种引用方法 require 'a.php'; require ('a.php'); $ifile='a.php'; require $ifile; ~~~ **区别:** 1. require,require_once 出现错误,直接退出; 2. require会重复引入; 3. once会判断是否引入过,不会重复引入,节省开销; 5. include 如果文件出错,虽然报错,但程序会继续执行 **推荐使用require和require_once** #### 引入文件流程 * 引入的文件是先执行完毕后,把结果返回给需要的页面 * 成功引入一个文件,默认会返回1 * 被引入文件中,含有return,会在需要的页面返回这个值 * 被引入文件中含有return ,引入过程终止,后面的内容不再执行,继续执行主文件内容 ~~~ //a.php中 return 100; //index.php中 $a=require 'a.php'; echo $a; //100 ~~~ 项目开发: 一般用绝对路径引用 a.获取网站根目录 ~~~ define('ROOT_PATH',dirname(__DIR__)); ~~~ **模板中使用循环** ~~~ <?php foreach($nav as $value):?> <h1><?php echo $value ?></h1> <?php endforeach;?> ~~~ ### 函数理解 函数可以没有返回值 return返回值返回给调用者 调用一个函数,程序会开辟一个新栈 ![](https://box.kancloud.cn/d799c929177d9453a4bf2bbf21814039_664x455.png) ### 函数的递归 ![](https://box.kancloud.cn/c706c27e18edb7020ee05070696161ed_716x254.png) ### 函数细节 1. 函数的参数列表可以多个 2. 函数的参数可以是任意类型 3. 函数名和自定义变量一样,只能是字母和下划线 4. 函数中定义的变量是局部的,再函数外不生效 5. 函数中使用已经定义好的全局变量,使用global 6. 使用global的时候,如果外面没有$a,则会自动创建一个全局$a变量 7. 函数静态变量:一般在函数中定义,存放在数据的静态区,只会被初始化一次 8. 函数的默认值:传参的时候指定一个值,实例化的时候,如果不填写,会用默认值,否则覆盖默认值 9. 默认情况下,函数按值传递,如果希望函数的参数修改外部的变量,必须通过引用传递& 10. 内部函数:在函数内部声明一个函数,在外部无法调用,类似JS闭包。只有外部函数执行后,才能使用内部函数 11. 可变函数:如果一个变量名后面有圆括号,PHP会自动寻找同名函数,并执行。可以用在回调函数中。 12. 函数的参数可以是函数: 13. 匿名函数:没有名字的函数,通常作为回调函数用 1. 回调函数:一个函数内部又调用另一个函数,称为回调函数。 ~~~ func_get_args(); //参数列表 func_get_arg(3); func_num_agrs();//参数个数 ~~~ static用法: ~~~ function abc(){ static $a=0; //第二次这句话不执行 $a++; echo $a; } abc(); //1 abc(); //2 ~~~ global的用法: ~~~ $a=100; function abc(){ global $a; //等价于 $a=&$GLOBALS['a']; $a=123; //外面的$a也会改变 return $a; } abc(); echo $a; ~~~ ![](https://box.kancloud.cn/734b66062a6bca19012eb274ef9330e3_281x194.png) 按引用传递: ~~~ $a=100; function abc(&$b){ $b=123; echo $b; } abc($a); echo $a; //123 ~~~ ![](https://box.kancloud.cn/850fb41dd0996718dc9fb03e05be9f7e_535x178.png) 函数中的unset ~~~ $a=100; function abc(&$b,&$a){ unset($b); //unset是释放变量,干掉的是$b这个变量,但数据区的值没有变化 } abc(); echo $a; //100 ~~~ 内部函数: ~~~ function calculator($n1,$n2){ function getSum($n1,$n2){ return $n1+$n2; } function getSub($n1,$n2){ return $n1-$n2; } return getSum($n1,$n2)+getSub($n1,$n2); } $res=calculator(3,9); getSum(2,3); //上面调用过一次,内部函数也会被运行,所以这里可以用 ~~~ 可变函数: ~~~ function box(){ echo 'abc'; } $a='box'; $a(); ~~~ 函数的参数函数: ~~~ function box(){ $a=func_num_args();//参数的总个数 echo $a; $b=func_get_args();//获取参数列表 echo "<pre>"; print_r($b); $c=func_get_arg(2);//返回第几个参数的值 echo $c; } ~~~ 匿名函数: 用法1: ~~~ $box=function($a,$b){ return $a+$b; }; echo $box(99,33); ~~~ 用法2:匿名函数作为回调函数,只能用一次,用完即结束 ~~~ function box($a,$b,$f){ $sum=$a+$b; echo $res=$f($sum); }; box(4,3,function($val){ return $val*2; }); ~~~ ### 变量作用域: 主要体现在函数中 局部作用域:函数内部有效 全局作用域:函数外可以用,函数内也可用通过global用 超全局作用域:在一个脚本中,所有地方都可以用,PHP预定义的变量 超全局变量: ~~~ $GLOBALS //数组,包含所有变量,预定义的和自己定义的 $SERVER $_GET $_POST $_FILES $_COOKIE $_SESSION $_REQUEST $_ENV ~~~ ### 常用的系统函数