一,自定义函数的概述
概念: 完成指定任务的功能代码块
格式:
function 函数名( 参数1, 参数2...)
{
函数体(语句)
return 返回值
}
函数名( 参数1, 参数2...);
作用
给一段代码起一个名字, 以后写名字 , 代码就会执行. 即调用. 通过名字 , 可以多次调用.
特点
1) 变量要先定义赋值才可以输出, 但函数的定义和调用不分先后顺序的 函数的定义代码, 会被提前放到内存.
2) 函数定义了, 不调用就不执行.
3) 函数名不区分大小写. 但推荐要一致.
4) 在同一个文件中不能出现相同名字的函数
二,变量作用域(范围)
由于函数的出现,导致变量的能见度(生命周期)不同. 共划分为:全局变量、局部变量、 静态变量
1). 全局变量: 在函数外定义变量
作用域 : 在整个php文件中都可以被使用的变量
<?php
//变量的作用域:全局变量
$a=10;//定义一个变量a值为10
$b=20;
//定义一个函数
function fun()
{
global $a; //尝试使用外部的全局变量a
echo $a; //输出变量a的值10
echo $b; //输出变量b的值,结果没有(因为没有使用global)
$a=100;
}
fun(); //调用函数fun
echo $a; //100
?>
2). 局部变量: 在函数中定义变量
作用域 : 只能在函数内部使用. 可以使用return 将值返回, 函数结束时, 会被自动销毁
<?php
//变量的作用域:局部变量
//定义一个函数
function fun()
{
$a=100; //函数内定义变量
echo $a; //将变量a的值返回
}
fun(); //调用函数fun
echo $a; //没有输出,在函数内定义的变量,在函数外是无法使用的
?>
3). 静态变量: 在函数中使用 static 定义变量
作用域 : 只能在函数内部使用. 函数结束时, 不被销毁. 函数下一次执行时还可以使用
<?php
function fun()
{
//在当前脚本中连续多次调用本函数,$i依然有效,里面的静态声明(初始化)只会调用一次。
static $i=1;
$i++;
echo $i."<br/>";
}
fun(); //2
fun(); //3
fun(); //4
?>
三,函数的参数
1). 按值传递参数(普通传值)
<?php
//假设函数的功能是求任意两个数的和. 如果求 4 与 7 的和. 这两个数就叫参数.
function xxoo($a, $b) // 小括号中称为 参数列表
{
echo '两个数的和是: '.($a+$b);
}
xxoo(4, 7);
/*
4, 7 是实际参数
$a, $b 是形式参数
函数调用时, 会把实参赋值给形参 $a = 4 $b = 7
*/
?>
2). 默认参数值
可以在定义函数时,将部分参数提前附上初始值,当被调用时没有给这参数传值,就会采用默认值,以保障函数正常使用. 要求任何默认参数必须放在任何非默认参数的右侧。
<?php
// 设置默认值
function xxoo($a = 3, $b = 8)
{
echo '两个数的和是: '.($a+$b);
}
xxoo( ); // 调用函数时, 没有实际参数, $a就是3, $b就是8
xxoo(2, 4); // 调用函数时, $a=2 $b=4
xxoo(7); // 调用函数时, $a=7 $b为默认值8
?>
3). 引用传递参数(引用传值)
使用&符来实现引用传递,就是将 实参 和 形参 建立引用关系
函数内容发生改变,会使当前参数也发生改变。
注意: 调用引用参数(实参)时,必须使用变量,不可以直接用值, 否则不能建立引用关系
<?php
function xxoo( &$a )
{
$a++;
}
$x = 5;
xxoo( $x ); // 相当于 $a = &$x; 函数操作$a, 就是操作了$x
echo $x; // 6
?>
4). 可变长度参数列表
func_get_args() //以数组的方式返回所有的参数信息
func_get_arg($index) //获取指定参数位置(index:从0开始的整数)的信息
func_num_args() //获取参数的个数
<?php
//可变长度参数列表
function dosum()
{
echo "获取实参的个数:".func_num_args()."<br/>";
echo "通过索引获取某个参数的值:".func_get_arg(4)."<br/>";
//以数组的方式返回所有的参数信息
var_dump(func_get_args());
}
dosum(10,20,50,60,300,100,20);
5). 可变数量的参数列表
// 第一种情况
//使用 ... 来访问变量参数, 包含 ... 的参数,会转换为指定参数变量的一个数组
function sum(...$nums) {
var_dump($nums);
}
sum(1, 2, 3, 4);
// 第二种情况
// 使用 ... 来传递参数 也可以使用 ... 语法来传递 array 做为参数到函数中
function add($a, $b) {
echo $a + $b;
}
add(...[1, 2])."\n";
$c = [1, 2];
add(...$c);
四,函数的返回值
1) return 后面可以是任何类型的值
2) 不写return, 或者只写return, 函数的返回值为 null
3) return 下面的语句不会被执行. 因为return 的意思是函数结束, 并且返回到调用这个函数的位置
function _return() {
retrun;
}
var_dump(_return());
五,可变函数
函数名 是个变量, 调用函数使用的不是直接的函数名,而是一个变量
<?php
function xxoo()
{
echo 'aaaaa';
}
$x = 'xxoo';
$x(); // 相当于调用了 xxoo()
?>
六,匿名函数
也叫闭包函数 允许指定一个没有名称的函数。通常把函数定义代码赋值给一个变量,通过变量来调用
<?php
$x = function(){
echo 'aaaaa';
};
$x();
//利用匿名函数获取全局变量值
$a = 100;
$z = function() use ($a){
echo $a; // 100
};
$z();
?>
七,回调函数
指调用函数的时候将另一个函数作为参数传递到调用的函数中,而不是传递一个普通的变量作为参数
使用回调函数是为了可以将一段自己定义的功能传到函数内部使用
<?php
function xxoo($var)
{
$var *= 2;
return $var;
}
function base($x)
{
for($i = 1; $i <= 5; $i++):
echo $x($i);
endfor;
}
base('xxoo'); // $x='xxoo'; $x() => xxoo()
?>
八,递归函数
函数内部可以调用其它函数. 递归函数可以看成 函数在内部调用自己.
函数自己调用自己, 会造成死循环. 必须满足某些条件后, 使它不会调用自己.
一般, 当参数满足某个条件时,就不调用自己
<?php
/* 该函数只作说明, 没有实际意义 */
function xxoo( $n )
{
echo $n;
if ($n > 1) { // 当参数大于1时, 调用自己
xxoo( $n-1 );
}
echo $n;
}
xxoo( 5 )
?>
九,引入文件 (文件包含)
把自定义的函数放入一个文件中. 然后把文件加载进来. 就可以使用那些函数了.
include 对于include,如果载入成功,有返回值,返回值为1;如果载入失败,则返回false.
include_once 加载文件, 多次书写只会加载一次, 从而避免了重复加载而报错
<?php
include '文件名';
include_once('文件名');
?>
require 对于require,如果载入成功,有返回值,返回值为1;如果载入失败,无返回值。
require_once 加载文件, 多次书写只会加载一次, 如果报错, 就不会往后执行
<?php
require '文件名';
require_once('文件名');
?>
注意:
include和require后面加不加括号对执行结果没有区别,但是加上括号效率较低
所以后面能不加括号就不加括号
include 和 require的区别
<?php
include '不存在的文件名';
require '不存在的文件名';
echo 'hello world';
?>
require 和 include 几乎完全一样,除了处理失败的方式不同之外。
include在加载文件失败时,会生成一个警告错误(E_WARNING),在错误发生后脚本继续执行。
所以include用在希望继续执行并向用户输出结果时。
require在加载失败时会生成一个致命错误(Fatal Error),在错误发生后脚本停止执行。
一般用在后续代码依赖于载入的文件的时候。
十,如何认识系统函数
1) 功能 要了解本函数的实现功能
2) 参数 调用函数需要哪些参数(可选和必选)以及类型 注意 参数是否为引用方式 &
3) 返回值 本函数都有什么返回结果
示例
bool settype ( mixed &$var , string $type )
伪类型:
mixed,说明一个参数可以接受多种不同的类型。
number,说明一个参数可以是整型或浮点型。
callback,说明参数是一个回调函数。 array_reduce()
void,如果作为返回类型,意味着函数的返回值是没有用的。作为参数列表中的内容意味着不接受任何参数 exit()
十一,字符串函数
strlen( ) 获取字符串的字节数
mb_strlen( ) 获取字符串的字符数
str_replace( ) 替换字符串
str_ireplace( ) 替换字符串中的一些字符(不区分大小写)
trim( ) 函数移除字符串两侧的空白字符或其他预定义字符
htmlspecialchars( ) 把一些预定义的字符转换为 HTML 实体
htmlspecialchars_decode( ) 将特殊的 HTML 实体转换回普通字符
addslashes( ) 在预定义字符之前添加反斜杠的字符串
stripslashes() 删除由 addslashes() 函数添加的反斜杠
md5( ) 计算字符串的 MD5 散列
strstr( ) 查找字符串的首次出现
strrchr( ) 查找指定字符在字符串中的最后一次出现
strrpos( ) 计算指定字符串在目标字符串中最后一次出现的位置
strrev( ) 反转字符串
substr( ) 返回字符串的一部分
str_repeat( ) 把字符串重复指定的次数
十二,文件系统函数
file_get_contents( ) 将整个文件读入一个字符串
file_put_contents( ) 将一个字符串写入文件
注意: 在Windows下无法以设备名来命名文件或文件夹,这些设备名主要有aux、com1、com2、prn、con、nul、ltp1、ltp2等,它们均为保留名称。
十三,密码散列算法函数
password_hash( ) 创建密码的散列
password_verify( ) 验证密码是否和散列值匹配
十四,数学函数
abs( ) 绝对值
ceil( ) 进一法取整
floor( ) 舍去法取整
pow( ) 返回数的n次方
round( ) 浮点数四舍五入
sqrt( ) 求平方根
max( ) 求最大值
min( ) 求最小值
rand( ) 随机数
mt_rand( ) 更好的随机数
pi( ) 获取圆周率值
intval( ) 获取变量的整数值
十五,杂项函数
exit( ) 输出一个消息并且退出当前脚本
die( ) 等同于 exit()
sleep( ) 延缓执行
eval( ) 把字符串作为PHP代码执行
十六,函数处理 函数
create_function() 创建一个匿名函数
call_user_func() 把第一个参数作为回调函数调用
|