23. 函数
描述:封装代码,即时调用。
作用:减少重复代码,便于项目维护。
<?php
// 密码算法加密
function getpassword($password){
return md5($password . 'this is a password');
}
$password1 = '123456';
$password2 = '111111';
echo getpassword($password1); // 2fd04e998c2f6520d347a5ce3a4509d9
echo getpassword($password2); // 9f5cbe9b834cc7e72075999bbc3e5ff1
?>
24. 函数定义格式
function 函数名 ([参数1,参数2,…])
{
// 执行语句
// return ;
}
调用方式:
函数名([参数1,参数2,…]);
命名规则:对于函数,命名规则和变量是一样的,但是函数不区分大小写。
25. 函数的调用过程和返回值
编译原理:自上而下,从左到右。
函数调用时,代码执行权进入函数
当函数所有语句执行完毕,函数返回,交回执行权。
或者函数碰到return语句,函数返回,交回执行权。
26. 函数参数的传值方式
值传递: 只是把变量的值传到函数,不影响变量本身
引用传递:把变量的地址传到函数,函数直接操作变量本身,变量会受到影响
<?php
// 值传递
function t1($a){
}
t1($b);
当调用时,相当于先执行: $a = $b;
?>
<?php
// 引用传递
function t2(&$a){
}
t2($c);
当调用时,相当于先执行: $a = &$c;
?>
27. 函数中变量的作用域
在PHP的页面中声明的变量叫‘全局变量’。
在函数里声明的变量叫‘局部变量’。
声明全局变量(global)
<?php
global $a = 123;
?>
超级全局变量:在页面的任何部分,包括函数、方法等,都可以直接访问。例:$_GET、$_POST、$_REQUEST等
28. 动态调用函数
可以用变量的值当做函数,并调用函数,例:
<?php
function say(){
echo 'hello, world';
}
$do = 'say';
$do(); // 相当于 t1()
// 输出结果: hello, world
?>
29. 获取时间戳
时间戳是指自1970-01-01 00:00:00到现在这一瞬间所经过的秒数。
<?php
// 获取时间戳
var_dump(time());
var_dump(microtime());
var_dump(microtime(true));
?>
30. 时间戳格式化
- d - 一个月中的第几天(从 01 到 31)
- D - 星期几的文本表示(用三个字母表示)
- j - 一个月中的第几天,不带前导零(1 到 31)
- l(‘L’ 的小写形式)- 星期几的完整的文本表示
- N - 星期几的 ISO-8601 数字格式表示(1表示Monday[星期一],7表示- Sunday[星期日])
- S - 一个月中的第几天的英语序数后缀(2 个字符:st、nd、rd 或 th。与 j 搭配使用)
- w - 星期几的数字表示(0 表示 Sunday[星期日],6 表示 Saturday[星期六])
- z - 一年中的第几天(从 0 到 365)
- W - 用 ISO-8601 数字格式表示一年中的星期数字(每周从 Monday[星期一]开始)
- F - 月份的完整的文本表示(January[一月份] 到 December[十二月份])
- m - 月份的数字表示(从 01 到 12)
- M - 月份的短文本表示(用三个字母表示)
- n - 月份的数字表示,不带前导零(1 到 12)
- t - 给定月份中包含的天数
- L - 是否是闰年(如果是闰年则为 1,否则为 0)
- o - ISO-8601 标准下的年份数字
- Y - 年份的四位数表示
- y - 年份的两位数表示
- a - 小写形式表示:am 或 pm
- A - 大写形式表示:AM 或 PM
- B - Swatch Internet Time(000 到 999)
- g - 12 小时制,不带前导零(1 到 12)
- G - 24 小时制,不带前导零(0 到 23)
- h - 12 小时制,带前导零(01 到 12)
- H - 24 小时制,带前导零(00 到 23)
- i - 分,带前导零(00 到 59)
- s - 秒,带前导零(00 到 59)
- u - 微秒(PHP 5.2.2 中新增的)
- e - 时区标识符(例如:UTC、GMT、Atlantic/Azores)
- I(i 的大写形式)- 日期是否是在夏令时(如果是夏令时则为 1,否则为 0)
- O - 格林威治时间(GMT)的差值,单位是小时(实例:+0100)
- P - 格林威治时间(GMT)的差值,单位是 hours:minutes(PHP 5.1.3 中新增的)
- T - 时区的简写(实例:EST、MDT)
- Z - 以秒为单位的时区偏移量。UTC 以西时区的偏移量为负数(-43200 到 50400)
- c - ISO-8601 标准的日期(例如 2013-05-05T16:34:42+00:00)
- r - RFC 2822 格式的日期(例如 Fri, 12 Apr 2013 12:01:05 +0200)
- U - 自 Unix 纪元(January 1 1970 00:00:00 GMT)以来经过的秒数
<?php
$a = time();
echo date('Y-m-d 星期N H:i:s', $a);
?>
31. 解析检测日期
<?php
// 创建时间,参数可以从右往左省略,省略的参数默认本地当前值。
// 参数顺序为: 时,分,秒,月,日,年
echo mktime(17, 35, 20, 11, 27, 2014);
?>
<?php
// 检测日期是否合法--checkdate
var_dump(checkdate(2, 29, 2000));
?>
32. 字符串定义方式
有四种定义方式:单引号定义、双引号定义、heredoc、nowdoc。
heredoc和nowdoc适用于定义大段文本,二者基本相似,但是heredoc会解析变量,nowdoc不会。
<?php
// 1、单引号定义
$str1 = 'hello';
var_dump($str1);
// 2、双引号定义
$str2 = "hello";
var_dump($str2);
// 3、heredoc
$str3 = <<<HTML
I Love
heredoc
$str1
world
HTML;
var_dump($str3);
// 4、nowdoc
$str4 = <<<'INTRO'
I Love
nowdoc
$str1
world
INTRO;
var_dump($str4);
?>
33. 单双引号的区别
单引号转义的符号较少(’,\)
而双引号能转义大部分符号
双引号里的变量能解析,单引号不行。
单引号速度较快,因为转义的内容较少,而且不用解析变量。
34. 字符串常用函数
①获取字符串长度
<?php
// 非中文字符串长度获取
$str1 = 'hello';
echo strlen($str1); // 5
// 中文字符串长度获取
$str2 = '我爱中国';
echo strlen($str2); // 12
// 此处,在utf-8中,一个中文占3个字节,所以,不能使用该函数
// 使用mb_strlen,并声明使用的编码格式
echo mb_strlen($str2, 'utf-8'); // 4
?>
②查找
<?php
$str1 = 'hello';
$str3 = 'e';
if(strpos($str1, $str3) !== FALSE){
echo $str1 , '中含有' , $str3;
}else{
echo $str1 , '中不含有' , $str3;
}
?>
③替换
<?php
// 把abc替换成day
$str4 = 'good,abc,ad';
// str_replace($a, $b, $c) $a-需要换的字符串,$b-替换的值,$c-要替换的变量
echo str_replace('abc', 'day', $str4);
// 多个替换、互相替换
// 把’老‘替换成’新‘,’新‘替换成’老‘
$str5 = '老人,小孩,青年,新人,新年,老年';
echo strtr($str5, array('老' => '新', '新' => '老'));
?>
④截取
<?php
// substr($a, $b, $c) $a-需要截取的变量,$b-截取开始位置,$c-截取结束位置
$str6 = 'good';
echo substr($str6, 0, 2); // go
// 负数,代表从后往前数
echo substr($str6, 0, -2); // go
?>
⑤拆分
<?php
// explode($a, $b) $a-分隔符,$b-变量
$str7 = 'php,html,mysql';
$arr = explode(',', $str7);
var_dump($arr);
?>
⑥合并
<?php
// implode($a, $b) $a-变量,$b-分隔符
$arr = array('php', 'html', 'mysql');
echo implode($arr, ',');
?>