函数
什么是函数?
为了使用其个功能的代码段!
函数的主要目的
代码重用
模块化编程
函数的定义
1 | function 函数名([形参列表]){ |
结构说明:
function 是定义函数的关键字
函数名的命名规则、不区分大小写, 它的命名规则与变量一样。
函数的调用
函数名();
函数的参数
形式参数 Parameter
在定义函数的时候写的参数 我们称之为形式参数 简称”形参”。
实际参数 argument
在调用函数的时候传递的参数 我们称之为实际参数 简称”实参”。
函数参数的传递方式
按值传递
引用传递
记得在形参的前面加一个&求地址运算符
问:如果使用引用传递的时候 ,是否能够将实参使用具体的值而不是使用变量来传递
答:不行,只能变量才可以使用引用传递。
可变函数
一个函数的名恰好是一个变量的值
语法:
变量名(); //就可以调用函数
进制转换的作业 就可以使用到可变函数来实现
函数形参的类型限定
在PHP7.0以后,支持了标量类型数据限定。
- 标量有四种:字符串(string)、布尔值(bool)、整型(int)和浮点型(float)
语法:
1 | function function_name(类型限定 $val){ |
上图所示的代码:需要的是整型数据, 但是传递不是整型数据 ,函数的内部进行了类型的自动转换功能。
函数形参数类型严格模式
开启类型严格模式语句:declare(strict_types=1);
函数形参的默认值
参数为什么需要有默认值?
假设一个函数它是用来实现的功能比较固定!
函数的参数的个数不定
指的形参与实参个数之间的关系!
实参:在函数在运行中所传递的数据!
形参:函数在运行中所依赖的数据!
形参个数大于实参个数
会报错 “Fatal error”
形参个数等于实参个数
没有错
形参个数小于实参个数
没有错
func_get_args() :获取函数实参的个数 返回是一个数组
count(\$arr) 用于获取数组的长度
函数的返回值
return 关键字
1、当函数体里面遇到return关键字会将当前的函数停止运行
2、向函数的调用者返回数据!
问题:如果调用一个没有返回值的函数 会得到?
函数返回值的类型
类型严格模式对于返回值的类型限定同样起作用,使用类型严格模式的时候要注意,必须保证声明语句在最开始位置,否则报错!
格式:
1 | function 函数名():返回值的类型{ |
二十五、匿名函数
一个函数没有名称 ,需要将这个函数赋值给一个变量!
三十、字符串函数
Strlen
1 | int strlen ( string $string ) |
返回的是指定字符串的字节的长度!
Substr
1 | string substr ( string $string , int $start [, int $length ] ) |
作用:截取字符串
string \$string:字符串变量
int \$start:开始下标
int \$length:可缺省的参数 表示截取的长度 如果不写表示截取到字符串的末尾 如果有些 表示截取到指定的长度
Strtolower
1 | string strtolower ( string $string ) |
将大写字母转换为小写
Strtoupper
1 | string strtoupper ( string $string ) |
将小写字母转换为大写
mb_strlen
1 | mixed mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] ) |
作用:获取字符的个数!
如果要使用这个函数需要 在PHP.INI中开启下面的扩展 php_mbstring 这个扩展
开启扩展
告诉PHP去哪个目录下面找扩展文件
重启Apachehttpd.exe -k restart
Ucfirst
1 | string ucfirst ( string $str ) |
将字符串的首字母转换为大写
Strpos
1 | mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) |
查找子字符在原字符串首次出来的位置, 如果找的到就返回其下标,如果找不到返回false
strrpos
1 | mixed strrpos ( string $haystack , string $needle [, int $offset = 0 ] ) |
查找子字符在原字符串最后次出来的位置, 如果找的到就返回其下标,如果找不到返回false
strrev
1 | string strrev ( string $string ) |
将字符串进行翻转
trim
1 | string trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] ) |
用于去除字符串的首尾的空白字符
explode
1 | array explode ( string $delimiter , string $string [, int $limit ] ) |
使用指定的分隔符将一个字符串分隔为数组
参数说明:
string \$delimiter:分隔符
string \$string:要分割字符串
implode
1 | string implode ( string $glue , array $pieces ) |
参数说明:
string \$glue:拼接符号
array \$pieces:要拼接的数组
三十一、时间日期函数
date_default_timezone_set
设置时区三种方法
- date_default_timezone_set() 函数
- 修改 php.ini 配置文件
- 使用ini_set() 这个函数
第一种方法: date_default_timezone_set()
第二种方法:修改php.ini配置文件
第三种方法:使用ini_set()函数, 修改php的配置文件配置
date_default_timezone_get
获取到设置的时区
time
获取一个UNIX时间戳 是1970年1月1日0时0分0秒时间的秒数
int time ( void )
date
1 | string date ( string $format [, int $timestamp ] ) |
将一个时间戳格式化为一个本地的时间
第二个参数如果不写表示当前的时间戳
格式 说明
Y 4 位数字完整表示的年份
m 数字表示的月份,有前导零 取值01~12
d 月份中的第几天,有前导零的 返回值:01~31
H 小时,24 小时格式,有前导零 返回值:01~23
i 有前导零的分钟数 00~59
s 秒数,有前导零 00~59
w 星期中的第几天,数字表示 0(表示星期天)到 6(表示星期六)
N 星期中的第几天 数字表示 1(表示星期一)到 7(表示星期天)
a 小写的上午和下午值 am 或 pm
A 大写的上午和下午值 AM 或 PM
strtotime
将任何英文文本的日期时间描述解析为 Unix 时间戳
1 | int strtotime ( string $time [, int $now = time() ] ) |
microtime
返回当前 Unix 时间戳和微秒数
这个函数有一个缺省的参数 ,这个参数是一个布尔型
如果将这个值设置为true返回是一个浮点数!时间戳和微秒数合起来的数
如果没有指定参数 那么返回是两部分:时间戳和微秒。 这是一个字符串 ,将这个字符串以空格分割为数组
三十二、数学函数
abs
返回一个数的绝对值
sqrt
返回一个数的平方根
pow
pow(x,y) 返回一个x的y次幂
ceil
向上取整 得到一个比当前数要大的最小的整数
floor
向下取整 得到一个比当前数要大的最大的整数
round
对一个数进行四舍五入
第一个参数:表示一个数
第二个参数:可选的 如果没有写表示 不保留小数位 如果有写就表示保留几位小数
rand和mt_rand
返回一个闭合区间的随机整数
rand和mt_rand它们有两个参数
第一个参数:表示最小的整数
第二个参数:表示最大的整数
这两个函数之间的区别在于:mt_rand的速度比rand的速度快4倍!
二十七、变量的作用域
变量的作用域:表示变量在什么区域里面有效!
变量的作用域分为两种:==全局作用域==、==局部作用域==
凡是变量的作用域都是跟函数有关系!
在函数外面定义的变量称之全局变量 它的作用域是全局的
在函数里面定义的变量称之局部变量 它的作用域是局部的,也就是在当前的函数内起作用!
注意:
PHP中的变量的作用域是不叠加的!全局不能访问局部的,局部的也不能访问全局的!全局变量只能在全局访问内访问,局部量只能在函数内访问!,在函数内是不能访问函数外定义的变量的!
在函数里面是无法访问函数外面定义的变量
在函数外面无法访问函数里面定义的变量
问:在函数里面访问函数外面定义的变量!
使用$_GET
这个超全局变量 可以使用在函数内部访问函数外面定义的变量,但是$_GET
它本身是用来获取get方式提交的数据!
在PHP中还有一种变量 称之超全局变量 ,但是超全局变量不能人为的进行定义!只能使用PHP系统内置的!这里的超全局变量的作用域可以理解为与JS中的全局作用域一样!
虽然说$_GET
可以使用实现在函数里面也能够被访问, 但是它不是专业做这个的!
注意:
只有超全局变量才可以在函数外面和函数里面能够访问!
$GLOBALS
它就是专门实现将一个数据进行超全局化!超全局化以后在全局作用域与局部作用域都可以使用。
注意:
1) \$GLOBALS这个超全局数组变量中的数组元素它是与全局变量一一对应!只要我们创建了一个全局变量 就是相当于往这个超全局数组变量中添加一个对应的数组元素!变量名就是数组元素的下标 ,变量的值就是这个数组元素的值!
2) 反过来说, 只是我们往\$GLOBALS这个超全局数组中添加一个数组元素, 就相当于会创建一个同名的全局变量!
注意:
全局变量与$GLOBALS
这个超全局数组的对应的数组元素它们之间的关系是同生同死!
二十八、变量的生命周期
变量生命周期:指的当前这个变量什么时候诞生、什么时候消失!
变量什么时候诞生?
一个变量被定义的时候
变量什么时候消失:
- 当变量被unset掉以后
- 当当前的脚本程序运行结束!
我们这里讨论是局部变量的生命周期!
什么是局部变量?
是指在函数里面定义的变量
问:如何让局部变量的生命活的久一点!
使用静态变量可以让其活的久一点, 只要当前的PHP程序在运行 ,当前的静态局部变量那么就一直活着!
如何定义一个静态变量:
在PHP中有一个static关键字 ,可以用来定义一个静态的局部变量!
用法:
将static放置在局部变量的前面, 那么这个局部变量就会被定义为静态局部变量!
无限级分类 ----static关键字