PHP基础篇
PHP基本语法
php是一种运行在服务器端的脚本语言,可以嵌入到HTML中
标准代码标记:(最常用)<?php php代码; ?>
1、PHP注释与分隔符
- 行注释: // (一次一行)
- 块注释: /* */ (一次多行)
- 分隔符:; 英文下的分号
2、变量
PHP是一种动态网络开发脚本语言,动态语言特点是交互性,会有数据的传递
-
变量是用来存储数据的、存在名字、通过名字来访问改变数据
-
**变量使用:**定义、赋值、通过变量名访问存储的数据、删除($符号)
(unset(变量名)删除变量)< hr/>下划线
-
**命名规则:**数字、字母、下划线,不能以数字开头
-
预定义变量(都是数组):如 G E T 、 _GET、 GET、__POST等等
-
可变变量:如果一个变量是的值是另一个变量的名字,在变量前面再加一个$就可以访问另一个变量的值
-
变量传值:值传递和引用传递
3、常量
与变量一样用于保存数据,const/constant,一旦定义不可改变的量(数据)
-
常量的定义PHP(不需要用$符号,组成元素与变量一样,以大写为主)
define函数定义:define(‘常量名’,常量值);
const关键字定义:const 常量名 = 值
-
常量的使用与变量一样可以定义特殊常量名,但是访问要注意constant(‘ ’);
-
系统常量:
PHP_VERSION:PHP版本号
PHP_INT_SIZE:整形大小
PHP_INT_MAX:整形能表示的最大值
数据类型
1、三大类八小类
-
简单数据类型(4类):
整形:int/integer,4个字节,表示整数类型(有前提)
浮点型:float/double,8个字节,表示小数或者整形存不下的整数
字符串型:string,系统根据实际长度分配,表示字符串(引号)
布尔类型:bool/boolean,表示布尔类型只有 true/fales
-
复合数据类型(2类)
对象类型:object,存放对象(面向对象)
数组类型:array,存储多个数据
-
特殊数据类型(2类)
资源类型:resource,存放资源数据(PHP外部数据,如数据库、文件)
空类型:NULL,只有一个值NULL(不能运算)
2、类型转换
在很多条件下,需要指定的数据类型需要外部数据(PHP获取的数据)转换成目标数据。
PHP有两种类型转换方式:
- 自动转换/隐式转换:系统自己转换
- 强制转换/显式转换:根据需要的目标类型转换
3、类型判断
通过类型判断函数来判断变量,最终返回变量所保存的数据类型(相同为true,失败为fales):是一组is_开头后面跟类型名字的函数:is_xxx(变量名)
bool类型不能用echo来查看,可以用var_dump
var_dump(变量1,变量2…)
Gettype(变量名):获取类型,得到该类型对应的字符串
settype(变量名,类型):设定数据类型,与强制转换不同
4、整形
-
整形的四种进制
-
进制转换
-
PHP中转换函数
Decbin():十进制转二进制
Decoct():十进制转八进制
Dechex():十进制转十六进制
Bindec():二进制转十进制…
5、浮点型
看mysql的笔记
6、布尔类型
笔记看mysql基础
7、PHP中特殊的运算符(基础省略)
-
连接运算符
是PHP中将多个字符串拼接的一种符号:
‘ . ’ :把两个字符串连接到一起
‘ .= ’: 如A.=b ==> A=A.b
-
错误抑制符
-
三目运算符
-
位运算符
8、计算机码
9、运算符优先级
流程控制(Process control)
代码执行方向:主要有顺序结构,分支结构,循环结构
1、顺序结构(sequence structure)
代码从上往下,顺序执行(最基本的执行结构)
2、分支结构(Branch structure)
- if分支
- switch分支
3、循环结构(Cyclic structure)
-
for循环
-
while循环
-
Do-while循环
-
foreach循环(见数组遍历中)
-
循环控制
文件加载原理
PHP文件在编译过程中出现语法错误,那么会失败(不会执行),但是如果是被包含的文件有错误,系统会执行到保存include这条语句才会报错。
-
include和require区别
require要求较高:如果包含出错之后的代码不在执行
-
文件加载路径
-
文件嵌套包含
函数(function)
是一种语法结构,实现时光功能的代码块封装到一个结构中,从而实现代码的重复利用。
1、函数定义语法与调用:
由关键字function、函数名、参数(形参合实参)、函数体和返回值组成。
function 函数名( 参 数 名 , , 参数名,, 参数名,,参数名…){
//函数体
//返回值:return 结果;
}
**调用基本语法:**函数名(参数);
**注意:**函数的调用可以在函数定义之前,函数在代码执行阶段碰到函数名才会调用,不是在编译阶段
常用命名规范:1、驼峰法:除第一个单词外,后面所有单词首字母大写 2、下划线法:单词之间通过下划线连接
2、函数的传参
-
形参和实参(形参可以看出实参的载体)
形参:不具有实际意义,在函数定义时使用
实参:有实际数据意义,在函数调用时使用
-
引用传参:取地址,能实际改变函数外部的参数 传入的必须为变量,格式为:&$变量名
-
默认值:默认值的定义只能放在最后面,默认值如果存在可以不用传参,默认值必须是常量或者NULL
函数没有明确返回值默认为空可用var_dump()查看。
3、函数作用域
变量能被访问的区域,PHP中作用域严格说有两种,但是PHP内部定义了一些在严格意义之外的一种所以一共有三种:
-
全局变量:用户普通定义的变量(函数外部)(所属全局空间:PHP中只允许全局空间使用,函数内部不能用)
-
局部变量:在函数内部定义的变量(所属函数空间:在PHP中只允许在当前函数自己内部使用)
-
超全局变量:系统定义的变量(预定义变量:$_SERVER , $_POST等)没有访问限制
如果(超全局变量会把全局变量自动纳入 G I O B A L S 里 面 , 而 GIOBALS里面,而 GIOBALS里面,而GIOBALS没有作用域限制,帮助局部访问全局)
如果函数内部使用外部变量:除了$GIOBALS之外,可以通过参数传值
在PHP中还有一种方式能实现全局访问局部,局部访问全局:global关键字
-
静态变量(static)
函数内部定义的变量,用来实现函数共享数据的变量。函数运行结束所有局部变量会清空。
**基本语法:**static $变量名 = 值;(通常定义是直接赋值)
4、可变函数
如果当前有一个变量的值刚好是一个函数的名字,可以用变量+()充当函数名使用。
匿名函数类似可变函数
**基本语法:**变量名=function(){
函数体
}
闭包函数
伪类形
mixed:混合的,可以是PHP中的多种数据类型
Number:数值的,可以是任意数值类型(整数和浮点型)
5、常用系统函数
-
有关输出的函数
print():类似echo输出提供的内容,本质是一种结构
print_r():类似var_dump,但是比var_dump简单,不会输出数据类型,只会输出值。
-
有关时间的函数
data():按指定格式对对应时间戳(从1970年格林威治时间开始计算的秒数),如果没有指定特点时间戳就默认当前
time():获取当前对应的时间戳
micritime():获取微妙级别的时间
-
安照规定格式的字符串转换成时间戳
6、数学相关函数
- max(参数1,参数2…):指定参数中最大的值
- min():比较两个数中娇小的
- rand():得到一个随机数,指定区间的随机整数
- mt_rand():与rand一样,只是底层结构不同,效率比rand高
- round():四舍五入
- cell():向上取整
- floor():向下取整
- pow():求指数 pow(2,8)=2^8
- abs():求绝对值
- sqrt():求平方根
7、有关函数的函数
- function_exists():判断函数名在内存中是否存在
- func_get_arg():在自定义函数中获取指定数值对应的参数
- func_get_args():在自定义函数中获取所有的参数(数组)
- func_num_args():获取自定义函数中参数数量
字符串类型(string)
1、字符串定义
-
单引号字符串
-
双引号字符串
**注意:**引号方式比较适合定义较短(不超过一行)或者没有结构要求的字符串。若有结构要求或过长用一下两种。
-
nowdoc字符串:没有单引号的单引号字符串
$str=<<< ‘ 边界符 ’
字符串内容
边界符;
-
heredoc字符串:没有双引号的双引号字符串
$str=<<< ‘ 边界符(EOD)
字符串内容
边界符;
2、字符串转义
转义:在计算机通用协议中,有一些特定方式定义的字母,系统会特定处理:通常这种方式是用反斜杠加字母如\ r \n: 回车换行
PHP在识别转义字符时也用同样模式:反斜杠+字母
以下为PHP中常用的转义符号
- \’ :在单引号字符串中显示单引号
- \" :在双引号字符串中显示双引号
- \r :代表回车(理论上是回到当前行的首位置)
- \n :代表新一行
- \t :类似tab键,输出4个空格
- \$ : 输出该符号,因为$在PHP中为特殊字符
单引号和双引号的区别
-
单引号中只能识别 \’, 而双引号不能识别 \’ 直接输出 ‘
-
双引号能解析$符号即解析变量,而单引号不能
双引号解析变量要保证变量的独立性,使得其能与内容区分如“ab$adef”会无法解析,应改为“ab KaTeX parse error: Expected '}', got 'EOF' at end of input: a def”或者“ab{a}def” {}为专业符号标识符
结构化定义字符串变量规则:
-
结构化定义字符串对应的边界符有条件
(1)上边界符后面不能跟任何内容
(2)下边界符要顶格
(3)下边界符后面只能跟;,不能跟任何内容
-
结构化定义字符串的内部(边界符之间)的所有内容都是字符串本身
3、字符串长度
-
基本函数strlen();
语法格式:int strlen(string s t r ) — — > s t r l e n ( str) ——>strlen( str)——>strlen(str)返回值为其长度
-
多字节字符串的长度问题:包含中文的长度
**注意:**中文在utf8下占3个字符长度
-
多字节字符串扩展模板:mbstring扩展模块(mb:Multi Bytes)
要先加载PHP中的mbstring扩展,与扩展mysqli模块方式相同
mbstring扩展会带来很多函数(注意还要指定字符集)
4、字符串相关函数
-
转换函数:implode()、explode()、str_split()返回数组
implode(连接方式,数组):把数组中的元素按某个规则连接成一个字符串
explode(分割字符,目标字符串):将字符串按某种格式分割,变成数组如:中国|江西|上饶 ==array(‘中国’,‘江西’,‘上饶’)
str_split(字符串,字符长度)按某种字符长度对字符串进行拆分,返回一个数组
-
去除函数:trim(),ltrim()、rtrim()返回字符串
trim(字符串[,指定字符]):本身默认用来出去两边的空格,但也可以指定去除的内容,按指定内容循环去除两边有的内容:直到碰到一个不是目标字符为止。
ltrim(字符串[,指定字符]):去除左边的
rtrim(字符串[,指定字符]):去除右边的
-
截取函数:substr(),strstr()返回字符串
substr(字符串,起始位置从0开始[,长度]):指定位置开始截取,可以截取指定长度(不知道截取到最后)
strstr(字符串,匹配字符):从指定位置开始,截取到最后(可以用该函数获取上传图片的后缀,来限制上传的图片格式)
-
大小写转换函数:strtolower()、strtoupper()、ucfirst()、ucwords()返回字符串
strtolower(字符串):全部小写
strtoupper(字符串):全部大写
ucfirst(字符串):字符串首字母大写(注意有空格的情况)
ucwords(字符串):整个字符串以空格为分隔符的单词首字母大写
-
查找函数:strpos()、strrpos()返回值为整形否则返回fales
strpos():判断字符在目标字符串中出现位置(首次)
strrpos():判断字符在目标字符串中出现位置(最后一次)
-
替换函数:str_replace()
str_replace(匹配目标,替换的内容,字符串):将目标字符串中部分字符串进行替换
-
**格式化函数:**printf()、sprintf()打印
printf/sprintf(输出字符串有占位符,顺序占位内容):格式化输出数据
%开头如%d、%s类似c语音中的
-
其他:str_repeat()、str_shuffle()返回字符串
str_repeat(字符串,n):重复字符串n次
str_shuffle(字符串):打乱字符串
数组
数组:array,数据的组合,值将一组数据(多个)存储到一个指定的容器中,用变量指向该容器,然后可用通过变量一次性得到容器中的所有内容。
1、数组的定义语法
- 使用关键字array定义(最常用):$变量 =array(元素1,元素2,…)
- 使用中括号来包裹数据:$变量=[元素1,元素2,…]
- 隐形定义数组,给变量增加一个中括号,系统自动变成数组: 变 量 [ ] = 值 1 , 变量[]=值1, 变量[]=值1,变量[下标]=值
2、PHP数组特点
-
可以整数下标或者字符串下标(默认位置以为当前最大)
整数下标:索引数组
字符串数组:关联数组
-
不同下标可以混合存在:混合数组
-
数组元素的顺序域放入顺序为准,跟下标无关
-
数组下标的自增长特性:从0开始自动增长,如果中间手动出现较大的,那么后面的自增长元素从最大的值+1开始
-
特殊值下标的自动转换:ture/fales/Null
-
php中数组元素没有类型限制,没有长度限制(存储位置是堆区)
3、多维数组
数组里面的元素是数组
-
二维数组:数组里的元素为一维数组
-
多维数组:在二维的数组元素中可以继续是数组,PHP没有维度的概念可无限嵌套,不建议使用三维以上的数组
访问一维数组:$arr[下标]
访问二维数组:$arr[一维数组下标] [二维数组下标]
-
异形数组(不规则数组):数组元素不规则,有普通变量也有数组
4、数组的遍历
普通数组数据的访问都是通过数组元素的下标实现访问,如果说数组中所有的数组都需要依次输出出来。就需要我们用一些简化的规则来实现自动获取下标已经输出数组元素。
- Foreach遍历语法
原理:foreach遍历,本质是数组内部有一颗指针,默认是指向数组元素的第一个元素。foreach就是利用指针去获取数据,同时移动指针。
(1)foreach还会重置指针:让指针指向第一个元素
(2)进入foreach循环:通过指针取得第一个元素,然后将下标取出放在对应的下标变量中(如果存在),将值放在对应的值变量中。(指针下移)
(3)进入循环体内部,执行代码
(4)重复2和3步骤,直到指针指向最后一个数组元素之后
基本语法如下:
foreach( 数 组 变 量 a s [ 数组变量 as[ 数组变量as[下标 =>] KaTeX parse error: Expected '}', got 'EOF' at end of input: 值){ //通过下标访问元素的下标,通过$值访问元素的值
}通常:如果管理数组(字母下标),就需要下标,如果是数组下标就直接访问值
如:foreach( a r r a s [ arr as [ arras[key=>] $value){
echo $value, < br/ >;
}
**注意:**在进行数据存储定义的时候,通常二维数组不会为两个维度的key下标都为数字,一般是一堆以为数字(无意义),二维为字符串(数据库表字段),所有在进行遍历的时候,通常只需要对一维数组进行遍历,取得二维数组元素,然后二维数组元素通过下标去访问
- for循环遍历数组
基于已知边界条件(起始和结束)然后有条件的变化
对应条件:(1)数组长度:count(数组)可得到数组长度
(2)数组元素下标是有规律的数字
如:for( i = 0 , i=0, i=0,len=count( a r r ) ; arr); arr);i< l e n ; len; len;i++){
echo ‘key is :’, i , ‘ a n d v a l u e s i s : ’ , i,‘and values is:’, i,‘andvaluesis:’,arr[$i],‘< br/ >’;
}
-
while配合each和list遍历数组
(1)while 是在外部定义的边界条件
(2)each函数使用:each能从数组中获得当前数组指针所指向的元素的下标和值,拿到之后将数组指针下移,同时将拿到的元素下标和值以一个四个元素的数组返回,取不到时返回fales
索引方式返回
0(下标) —》取得元素的下标值
1—》取得元素的值
关联方式返回
key —》取得元素的下标值
values—》取得元素的值
(3)list函数使用:**list是一种结构(**没有返回值的概念),list提供一堆变量去从一个数组中取得元素值,然后依次存放到对应的变量中(批量为变量赋值:值来源于数组)
list必须从索引数组中去获取数据,而且必须从0开始(**注意:**顺序存储)
list与each十分适合配合:each一定有0和1下标元素
list(变量1,变量2)=each(数组) //是一种赋值运算,但是可以得到fales结果
5、数组的相关函数
-
排序函数:对数组元素进行排序,都是按ASCII吗进行比较,可以进行英文比较。**注意:**返回值是bool类型,所以要先接收在打印
sort($数组名):顺序排序(下标重排)
rsort($数组名):逆序排序
asort($数组名):顺序排序(下标保留)
arsort($数组名):逆序排序
ksort($数组名):顺序排序按照键名(下标)
krsort($数组名):逆序排序
shuffle($数组名):随机打乱数组元素
-
指针函数
reset():重置指针,将数组指针回到首位
end():将数组指针导到最后一位
next():将数组指针下移,取得下一个指针的值
prev():将数组指针上移,取得上一个指针的值
current():获取当前指针的值
key():获取当前指针下标
**注意:**next()和prev()可能会移到离开数组,只能用reset()和end()重置
-
其他函数:
count():统计数组元素数量
array_push():在数组中加入一个元素(在最后加,用后数组会改变)
array_pop():从数组中取出一个元素(在最后减,用后数组会改变)
array_shift():从数组中取出一个元素(在最前面减,用后数组会改变)
array_unshift():在数组中加入一个元素(在最前面加,用后数组会改变)
**PHP模拟数据结构:**栈和队列
array_reverse():数组元素反过来
in_array(元素名,$数组名):判断元素值是否存在
array_key_exists():判断键是否存在
array_searcch():判断键值是否存在
array_key():获取一个数组所有下标,返回一个索引数组
array_values():获取一个数组所有值,返回一个索引数组
-
补充
array_merge( 数 组 名 , 数组名, 数组名,数组名…):把一个或多个数组合并成一个新数组
array_slice($数组名,开始位置下标,[长度]):从数组中取出一段数组
一个指针的值
prev():将数组指针上移,取得上一个指针的值
current():获取当前指针的值
key():获取当前指针下标
**注意:**next()和prev()可能会移到离开数组,只能用reset()和end()重置
-
其他函数:
count():统计数组元素数量
array_push():在数组中加入一个元素(在最后加,用后数组会改变)
array_pop():从数组中取出一个元素(在最后减,用后数组会改变)
array_shift():从数组中取出一个元素(在最前面减,用后数组会改变)
array_unshift():在数组中加入一个元素(在最前面加,用后数组会改变)
**PHP模拟数据结构:**栈和队列
array_reverse():数组元素反过来
in_array(元素名,$数组名):判断元素值是否存在
array_key_exists():判断键是否存在
array_searcch():判断键值是否存在
array_key():获取一个数组所有下标,返回一个索引数组
array_values():获取一个数组所有值,返回一个索引数组
-
补充
array_merge( 数 组 名 , 数组名, 数组名,数组名…):把一个或多个数组合并成一个新数组
array_slice($数组名,开始位置下标,[长度]):从数组中取出一段数组
array_splice( 数 组 名 , 开 始 位 置 下 标 , [ 长 度 [ 数组名,开始位置下标,[长度[ 数组名,开始位置下标,[长度[replacement]]):移除或者替换数组中的一部分,返回数组