函数
什么是函数?
为了使用其个功能的代码段!
函数的主要目的
代码重用
模块化编程
函数的定义
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关键字
