七、PHP知识核心 函数

基本使用 函数定义形式 函数调用形式 函数调用流程分析 开始调用:实际参数传数据给形式参数 程序执行流程进入到函数中(一个独立的运行空间),跟全局执行空间是隔离的 按常规的程序逻辑执行函数中的代码 如果碰到return语句,则终止函数的执行,跳回函数开始调用的位置; 如果执行到函数的最后位置,也同样跳回函数开始调用的位置 函数参数 形式参数,形参,parameter 实际参数,实参,arguement 参数的默认值 形式:形式参数上给其赋值(就是默认值) 要求: 默认值不能是对象或资源类型; 默认值只能是常量表达式,或常量,不能是变量 默认值参数必须放在非默认值参数的右边 调用函数的时候,对应有默认值的参数可以给值,也可以不给值 如果给值,则该对应形式参数使用给定的值 如果不给值,则该对应形式参数使用默认 参数传值问题 默认情况下,参数传值采用的是“值传递”的方式进行传值。 可以在形式参数的前面使用“&”符号,来达到“引用传递”的传值方式。 注意1:如果是引用传值,则实参只能是一个“变量”——也即变量跟变量之间才有引用传值方式问题。 注意2:引用传值的形参变量,在函数内部改变该形参变量的值,则对应实参变量的值也就改变。 参数的数量问题 常规:实际参数数量跟形式参数一致; 实际参数数量多于形式参数,不报错(很多其他语言是报错的); 实际参数数量少于形式参数,则分为: 实际参数数量少于形式参数的非默认参数数量,则报错 实际参数数量不少于形式参数的非默认参数数量,则不报错,不够部分,使用默认参数值 不定参数数量的情形: 类似:var_dump()可以传递不定个数的参数,如何做实现? 定义的时候不定义形式参数 在函数内部,使用func_get_args()获取所有传递过来的实际参数值,结果是一个数组 在函数内部,使用func_get_arg(n)获得第n个参数(n从0开始) 在函数内部,使用func_num_args()获得所有实际参数的个数 函数的返回值 在函数中,使用return语句后面跟一个数据(直接数据或变量数据或常量数据),就可以返回该数据(值)。 通常情况下,函数返回的数据都是以“值传递”的形式返回。 我们还可以使用强制引用返回(&)的形式来定义一个函数的返回值的返回方式,做法: 定义函数使用&符号:function &f1(){....} 调用函数使用&符号:$v1 = &f1(); 要求:return语句返回的值必须是变量值(即变量)。 举例:函数中的一个静态变量的值,使用引用返回,则外部也可以修改其值。 函数的其他形式 可变函数:一个变量名后面带括号,则会被识别为可变函数:找到与该变量的值同名的函数并执行之。 匿名函数:没有名字的一个函数,可将其赋值给一个变量,然后该变量后面加括号就可以调用该函数 $f1 = function($p1, $p2) { ........ } call_user_func_array($f1, array(1, 2)); 或纯粹是一个没有名字的函数,且直接当作其他函数的参数(即改函数的参数是一个函数)。 call_user_func_array( function($p1, $p2) { ........ } , array(1, 2) ) 这种当作其他函数参数的函数,通常称为“callable”(可调函数),或“callback”(回调函数)。 变量作用域 局部作用域(局部变量) 静态局部变量:静态变量只能赋值为一个直接的标量值,不能是计算值,或另一个变量值。 全局作用域(全局变量) 超全局作用域(超全局变量) 局部访问全局变量 使用$GLOBALS超全局数组 global关键字:本质是设定一个局部变量来引用某个全局变量,删掉该局部变量,全局变量仍然存在 $GLOBALS数组中的元素跟全局变量是一一对应关系。删掉(unset)一个,另一个也就没有了 使用$GLOBALS数组的一个新元素,则可以“创造”全局变量,如:$GLOBALS['vvv'] = 1; #假设之前没有$vvv这个全局变量,则这一行之后就有了。 全局访问局部 通过引用传递的方式向形参传递一个引用实参变量 使用函数的引用返回形式 函数中使用global关键字来首次引用一个全局变量,则函数结束后在全局范围就可以使用该变量了 有关函数的系统函数 function_exists() func_get_arg() func_get_args() func_num_args() 函数相关编程思想 递归思想 递推思想(迭代思想) 常用内部函数: 字符串函数: 输出与格式化:echo , print, printf, print_r, var_dump. 字符串去除与填充:trim, ltrim, rtrim, str_pad 字符串连接与分割:implode, join, explode, str_split 字符串截取:substr, strchr, strrchr, 字符串替换:str_replace, substr_replace 字符串长度与位置: strlen, strpos, strrpos, 字符转换:strtolower, strtoupper, lcfirst, ucfirst, ucwords 特殊字符处理:nl2br, addslashes, htmlspecialchars, htmlspecialchars_decode, 时间函数: time, microtime, mktime, date, idate, strtotime, date_add, date_diff, date_default_timezone_set, date_default_timezone_get 数学函数: max, min, round, ceil, floor, abs, sqrt, pow, round, rand 数组 数组基础 定义(多种形式) 取值 赋值(多种形式) 数组分类 从键值关系来分 关联数组 索引数组 从数组层次来分 一维数组 多维数组 混合数组 “维”的本质 数组遍历 foreach基本语法 数组指针操作与遍历原理 foreach遍历流程图 for+next遍历数组 while+each()+list()遍历数组 foreach遍历的细节探讨: foreach也是正常的循环语法结构,可以有break和continue等操作。 遍历过程中值变量默认的传值方式是值传递。 遍历过程中值变量可以人为设定为引用传递:foreach($arr as $key => &$value){ ... } foreach默认是原数组上进行遍历。但如果在遍历过程中对数组进行了某种修改或某种指针性操作,则会复制数组后在复制的数组上继续遍历循环。 foreach中如果值变量是引用传递,则无论如何都是在原数组上进行。 数组函数 指针操作函数: current, key, next, prev, reset, end, each 单元操作函数: array_pop,array_push, array_shift, array_unshift, array_slice, array_splice 排序函数: sort, asort, ksort, usort, rsort, arsort , krsort , shuffle, 查找函数: in_array, array_key_exists, array_search 其他函数: count, array_reverse, array_merge, array_sum, array_keys, array_values,array_map, array_walk, range 数组排序算法 冒泡排序 选择排序 插入排序 快速排序 数组查找算法 顺序查找 二分查找

转载于:https://my.oschina.net/fenuangcd/blog/697964

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值