这篇文章总结php代码嵌套到html中所需的标签语法,还有php中函数的定义和使用。
标签语法
概念
标签语法,指当PHP代码嵌入到HTML中时,为了让PHP代码的结构更加符合HTML的规范而设定的语法结构。
PHP标签语法不是所有的结构都存在。
PHP标签语法只提供了两种针对
{}
的解决方案。- 分支标签:即当分支语法出现时,可以使用标签语法代替。
- 循环标签:即当循环语法出现时,可以使用标签语法代替。
标签语法规则
- 当分支或循环的
{
出现时,使用冒号:
代替。 - 当分支或循环的
}
出现时,使用相应的end + 标记内容;
代替。
- 当分支或循环的
PHP提供的标记语法
- IF分支
- switch分支
- while循环
- for循环
- foreach循环
- 语法格式:
- 起始标记(if为例):
if(条件表达式):
- 结束标记(if为例):
endif;
- 起始标记(if为例):
案例(九九乘法表)
1 | <!DOCTYPE html> |
函数
定义方法:
1 | function 函数名(参数){ |
使用方法:函数名()
,即可。
return可以返回任何类型的数据。
默认值
如果实际传入的参数没有提供,则会使用默认值。
1 | function f($num1 = 0,$num2 = 0){ |
变量的引用传递
1 | function f($n1,&$n2){ |
注意:函数允许使用时实参对于形参,只是不用而已,但实参不能少于形参。
下面介绍函数的一些高级用法。
作用域
局部作用域(局部变量)
在其他结构(函数)内部定义的作用域。
全局作用域(全局变量)
未在其他结构(函数)内部定义的作用域。
超全局作用域(超全局变量)
即在脚本中的任意位置。
超全局变量:系统定义的预定义变量。
全局变量会自动吸纳到超全局``$GLOBALS`,可以利用超全局变量来保存数据,让数据不受作用域限制。
1 | #此时是给超全局变量增加一个var元素,相当于定义了一个全局变量。 |
1 |
|
$GLOBALS会自动包含全局变量,同时还有以下超全局变量。
- $_GET:自动接收GET提交的数据
- $_POST:自动接收POST提交的数据
- $_COOKIE:自动接收cookie数据
- $_FILES:自动接收文件上传的数据
- $GLOBALS:自己包含自己
一个特殊的关键字global
1 |
|
其含义是在函数内定义一个局部变量,并且与全局变量同名,处于“引用关系”,可以直接使用。
总结:$GLOBALS数组(变量)和global关键字都能实现:在局部作用域使用全局变量。
静态变量
概念:在函数内部定义,可以在函数多次调用时共用的局部变量
- 使用static关键字修饰
- 是在函数内部定义的局部变量
- 在函数加载时初始化(只初始化一次)
- 可以在同一个函数多次调用时共享数据的变化
1 | function display(){ |
使用场景
- 数据需要函数多次共享
- 递归存储数据的时候
强制类型
PHP可以利用强类型来规范函数的输入(参数)和输出(返回值)
- 强类型参数
- 强类型返回值
强类型参数
在定义函数时给形参设定类型
类型规范是PHP的8种类型
强类型的作用
- 实参必须是形参规定类型
- 保护函数内部运行逻辑正确
- 省区函数内部判定逻辑
- 提升解析效率
强类型语法
1
function 函数名(类型 变量名){}
1
2
3function add(float $a,float $b){
return $a + $b;
}强类型的选择
- PHP是弱类型语言,会自动转换类型,一般可以不用。
- 不想在内部进行过多的逻辑判断,可以适用强类型参数进行限定。
强类型返回值
指在函数定义时就规定好函数的返回值类型
强类型是PHP的8种类型
强类型规定后,函数内部的返回值必须是指定类型
想让强类型完全生效,需要提前声明
- declare(strict_types = 1)
强类型返回值语法
1
function 函数名():返回值类型{}
1
2
3
4
5
6
7function is_int($n):bool{
if(is_integer($n)){
return TRUE;
}else{
return FALSE;
}
}
可变参数
PHP提供了一种对于参数不固定的处理方式
- PHP在5.6以后提供了一种主动获取多余的实参的方式
- 可以使用
...
符号实现数组数据的拆分
实例:求两个(或多个)数的和
1 | #定义函数:多余的形参使用...$args保存 |
还可以将实参数组拆分构成多个数据
1 | function my_sub($a,$b){ |
获取所有参数的和
1 | function sum(){ |
可变函数
即一个变量所保存的值刚好是另外一个函数的名字,那么可以通过变量直接访问函数
- 变量的值是一个函数名(字符串)
- 变量+()就可以当作函数名访问函数
示例
1 | function display(){ |
实际运用:通常我们是将自定义的函数作为系统函数或者其他位置的回调函数(callback)使用
1 | #取得一个数的绝对值 |
匿名函数
- 简单匿名函数
- 回调匿名函数
- 匿名函数闭包
简单匿名函数
即函数没有名字,使用变量保存函数的内存地址
1 | 变量 = function(){ |
回调匿名函数
指直接将匿名函数定义在函数的实参中,当作一个实参传递给形参
1 | #求数组元素的所有立方 |
匿名函数闭包
概念
闭包是一个定义在函数内,能都读取其他函数内部变量的函数(闭包函数)
- 函数定义在某个函数内部
- 内部函数是匿名函数
- 内部函数访问外部函数的局部变量
- 不能直接访问,访问需要使用use关键字
1 | function outer($str){ |
闭包函数可以返回给外部函数调用,这样可以使得闭包所占用的外部函数资源不被释放
1 | function outer($str){ |
原理
- 函数outer调用结束,没有释放内存
- outer返回了一个内部闭包函数的引用,所以函数不会释放
- $inner内部闭包函数引用了一个外部函数的局部变量,所以outer也不能释放$str
- $res(‘world’)找到函数执行,并且应用了之前函数的局部变量$str,所以组合输出helloworld。
系统函数
常用的系统函数列表
1、常见输出类
- echo:不需要使用括号
- print_r:输出变量的结构
- var_dump:详细打印变量的结构和数据
- exit/die:输出消息并终止脚本执行
2、常见日期类
time:获取当前时间的时间戳(从格林威治时间1970年1月1日),精确到秒(一个整数)
date:按照指定格式输出时间,可以是当前时间也可以是指定时间戳
1
echo date("当前时间:Y-m-d H:i:s");
strtotime:将任何英文文本日期时间描述转换成时间戳
micotime:获取时间戳和微秒数(精度高),两个用法:
- micotime(true):获取秒数,浮点型。
- micotime(false):获取秒数,字符串型。默认不写参数为false。
3、数学类
- max:获取多个数中最大值(可以实数组)
- min:最小值
- floor:舍去法取整(向下取整),获取不大于当前数值的最大整数
- cell:进一取整(向上取整),获取不小于当前数值的最小整数
- mt_rand:获取指定区间或者0到最大数之间的一个随机整数
- round:根据指定小数位进行四舍五入
- abs:绝对值
- sqrt:开方
- pow:幂次方的运算
- rand、mt_rand:获取两个数之间的随机整数
4、字符串类
输出
print:输出一个字符串
print_r:输出较为详细的信息
var_dump:输出完整信息
字符串去除与填充
trim:消除字符串两端的空白字符或指定字符
ltrim:左边
rtrim:右边
str_pad:将一个字符串使用指定的字符填充到指定的长度
字符串连接与分割
implode:将一个数组的值连接起来组成一个字符串,可以指定连接的符号
join:同上
explode:将一个字符串使用指定的字符分割为一个数组
str_split:将一个字符串按指定的长度分割为一个数组
字符串截取
substr:获取一个字符串指定位置开始的指定长度的子串
strstr:获取一个字符串中某个指定字符首次出现的位置起,到最后结尾处的字符
strrchr:获取一个字符串中某个指定字符最后出现的位置起,到最后结尾处的字符
字符串替换
str_replace:将一个字符串中的指定字符替换为新字符。
substr_replace:将一个字符串中指定位置开始的指定个数的字符,替换为给定的新字符。
字符串长度与位置
strlen:获取字符串的字节长度。
strpos:获取一个字符串中某个子串首次出现的位置。
strrpos:获取一个字符串中某个子串最后一次出现的位置。
字符转换
strtolower:转换为小写
strtoupper:转换为大写
lcfirst:首字母小写
ucfirst:首字母大写
ucwords:所有单词的首字母大写
特殊字符处理
nl2br:将换行符转换为“<br />”标签字符
addslashes:将一个字符串中的特数字符进行反斜杠转义。
htmlspecialchars:将html中的特殊字符转换为html实体字符。
htmlsecialchars_decode:将实体字符转换为原本的字符。
5、数组类
max:获取数组中的最大值。
min:获取数组中的最小值。
count:获取数组的元素个数。
in_array:判断以恶数据是否在指定数组中。$b = in_array(数组,数据);
结果为布尔。
range:生成某个范围的连续数组。例如range(3,6)得到数组array(3,4,5,6);
array_keys:取出所有键并放到一个索引数组中。
array_values:取出所有值并放到一个索引数组中。
array_push:将一个或多个数据放入一个数组的末端。
array_pop:将数组的最后一个单元删除,并返回该单元的值。
array_reverse:将数组反转。
数组的排序
sort:由低到高、rsort:由高到低、asort、arsort等。
数组的查找
in_array():在一个数组中找是否存在某个数据。
array_search():在数组中搜索给定的值,如果成功则返回相应的键名。
array_key_exists():检查给定的键名或索引是否存在于数组中。