一、函数定义
<?php
//定义一个简单函数
function display($name): string
{
return 'hello '.$name;
}
//调用函数
$world = 'world';
echo display($world); // hello world
二、参数默认值
- 函数形参可以没有默认值,也可以有多个默认值。
- 函数有默认值的参数必须定义在所有参数的最后。
<?php
//函数默认值 world
function display($name = 'world'): string
{
return 'hello '.$name;
}
echo display();
三、引用传值
- 值传递,将变量的值传给形参,从而是两个不同变量。
- 引用传值,将形参的内存地址传递给形参,两个变量指向同一个地址。
<?php
function changeValue($a, &$b){
// & 就是地址符号,表示获取的是外部参数的地址
$a++;
$b++;
}
$a = 10;
$b = 10;
changeValue($a, $b); // 引用传值必须是变量
echo $a; // 10,值传递,所以不改变外部变量本身
echo $b; // 11,引用传值,内部修改影响外部变量
四、静态变量
- 静态变量,即在函数内部使用 static 关键字修饰的变量,这种变量是在函数第一次调用时执行,而且只执行一次,在函数再次执行时,会自动跳过这一行。
- 这种变量能够在同一个函数多次调用共享数据的变化。
<?php
function getStatic(){
static $c = 0;
$a = 0;
echo $c++, $a++;
}
getStatic(); // 0,0 第一次调用,$c初始化
getStatic(); // 1,0 第二次调用,$c不再初始化
- 计数器
<?php
function getCount(){
static $count = 0;
$number = 0;
echo 'number的值为:' . (String)++$number . ',count的值为:' . (String)++$count . '<br>';
}
getCount(); // number的值为:1,count的值为:1
getCount(); // number的值为:1,count的值为:2
getCount(); // number的值为:1,count的值为:3
五、作用域
-
作用域(scope),指的是变量所定义的环境决定的能够被访问的工作区域。
-
分为三种:全局作用域,局部作用域,超全局作用域。
-
超全局作用域:能够在PHP脚本的任何地方使用,包括函数内部、类内部。是系统定义的超全局变量,生命周期是脚本周期。
-
超全局变量能够在任何地方访问。
<?php
// 为超全局变量增加元素
$_GET['age'] = 1;
function show(){
// 定义变量
$show = __FUNCTION__;
echo $_GET['age'];
}
show();
- 局部作用域不能访问全局变量。
- 用户定义的全局变量都会放到
$GLOBALS
中,可以再任意地方访问。 - 如果函数内部定义的局部变量想在外部全局作用于访问:
- 引用传值。
- 使用
global
关键字在函数内部声明该变量是全局变量。
<?php
// 全局变量
$number = 100;
function getOut(){
// 声明全局变量
global $number; // 声明时不能赋值
echo $number;
$number = 200;
// 使用超全局变量访问全局变量
echo $GLOBALS['number'];
}
六、PHP强制类型
- 针对函数的强制类型分为两种:强类型参数、强类型返回值。
- 强类型参数:在定义函数给定形参的时候,强制要求参数是对应的类型。
- 强类型返回值:在定义函数结构的时候指定返回值的类型。
<?php
// 强制类型
function getSum(int $a, int $b): int
{
return $a + $b;
}
七、可变函数
- 函数的名字具有不确定性,通过变量来保存函数名字,然后也是通过变量+()的方式来实现函数的访问。
<?php
function display(){
echo 'hello world';
}
$var = 'display';
$var(); // hello world,$var代表的结果是display,与()结合就是 display();
- 可变函数不是看到一个函数,刻意用变量去访问,而是在不确定函数名叫做什么的时候才用这种方式。
<?php
function square($n):int
{
return $n ** 2;
}
function cube($n): int
{
return $n ** 3;
}
//定义函数:函数内部需要通过调用一个外部的函数来辅助操作
function getNum($n, $func_name){
echo $func_name($n); // 系统认定 $func_name 一定是一个函数
}
getNum(10, 'square'); // 100
getNum(10, 'cube'); // 1000
八、系统函数
1. 输出类
- echo:一种语法结构,不是函数,不需要使用括号
- print_r:输出变量的结构,方便查看
- var_dump:一种语法结构,详细打印变量的结构和数据
- exit / die:输出消息并终止脚本执行
2. 时间日期类
- time:获取当前时间的时间戳
- date:按照指定格式输出时间,可以使当前时间也可以是指定时间戳
- strtotime:将任何英文文本日期时间描述转换成时间戳
- microtime:获取时间戳和微秒(精度高)
<?php
echo time() . '<br>'; // 1666526051
echo date('Y年m月d日 H:i:s') . '<br>'; // 2022年10月23日 19:54:11
echo date('Y年m月d日 H:i:s', 123456789) . '<br>'; // 1973年11月30日 05:33:09
echo strtotime('tomorrow 12 hour') . '<br>'; // 1666584000
echo date('Y年m月d日 H:i:s', strtotime('tomorrow 12 hour')) . '<br>'; // 2022年10月24日 12:00:00
echo microtime(); // 0.82213000 1666526051
3. 数学类
- max:多个数中的最大值(可以使数组)
- min:多个数中的最小值(可以是数组)
- floor:向下取整
- ceil:向上取整
- mt_rand:获取指定区间或0到最大数之间的一个随机整数
- round:四舍五入
<?php
echo mt_rand() . '<br>';
echo mt_rand(1, 10) . '<br>'; // 包括 1 和 10
4. 字符串类
- addslashes:对ASCII中的特殊字符进行转义,通常对用户输入的内容进行特殊处理。
- htmlspecialchars:将HTML特殊符号转换成实体。
- htmlspecialchars_decode:将实体符号转换成普通字符。
- chr:将ASCII对应的数值转换成对应的符号。
- ord:将ASCII字符转换成对应的数值。
- explode:将字符串按照指定的符号分隔,得到一个数组。
- implode:将一个数组按照指定的符号连接成一个字符串。
- md5:使用 md5 算法对数据进行加密。
- str_repeat:将字符串重复指定次数。
- str_replace:字符串替换。
- str_shuffle:随机打乱一个字符串。
- str_split:按照指定长度将数组分割,返回数组。
- strip_tags:去除HTML和PHP标记。
- strlen:获取字符串的 字节 长度。
- stripos / strpos :查找字符串中首次出现目标字符串的位置。
- substr:从字符串中截取指定位置和长度的子字符串。
- trim:去除字符串两边的空格(默认空格,也可以是其他字符)。
- ucfirst:首字母大写。
- strtolower:所有字母小写。
- strtoupper:所有字母大写。
- strstr:获取字符串中某个字符首次出现到最后的字符串。
5. 数组类
- array_key_exists:判断下标是否在数组中存在
- array_keys:获取数组全部下标,或某个确定值的下标
- array_merge:合并数组元素(相同字符串下标元素是覆盖)
- array_pop:删除数组最后一个元素
- array_push:在数组最后添加一个元素
- array_unshift:在数组最前面添加一个元素
- array_shift:删除数组最前面的元素
- shuffle:将原始数组打乱
- in_array:判断元素是否在数组中存在
- range:生成一个规则数值数组
- current:获取当前数组指针所在位置的值
- next:将数组元素指针向后移动一位,并获取新元素的值
- prev:与next相反,向前移动
- end:指针移动到最后一个元素,并获取元素值
- reset:重置数组指针(回到第一个元素)
- list:语法结构,从数组中获取数据,并将数据赋值给变量