函数
完成指定任务的功能代码块
定义
function 函数名( 参数1, 参数2...)
{
函数体(语句)
return 返回值
}
函数名( 参数1, 参数2...);
作用
给一段代码起一个**名字
, 以后写名字
** , 代码就会执行. 即调用
.
通过**名字
** , 可以多次调用.
特点
-
变量要先定义赋值才可以输出, 但函数的定义和调用不分先后顺序的 函数的定义代码, 会被提前放到内存.
-
函数定义了, 不调用就不执行.
-
函数名不区分大小写. 但推荐要一致.
变量作用域(范围)
由于函数的出现,导致变量的能见度(生命周期)不同. 共划分为:全局变量、局部变量、 静态变量:
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()
{
static $i=1; //在当前脚本中连续多次调用本函数,i依然有效,里面的静态声明(初始化)只会调用一次。
$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, $b)
{
echo '两个数的和是: '.($a+$b);
}
xxoo( ); // 调用函数时, 没有实际参数,会报错
?>
<?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/>";
$sum=0;
for($i=0;$i<func_num_args();$i++){
echo func_get_arg($i)." ";
$sum+=func_get_arg($i);
}
echo "<br/>";
echo "共计:".$sum;
}
dosum(10,20,50,60,300,100,20);
函数的返回值
1) return 后面可以是任何类型的值
2) 不写return, 或者只写return, 函数的返回值为 null
3) return 下面的语句不会被执行. 因为return 的意思是函数结束, 并且返回到调用这个函数的位置.
函数调用
函数执行后, 总是返回到之前调用它的地方. 多个函数互相调用时, 代码的执行顺序如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IN6CkAxu-1598694741238)(images\function.png)]
变量函数
函数名 是个变量, 调用函数使用的不是直接的函数名,而是一个变量
<?php
function xxoo()
{
echo 'aaaaa';
}
$x = 'xxoo';
$x(); // 相当于调用了 xxoo()
?>
匿名函数
也叫闭包函数 允许指定一个没有名称的函数。通常把函数定义代码赋值给一个变量,通过变量来调用
<?php
$x = function(){
echo 'aaaaa';
};
$x(); // 相当于调用了 xxoo()
//利用匿名函数获取全局变量值
$a = 100;
$z = function() use ($a){
echo $a; // 100
};
$z()
?>
回调函数
指调用函数的时候将另一个函数作为参数传递到调用的函数中,而不是传递一个普通的变量作为参数
使用回调函数是为了可以将一段自己定义的功能传到函数内部使用
<?php
function xxoo()
{
echo 'aaaaa';
}
function base($x)
{
$x();
}
base('xxoo'); // $x='xxoo'; $x() => xxoo()
base(function(){ echo 'bbbbb'; }); // $x=函数定义 $x()
?>
递归函数
函数内部可以调用其它函数. 递归函数可以看成 函数在内部调用自己.
函数自己调用自己, 会造成死循环. 必须满足某些条件后, 使它不会调用自己.
一般, 当参数满足某个条件时,就不调用自己
<?php
/* 该函数只作说明, 没有实际意义 */
function xxoo( $n )
{
if ($n > 1) { // 当参数大于1时, 调用自己
xxoo( $n-1 );
} else { // 当参数不大于1时, 直接返回
return;
}
}
xxoo( 5 )
?>
<?php
//递归累加
function sum( $m )
{
if($m==1){
return 1;
}
return $m+sum($m-1);
}
sum( 10 );
引入文件
把自定义的函数放入一个文件中. 然后把文件加载进来. 就可以使用那些函数了.
include 加载文件, 如果有错, 之后的代码依然会执行
include_once 加载文件, 多次书写只会加载一次, 从而避免了重复加载而报错.
<?php
include '文件名';
include_once('文件名');
?>
require 加载文件, 如果有错, 程序结束, 后面的代码不会执行
require_once 加载文件, 多次书写只会加载一次, 如果报错, 就不会往后执行
<?php
require '文件名';
require_once('文件名');
?>
不推荐用 include_once 和 require_once , 其检查重复功能会耗费资源.
include和require后面加不加括号对执行结果没有区别,但是加上括号效率较低,所以后面能不加括号就不加括号
include 和 require的区别
<?php
include '不存在的文件名';
require '不存在的文件名';
echo 'hello world';
/*
require 和 include 几乎完全一样,除了处理失败的方式不同之外。
include 引入不存在文件时产生一个Warning 脚本会继续往下执行 (适合导入不重要的文件)
require 引入不存在文件时产生一个Fatal Error 脚本不会继续往下执行 (适合导入重要文件)
*/
?>
如何认识系统函数
-
功能 要了解本函数的实现功能
-
参数 调用函数需要哪些参数(可选和必选)以及类型 注意 参数是否为引用方式 &
-
返回值 本函数都有什么返回结果
格式:
bool settype ( mixed &$var , string $type )
伪类型:
mixed,说明一个参数可以接受多种不同的类型。
number,说明一个参数可以是整型或浮点型。
callback,说明参数是一个回调函数。 array_reduce()
void,如果作为返回类型,意味着函数的返回值是没有用的。作为参数列表中的内容意味着不接受任何参数
字符串函数
strlen( ) 获取字符串的字节数
mb_strlen( ) 获取字符串的字符数
str_replace( ) 替换字符串
file_get_contents( ) 读取文件中的内容
file_put_contents( ) 写入文件中的内容
trim( ) 函数移除字符串两侧的空白字符或其他预定义字符
htmlspecialchars( ) 把一些预定义的字符转换为 HTML 实体
htmlspecialchars_decode( ) 将特殊的 HTML 实体转换回普通字符
md5( ) 计算字符串的 MD5 散列
password_hash( ) 创建密码的散列
password_verify( ) 验证密码是否和散列值匹配
strrev( ) 反转字符串
substr( ) 返回字符串的一部分
str_repeat( ) 把字符串重复指定的次数