函数是什么:
函数(function)是一段完成指定任务的已命名代码块。函数可以遵照给它的一组值或参数完成特定的任务,并且可能返回一个值。(比如循环输出10行10列的表格,或者N行N列的表格)
PHP中函数分为两种:
1、自定义函数
(比如循环输出10行10列的表格,或者N行N列的表格)
2、系统函数
(比如var_dump()、round()、floor()、ceil()等等)
自定义函数
1.自定义函数的格式
function 函数名([参数列表])
{
函数体;
}
2.函数名的命名规则
字母、数字、下划线,不能以数字开始;不能是关键字,不能与已存在的函数重名!
函数名不区分大小写
3.函数的调用
函数名([参数列表])
注意:函数的调用不分先后!!!!
//小提示:在PHP中,只要以$符开始,就是变量;只要加()就是调用函数
函数的参数
形参
函数定义时写的参数叫形参
形参可以有默认值,默认值必须是常量表达式,不能是诸如变量、或者函数调用等
有默认值的形参应该写在形参列表的右边,不然形同虚设
实参
调用函数时传的参数叫实参
实参的传递要与形参一一对应,个数最好是一样的,不能少(形参没有默认值的时候),也不要多
函数的返回值
使用return语句可以让函数返回一个值
1、没有return语句的函数,默认返回null
2、return语句会立即终止函数的运行,函数中的后续代码不执行
function_exists检测函数是否存在
变量的作用域 —— 能够有效作用的区域
全局变量
1、在函数范围之外定义的变量叫全局变量(全局的按字面意思来说,到处都可以访问,比如函数内,C语或者Javascript言确实是的),但是,在PHP中,函数被看做一段独立的功能个体,它无法直接访问全局变量
2、在函数内想要访问全局变量
1.用关键字global将变量声明为全局的
2.通过超全局数组$GLOBALS['变量名']取下标的方式访问
这是一个特殊的变量,会在脚本运行时自动创建
局部变量
1、在函数内部定义的变量叫局部变量,该变量仅在当前函数的作用域内有效,函数调用完毕立即释放
2、在全局范围内访问局部变量
1.将局部的用global变为全局的(要在变量定义之前声明)
2.将变量当做返回值return出去
3、形参也是局部变量
静态变量
用关键字static声明静态变量
特性:静态变量只会声明一次,不会重复声明
想了解任何一个函数都需要从3个方面去分析:
功能 参数 返回值
我们写函数的时候对这3个部分也要描述清楚,怎么描述呢,注释:
参数
1、常规参数,PHP八大类型
2、伪类型参数 (语言参考-》类型-》本文档中使用的伪类型与变量)
mixed 说明一个参数可以接受多种不同的(但不一定是所有的)类型。
如:var_dump()
print_r()
number 说明一个参数可以是 integer 或者 float。
如:pow() 求次方数
callable 表示该参数需要传一个函数,还有个别名callback
如:call_user_func()
session_set_save_handler()
void 作为返回类型意味着函数的返回值是无用的;作为参数列表意味着函数不接受任何参数。
如:unset() 不能有返回值
time() 不接受参数
$... 表示一个函数可以接受任意个参数
如:var_dump();
(要求:自定义一个函数,将任意个参数相加并返回结果)
可变个数的参数列表
func_get_args() //返回一个数组,包含所有参数
func_num_args() //返回参数总数
func_get_arg(int) //接收一个数字参数,返回指定参数,从0开始数
函数参数的传递
1.值传递(常用)
2.引用传递
通过引用传递的参数,函数可以修改其参数的值(语言参考-》引用的解释-》引用传递)
注意:如果形参用'&$a'引用传递,调用函数时必须传变量,不能直接传值
函数的种类:
可变函数
如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它
回调函数
被当做参数传递的函数,叫回调函数
专门用来调用回调函数的函数:
call_user_func('函数名'[, 参数1, 参数2...])
匿名函数:
没有名字的函数;
通常作为回调函数传递
递归函数:
就是自己调用自己的函数
文件的包含:
可以使用自定义函数库,并且可以更好的实现代码重用!
include
include '文件路径';
include('文件路径');
require
require '文件路径';
require('文件路径');
区别:如果包含的文件不存在,include报warning警告级别的错误,后续代码继续执行;require报一个fatal error致命错误,后续代码不执行
include_once
require_once
用法同上面的include 和require ,区别也同上
include和include_once的区别
include:包含一次就执行一次;
include_once:不管包含多少次,都只会执行一次,通常用于包含有函数、或者常量等不能重复定义的文件