02、PHP函数库
1、自定义函数
局部变量:函数内部定义的变量,只能内部使用
全局变量:从函数定义后的地方,一直到代码结尾都可以使用
超全局变量:函数内/外定义的函数,在哪里都可以被访问
//超全局变量 $GLOBALS $_SERVER $_GET/$_POST $_FILES $_COOKIE $_REQUEST $_SESSION
跟标识符命名规则相同,必须驼峰标记法,所有函数都是全局作用域,不支持重载、不支持取消定义、不支持重定义已声明的函数
定义及使用:
function add($a,$b){ echo $a+$b; } add(1,2); //或者 function add($a,$b){ return $a+$b; } $c = add(1,2);
函数内对全局变量进行操作:$GLOBALS(超全局变量) 或者 global 关键字实现
$n = 1; function add(){ $GLOBALS['n']++; echo $n; //2 } add();
echo strrpos('name','a'); //从最后开始找,返回a在字符串里面的下标
echo substr('name',1); //截取字符串,从第1位开始截,返回截取后的值
echo strtolower('HELLO'); //将大写转换为小写
引用传值
引用传值必须在参数的前面加上 & 符号
引用传值的参数只能是变量
引用传值会改变函数外的值
引用指向原始变量
$a = 'hahaha'; $b = &$a; //将$a的原始值指向$b,$b改变$a也改变 $b = 'xixixi'; //这样$a的原始值就会改变 echo $a; //这里会输出 'xixixi'
实例:
function ha($a){ $a++; echo $a; //这里是34 } $a = 33; ha($a); //这里是34(局部的) echo $a; //这里仍然是33(全局的) /////// 函数内部不能改变函数外部的值,但利用引用传值可以,如: /////// function ha(&$a){ $a++; echo $a; //这里是34 } $a = 33; ha($a); //这里是34(局部的) echo $a; //这里是34(全局的)
可变参数
php5.5前
func_get_args() //获取所有参数,并组合成数组,
func_get_arg() //获取传递给函数的某一项
func_num_args(); //获取参数的数量
array_sum(); //对数组所有值求和
function avg(){ $arr = func_get_args(); print_r($arr); //这里会获取到所有传递过来的参数的数组 //对接收到的所有参数,进行求和 echo array_sum($arr); //这里输出结果值 //获取当前参数的数量 $arr_len = func_num_args(); }
php5.5后
...xxx //获取所有传递过来的参数
function avg(...arr){ print_r($arr); //这里会获取到所有传递过来的参数的数组 }
函数返回值
略。。。
回调函数
callback回调函数是:作为参数,传进另一个函数中使用的函数
如:call_user_func('回调' , '参数')
function add ($a){ echo $a; } call_user_func('add','输出的内容'); //这样就会间接调用add函数
递归函数
递归函数:是指直接或间接调用函数本身的函数
递归函数条件:
1、在每一次调用自己时,必须是(在某种意义上)更接近于解
2、必须有一个终止处理或计算的准则
如:计算1-100的累加和
function recursive ($n){ if($n >= 1){ return $n + recursive($n - 1) ; } }
可变函数
可变函数:是指如果一个变量名后有圆括号,PHP将寻找与变量的值同名的函数,并尝试执行它
用途:可以用来实现包括回调函数,函数表在内的用途
注意:可变函数不能用于,echo、print、unset、isset、empty、include、require 以及类似的语言结构。
用可变函数的语法来调用一个对象的方法,如:
$a = '123'; function echoit($haha){ echo $haha; } $c = 'echoit'; $c($a);
字符串函数
strlen:获取字符串长度,如
echo strlen('hahaixixixi');
strtolower:将字符串转换为小写,如
echo strtolower('SDLFKJSLDKFLS');
strtoupper:将字符串转为大写,如
echo strtoupper('hahaixixixi');
ucfirst:将句子首字母转换为大写,如
echo ucfirst('are you ok?');
ucwords:将每个单词的首字母转换为大写,如
echo ucwords('are you ok?');
str_replace:查找字符串中的字符,并进行替换,如
echo str_replace('a','1','hahahaha');//查找字符串中的a,将a替换成1
htmlspecialchars:预定义字符转为 HTML 实体,如
// $str = "<h1>转为实体</h1>"; // $echoi = htmlspecialchars($str,ENT_COMPAT);//ENT_COMPAT仅编码双引号,默认 // echo $echoi; // $str = '<h1>转为实体</h1>'; // $echoi = htmlspecialchars($str,ENT_QUOTES);//ENT_QUOTES仅编码 双引号 和 单引号 // echo $echoi; $str = "<h1>转为实体</h1>"; $echoi = htmlspecialchars($str,ENT_NOQUOTES);//不编码任何引号 echo $echoi;
//即将单引号或双引号里面的,& > < " ' 等转为html字符
ltrim:实现删除字符串开始位置的空格或其他字符
// $str = "Hello World!"; // echo $str . "<br>"; // echo ltrim($str,"Hello");//从字符串左边,截取Hello,返回截取后的结果 //若第二个参数省略,则去除以下所有字符 // "\0" - NULL // "\t" - 制表符 // "\n" - 换行 // "\x0B" - 垂直制表符 // "\r" - 回车 // " " - 空格 $str = " \0 HelloWorld!"; echo ltrim($str);
rtrim:实现删除字符串结束位置的空格或其他字符
// $str = "Hello World!"; // echo $str . "<br>"; // echo ltrim($str,"World");//从字符串右边,截取World,返回截取后的结果 //若第二个参数省略,则去除以下所有字符 // "\0" - NULL // "\t" - 制表符 // "\n" - 换行 // "\x0B" - 垂直制表符 // "\r" - 回车 // " " - 空格 $str = "Hello World!\0 "; echo ltrim($str);
trim:实现删除字符串 开始和结束位置 的空格和其他字符
strpos:返回一个字符出现在另一个字符串,第一次出现的位置
echo strpos('lksdjlkasdkf','a'); //7 返回a在字符串里面第一次出现的位置
stripos:返回一个字符出现在另一个字符串,第一次出现的位置,忽略大小写
echo strpos('lksdjlkAsdkf','a'); //7 返回a在字符串里面第一次出现的位置,忽略大小写
strrpos:返回一个字符在另一个字符串,最后一次出现的位置
echo strrpos('lksdjlkasdkfa','a'); //12 返回a在字符串里面,最后一次出现的位置
strrpos:返回一个字符在另一个字符串,最后一次出现的位置,忽略大小写
echo strrpos('lksdjlkasdkfA','a'); //12 返回a在字符串里面,最后一次出现的位置,忽略大小写
explode:字符串转数组
$str = 'a|b|c|d'; print_r(explode('|' , $str)); //以 | 为分界线进行分割
implode:将数组转为字符串
$arr = array('a' , 'b' , 'c' , 'd'); echo implode($arr); //将数组每一项拼接起来,没有分隔 echo '<br>'; echo implode(',' , $arr); //将数组每一项拼接起来,用逗号分隔
substr:截取字符串
$str = 'abcdefg'; echo substr($str , 0 , 2);//从第0为开始,截取长度为2,若长度为负数,则往回截取 echo '<br>'; echo substr($str , 0); //若省略长度,则截取到最后一位
strstr:将搜索一个字符串在另一个字符串中第一次出现的位置,区分大小写。返回字符串的其余部分
$str1 = 'abcdefg'; $str2 = 'c'; echo strstr($str1 , $str2); //将返回str2第一次出现的位置,直到最后。即cdefg
stristr:将搜索一个字符串在另一个字符串中第一次出现的位置,不区分大小写。返回字符串的其余部分
$str1 = 'abcdefg'; $str2 = 'C'; echo strstr($str1 , $str2); //将返回str2第一次出现的位置,直到最后。即cdefg
md5:字符串加密,或者说计算字符串的md5的哈希值
$str = 'hahaha'; echo md5($str);
str_shuffle:随机打乱字符串
$str = 'aslkjfsldfklsdf'; echo str_shuffle($str);
sprintf:字符串格式函数
$num = 5; $str = 'apple'; echo sprintf(' there are %d %s ' , $num,$str); //若一个只有一个变量的话 echo sprintf(' there are %1d and %1d ',$num); //若设置小数点长度 echo sprintf(' there are %.2f ',$num);
//规定字符串以及如何格式化其中的变量 %% //返回一个百分号% %b //二进制数 %d //包含正负号的十进制数 %e //使用小写的科学计数法(例如 1.2e+2) %s //字符串 %f //浮点数(本地设置) . //附加的格式值,必须放置在%和字母之间(例如%.2f) + - //在数字前面加上 + 或 - 来定义数字的正负性。只有负数才做标记,正数不做标记 -' //规定使用什么作为填充,默认是空格。它必须与宽度指定器一起使用 -- //左调整变量值 -[0-9] //规定变量的最小宽度 -.[0-9] //规定小数位数或最大字符串长度
数学函数库
ceil:向上取整
$num = 3.14; echo ceil($num); //输出4
floor:向下取整
$num = 3.14; echo floor($num); //输出3
round:四舍五入
$n = 3.14159; echo round($n); //3 echo round($n , 3); //3.142 取到小数点后3位
number_format:以千位分隔符方式,格式化数字
$n = 2348.456; echo number_format($n); //2,348 echo number_format($n , 2); //2,348.46 格式化到小数位后两位,附带四舍五入
pow:幂运算
echo pow(2 , 3); //8 2的3次方
sqrt:平方根
echo sqrt(4); //2 4的平方根
rand:随机数
echo rand(0,100); //输出0-100之间的随机数
mt_rand:更好的随机数,速度比 rand 快3倍左右
echo mt_rand(0-100); //输出0-100之间的随机数
fmod:浮点数余数
//浮点数余数 echo fmod(7.8 , 3); //1.8 //整数余数 echo 7.8 % 3; //1
max:获取两个或以上数字的最大值
$x = 3; $y = 7; $z = 8.8; echo max($x,$y,$z); //8.8
min:获取两个或以上数字的最小值
$x = 3; $y = 7; $z = 8.8; echo min($x,$y,$z); //3
日期时间函数库

配置文件修改时区
1、php.ini 中查找Date
2、将 date.timezone 前的分号去掉
3、在 date.timezone = 后面加上 'Asia/Shanghai'
4、 重启Apachech服务器
PHP函数修改时区
date_default_timezone_set('Asia/Shanghai');
获取当前时区
echo date_default_timezone_get();
函数操作
date:格式化本地时间 / 日期
echo date('Y年m月d日 , H:i:s');
echo '昨天这个时候的时间是' . date('Y-m-d H:i:s' , time()-86400); //将时间戳转为正常时间
echo date('Y-m-d H:i:s' , 23423434...); //将时间戳转为正常时间
strtotime:将字符串转Unix时间戳,即精确计算某个时间点的时间戳
echo '三个星期之前的时间戳为' , strtotime('-3 weeks');
echo '上个月的第一天的时间戳为' , strtotime('last day of -1 month'); //不能直接用 -1 month,因为 -1 month 是以30天为单位计算的


microtime:返回 unix 时间戳和微秒数
echo microtime(); //返回当前的微秒数 及时间戳,空格隔开 echo microtime(true); //返回当前时间戳,含微秒数
uniqid:生成唯一的id号
echo uniqid(); //唯一id号 echo uniqid('haha'); //给id号加前缀 haha
getdate:获取当前时间的信息,数组形式返回
print_r( getdate() );

浙公网安备 33010602011771号