PHP(7)函数

一、函数定义

<?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:语法结构,从数组中获取数据,并将数据赋值给变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iFulling

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值