一、变量、常量、运算符
1、可变变量
在变量前面加上两个$$
,如$$name
,这表示可变变量,可以动态的设置和使用,先设置一个普通变量,一个可变变量会获取了一个普通变量的值作为这个可变变量的变量名
$a = 'b';
$$a = 'a';
//相当于
$b = 'a';
2、引用赋值
$a = 'a';
$b = &$a;
//相当于
$b = 'a';
改变 $a
的值,$b
也会变化。但是:存储结构是分开的,即使 unset($a)
,$b
还在。
3、变量类型
int() 整型
str() 字符串
array 数组
bool() 布尔类型 true false
object() 对象
float() 浮点数(小数)
resourse() 资源型 (图片、文件流等)
null 空值
4、全局变量
$_SESSION
$_COOKIE
$_POST
$_GET
$_REQUEST
$_FILES
$_ENV
$_SERVER
$_ENV
和$_SERVER
一样都是包含服务器端环境变量的数组。
但是没有$_SERVER
那样完整,而且有时候会为空是因为php.ini
的配置项为variables = 'GPCS'
。想要$_ENV
的值不为空 改为variables = 'EGPCS'
,但是导致一些性能损失,在生产环境中禁用。
5、常量
定义常量
//大小写敏感
define('HELLO','Hello Word!');
echo constant('HELLO');
// 输出 Hello Word!
//大小写不敏感
define('HELLO','Hello Word!',TRUE);
echo constant('hello');
// 输出 Hello Word!
6、魔术常量
__LINE__ 文件中当前行号
__FILE__ 文件的完整路径和文件名
__DIR__ 文件的路径
__FUNCTION__ 当前函数的名称
__CLASS__ 当前类的名称
__METHOD__ 类的方法名
__NAMESPACE__ 当前命名空间的名称
7、类型转换
settype($a,'需要转换的类型');
(int)
(bool)
(float)
(string)
(array)
(object)
intval() 获取变量的整数值
floatval() 获取变量的浮点数 doubleval()等效
strval() 获取变量的字符串值
8、判断类型
is_bool()
is_int()
is_float()
is_string()
is_array()
is_object()
is_resource()
is_null()
is_numeric() 函数用于检测变量是否为数字或数字字符串
is_callable() 函数用于检测函数在当前环境中是否可调用。
9、运算符
算术运算符:+ - * / % ++ --
连接运算符:.
赋值运算符:= += -= *= /= %= .=
比较运算符:>(gt)、<(lt)、==、===、!=、<>、!==、>=(gte)、<=(lte)
逻辑运算符:and、&&、or、||、not、!、xor(逻辑异或,两边不同返回TRUE,两边相同返回FALSE)
位运算符:&、|、^、~、<<、>>
对整数进行操作的
其他运算符:.?: 、@、=>、->
二、常用函数
1、输出函数
echo();
print();
var_dump();
var_export();
printf();
print_r();
dump(); //TP框架封装的
dd(); //laravel 框架封装的 相当于 dump(); + die;
2、字符串函数
①返回为bool
isset();
empty();
②返回值为字符串
substr('源字符串','开始的地方',['需要返回的长度']); 截取字符串的一部分,第一个字符位置为0
substr_replace('源字符串','要插入的字符串','何处开始替换',[需要替换多少个,0表示直接插入]);
substr_count('源字符串','要搜索的字符串',['何处开始'],['搜索的长度']); //一个字符串在另一个字符串中出现的次数
strstr('源字符串','搜索的字符串',[默认 false从出现的到尾(包含出现的第一次),true 从出现的到头]);
返回搜索字符串第一次出现及之后的字符串, 不存在则返回 false
strrchr('源字符串','搜索的字符串'); 返回搜索字符串最后一次出现以及之后的字符串 不存在返回 false
sre_replace('搜索的字符串','替换的字符串','源字符串',[替换数量]); 替换字符串中的一些字符
str_repeat('源字符串','重复次数'); 将字符串重复多少次
③返回值为数字的
strpos('源字符串','要查找的字符串',['何处开始']); 字符串在另一个字符串中第一次出现的位置
strrpos('源字符串','要查找的字符串',['何处开始']); 字符串在另一个字符串中最后一次出现的位置
str_word_count('源字符串',['0-默认,返回找到的单词数目、1-返回包含字符串中单词的数组、2-返回一个数组,键名是单词的位置,键值是单
词']); 计算字符串中的单词数(空格分开即为单词)
strcmp('要比较的第一个字符串','要比较的第二个字符串'); 比较两个字符串 相等返回 0,1大于2 返回正数,小于返回负数
strnatcmp('要比较的第一个字符串','要比较的第二个字符串'); 使用自然数的方法比较两个字符串
strcasecmp('要比较的第一个字符串','要比较的第二个字符串'); 比较两个字符串 不区分大小写
number_format('要格式化的数字',['保留多少小数'],['小数点的标识'],['千分位的标识']); 格式化数字 默认 ,千分位标识 .小数点标识
round('数字',['四舍五入的位数']);
strlen('字符串'); 返回字符串的长度
mb_strlen('字符串(可为中文记为 1)','utf8'); 返回字符串的长度 多字节记为 1
3、数组函数
PHP数组有三种类型:
- 索引数组:用数字做键名的数组
- 关联数组:用字符串做键名的数组
- 多维数组:包含一个或多个数组的数组
①排序类
sort(); 以升序对数组进行排序
rsort(); 以降序对数组进行排序
asort(); 根据 值 ,以升序对关联数组进行排序
arsort(); 根据 值 ,以升序对关联数组进行排序
ksort(); 根据 键 ,以升序对关联数组进行排序
krsort(); 根据 键 ,以升序对关联数组进行排序
natsort();用‘自然数排序’对数组进行排序 自然数排序 2比1大, 10比2大,计算机排序 10小于2 因为10的第一个字节为 1
natcasesort(); 用‘自然数排序’对数组进行排序 不区分大小写
usort(); 使用自定义的比较函数对数组进行排序
②键值操作类
array_values('源数组'); 返回数组所有的值(数组),
array_keys('源数组',['指定值,只有该值的键返回'],['true-返回带有指定键值的键名,数组5和字符串 ‘5’ 是不同的,false-默认']); 返回数组
array_search('要搜索的键值','源数组'); 返回 字符串 值
in_array('查询的值','源数组'); 判断查询的值是否在数组中
is_array('源数组'); 判断是否为数组
array_key_exists('key','源数组'); 查询数组中key是否存在
array_flip('源数组'); 反转数组 键与值 对调
array_reverse('源数组'); 数组顺序反转
array_column('源数组(多维)','需要返回值的列',['用作返回数组 键 的列']); 返回多维数组中某个单一列的值
③元素个数和唯一性
array_unique('源数组'); 移除数组中重复的值,只保存第一个值
array_count_values('源数组'); 对数组中所有值进行计数
count('源数组');返回数组中元素的数目
④回调函数
array_filter($arr,"function"); 把$arr放到函数function中处理,【返回判断为TRUE的数据组成新数组,键值保留】
array_walk($arr,"function"[,"data"]); 把$arr放到function(&$v,$k,$data)中处理【返回值为bool】
array_map("function",$arr,$arr2,$arr3,....); 把所有数组返回到回调函数统一处理,【返回数组】
array_reduce($arr,myfunction[,initial]):把一维数组$arr中的值依次传到自定义函数myfunction($v1,$v2)的v2上,
v1为累加值类似于( .= ),[如果有initial,先把其当v1传进去]【返回字符串】
⑤拆分,合并,分解,接合数组
array_slice($arr,1[,2]); 在$arr中,从第二个开始取[,返回俩个值]【返回新数组(对原数组无影响),键值保留】
array_splice($arr,1[,2,"aaa","bb"]); 删除或替换,从$arr第二个开始取,删除或替换2个值【返回值为新数组,拆掉原数组】
array_combine($arr1,$arr2); 数组$arr1为KEY,$arr2为VALUES结合形成新索引数组【返回索引数组】
array_merge($arr1,$arr2,$arr3...); 数组进行合并,保留键值,有重复,后来者居上【返回新数组】array_merge发现有key值相同的,取后者;$arr1+$arr2 发现有key值相同的,取前者,第二个重复的值丢弃
array_intersect($arr1,$arr2) 返回两个数组的交集,键值不变
array_diff($arr1,$arr2) 返回两数组的差集,返回的值为第一个数组的值,键值不变
array_chunk($arr,2) 分割数组,把$arr按照【2个为一组】均等分割【返回一个二维数组】
⑥数组的数据结构
array_shift($arr) 从开头,删除数组第一个元素
array_unshift($arr,"one","two") 从开头,添加元素
array_pop($arr) 从结尾,删除数组最后一个元素
array_push($arr,"aaa"); 从结尾,添加元素
current($arr) 返回数组中的当前单元 比如是关联数组是不知道下标,可以输出当前数组的办法解决
key($arr) 返回当前指针指向元素的键值
next($arr) 当前指针下移
pre($arr) 当前指针上移
end($arr) 指针指到最后
reset($arr) 指针回归到开头
unset($arr) 销毁此数组
⑦其他
array_rand($arr,2); 随机返回两个$arr数组当中的key【返回值为值或者数组】
shuffle($arr) 随机的重组$arr,顺序变乱【返回新数组,保留键值】
array_sum($arr); 返回$arr的value的和【返回一个值】
range(0,5,['间隔,默认为1']) 创建一个包含指定范围的元素的数组
http_build_query($arr) 把关联数组转换成一个经过urlencode加密的URL eg:array["a"=>2];=>URL:a=2&
4、文本处理类
strtoupper($str) 字母全转为大写【返回全大写字符串】
strtolower() 字母全转为小写【返回全小写字符串】
strtotime('2020-05-25 22:59:10'); 指定时间转换为时间戳【返回时间戳】
str_pad($str,length,[---,STR_PAD_BOTH]); 在$str的两边填补“---“,注意,length若小于$str长度,不填补
trim($str[,"a",STR_PAD_BOTH]) 去除两边/左/右的空白或"a",默认是空白,或自定义字符
ucfirst() 整个$str首字母大写
ucword() $str每个单词首字母大写
5、HTML类处理
htmlspecialchars($str) 函数把【预定义字符】转换为【 HTML 实体】,&转换成&
htmlspecialchars_decode($str); 把【HTML实体】转换成【预定义字符】,&转换成&
htmlentities($str);,函数把【预定义字符】转换为【 HTML 实体】,&转换成&,有乱码问题,注意第二第三个参数,若编码不正确,会在实体化时把信息丢失
html_entity_decode($str) 把【HTML实体】转换成【预定义字符】,&转换成&, > 转成 <
addslashes($html); 添加转义字符“/”
stripslashes($html); 删除转义字符“/”
strip_tags($html); 去除HTML标签
nl2br($str) 在$str中的换行/n前插入<br>,因为\n在源码可以换行,但是在浏览器窗口不行,有这个就可以
iconv( '源编码','转换为编码',$str); 转化字符格式 $file_name = iconv("gb2312","utf-8",$file_name);
6、正则函数
原则,能用字符串函数解决不用正则,速度问题;
①字符串的匹配查找
preg_match($pattern,$subject,$arr); 按正则$pattern处理$subject,第一次匹配结果返回到数组中【函数的返回值为匹配次数】
preg_match_all($pattern,$subject,$arr) 按正则$pattern处理$subject,全部匹配结果返回到数组中【函数的返回值为匹配次数】
②字符串的替换
preg_replace($pattenr,$replace,$str); 【强大的字符串处理函数】 在$str中,把$parrern匹配的值替换成$replcae【返回值为处理后的字符串】
str_replace($str,"aaa","bbb"); 把$str中的aaa换成bbb
③字符串的分割和链接
preg_split($pattern,$str);通过一个正则表达式分隔字符串【返回值为数组】
举例:$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
结果Array([0] => hypertext,[1] => language[2] => programming)
explode(",",$str[,$limit_num]); 把$str按照","分割成一个数组[可选参数为返回数组的元素个数]【返回一个分割后的数组】
impolde("+",$arr); 把$arr里的元素按照“+”链接成一个字符串
7、文件处理函数
①基础函数
file_exists($file) 文件是否存在,【true/false】
filesize($file) 返回文件的大小【大小字节/出错false】
is_readale($file) 是否可读【返回bool】
is_writeable($file) 是否可写【返回bool】
is_executable($file) 是否可执行【返回bool】
filectime($file) 文件创建时间【时间戳】
filemtime($file) 文件修改时间【时间戳】
fileatime($file) 文件访问时间【时间戳】
stat($file) 返回文件的大部分信息【文件信息数组】
②目录的基本操作
basename($file) 返回文件名,index.php
dirname($file) 返回文件的路径,c://php/
pathinfo($file) 返回该文件路径的所有信息
extension($file) 文件后缀
③目录复制,删除,统计大小
本质:依靠递归思想,对目录的的循环遍历,通过每一个文件的操作,得出结果
函数:
copy('要复制的文件','目的地'); 复制文件
unlink($file); 要删除的文件
filesize($file) 统计大小
④遍历目录
opendir($file) 打开一个目录,参数为目录名或目录路径【返回资源型的目录句柄$dir_handle,无权限返false】
readdir($dir_handle); 读取目录,参数为目录句柄,while,返回当前指向对象的名字,目录指针后移【返回filename,没有是返false】
closedir($dir_handle) 关闭打开的目录
rewinddir($dir_handle) 打开一个目录,列出其中的文件,重置目录句柄,再次列出其中的文件,然后关闭
⑤建立和删除目录
mkdir("dir_name"); 建立一个空的目录
rmdir("dir_name"); 删除一个空的目录
unlink("file_name") 删除一个文件,当删除目录时,必须删除该目录下的文件
8、文件的基本操作
fopen($fileName,"模式字符r,w,x") 打开一个文件,【返回值为资源型$handle】
fclose($handle) 关闭打开的文件【返回BOOL】
fwrite($handle,"$data") 把$data写入$handle文件,先清空后写入,【成功返回$handle,失败返回false】
file_put_contents($filename,$data); 它是上边三个合起来的效果
file_get_contents($filename) 读取文件里的信息【返回字符串】
flock($handle,$operation) 用$operation锁定文件$handle
①复制、删除、重命名
copy($file1,$file2); 复制$file1,形成$file2【返回BOOL】
unlink($file); 删除$file文件【返回BOOL】
rename($file1,$file_new_name); 重命名【返回BOOL】
②文件的上传
is_upload_file($_FILES['file']['tmp_name']) 检查是否合法
move_upload_file($_FILES['file']['tmp_name'],$url); 上传合法文件到$url
③文件下载
header('content-disposition:attachment;filename='.basename($filename)); 表示附件方式下载
header('content-length:'.filesize($filename));
readfile($filename);
9、SQL函数
mysql_connect('localhost',"root","root"); 连接诶数据库
mysql_select_db('data',$conn); 选择数据库名
mysql_query('set names utf8'); 设置编码
mysql_affect_array(); 试返回值为关联/索引数组
mysql_affect_row(); 返回索引数组
mysql_affect_assoc(); 返回关联数组
mysql_num_rows(); 返回上一次select的查询语句条数
mysql_affected_rows(); 返回上一次insert,update,delete的数据条数
mysql_close(); 关闭数据库
10、数学函数
ceil() 向上取整
floor() 向下取整
round(); 四舍五入
abs(); 取绝对值
rand(10,100) 随机取值
mt_rand(10,100) 随机取值,算法不同,速度更快
fmod() 返回除法浮点形余数
max(int/$arr) 取最大值
min(int/$arr) 取最小值
pow(1024,2) 返回1021的2次幂
11、时间函数
date_default_timezone_set()('PRC'); 设置时区为中国 date.timezone ="PRC";//PHP.INI
time(); 默认获取当前时间,【返回时间戳格式】
micritime(); 获取当前时间【返回毫秒的时间戳】
mktime(H,i,s,m,d,Y) 指定时间转为时间戳,参数为空的时候作用与time()相同【返回时间戳格式】
strtotime('2015-10-10 10:10:10'); 指定时间转换为时间戳【返回时间戳】
date("Y-m-d H:i:s",time()); 转换时间戳为日期格式【返回目标格式的字符串】
getdate() 获取当前时间,【返回一个数组,参数年,月,日等都有】
12、URL处理函数
urlencode($url) 对该URL进行编码;原因:防止乱码,解决空格的呢个字符不能传递问题,form也是此编码格式传递
urldecode($url) 对该URL进行解码
parse_url($url) 返回该URL的所有信息,[scheme协议][host域名] [path路径][query参数] 【返回含信息的数组】
pathinfo($url) ["dirname"目录名] ["basename"文件名] ["extension"文件后缀]【返回含信息的数组,下标不同】
get_meta_tags($url) 获取该页面的所有META标签【返回关联数组】
13、JSON
json_encode($data); 对变量进行JSON编码
json_decode($data) 对JSON格式的字符串进行解码
json_last_error(); 返回最后一次反生的错误
14、其他函数
sleep(10) 脚本执行到这里后,延迟10秒继续执行
serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。
unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。