PHP笔记整理

: : 这是一份详细的PHP学习笔记

PHP变量与常量

PHP声明变量

整型变量

1
2
//声明变量,赋值数字
$a = 100;

浮点型变量

1
2
//声明变量,赋值浮点数
$a = 0.1;

字符型变量

1
2
3
4
//声明变量,赋值字符串
//可用''和""声明
$str = 'iloveyou';
$str = "iloveyou";

布尔型变量

1
2
3
4
5
//声明变量,赋值为真
$t = true;

//声明变量,赋值为假
$f = false;

空类型变量

1
2
//声明变量,赋值为空
$n = null;

注意:

1
2
3
//PHP变量声明时区分大小写
$aa = 200;
$Aa = 100;

创建常量

1
2
3
4
5
//创建一个常量,不能销毁、改变、覆盖
define('PATH',111);
echo PATH;

const PATH = 111;

PHP变量类型相关

查看变量类型与值

1
2
//查看变量类型与值
var_dump($b);

设置空类型

1
2
3
4
5
//直接设置空类型
$b = null;

//手动销毁变量,变量为空类型
unset($b);

判断变量类型函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//查看变量是否为空
is_null($b);

//查看变量是否为布尔类型
is_bool($b);

//查看变量是否为数字类型
is_int($b);

//查看变量是否为字符串
is_string($b);

//查看变量是否为浮点数
is_float($b);

判断空类型函数

isset()函数

1
2
//变量为空时返回false,否则返回true
isset($a);

empty()函数

1
2
//变量为空时返回true,否则返回false
empty($a);

浮点类型注意事项

1
2
3
4
5
6
7
8
9
//浮点数,有精度误差,不能用于比较
$a = 0.1;
$b = 0.2;
if($a+$b == 0.3){ //结果为假
echo '真';
}
else{
echo '假';
}

字符串相关

字符串赋值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//一般字符串赋值
$a = 'xxx';

//单引号强转字符串,不检测变量
$b = '$a bbb'; //$b='$a bbb'

//双引号可以检测变量
$b = "$a bbb"; //$b='xxx bbb'

//不能换行,会解析成空格
$b = "bb\n\rb"; //$b='bb b'

//单引号全解析成字符串
$b = 'bb\n\rb'; //$b='bb\n\rb'

//变量用花括号括起来可以解析变量
$b = "{$a}666888"; //$b='xxx666888'

//php中用.连接字符串
$b = $a.'666888'; //$b='xxx666888'

//引号里面套用引号可以使用\转义
$b = "ilo\"vey\"ou"; //$b='ilo"vey"ou'

//禁止使用引号时,可以使用此方法写入字符串,xxx是任意名称,格式不能变
$b = <<<xxx
ddddddddd
xxx;//$b='ddddddddd'

字符串自加自减

1
2
3
4
5
//字符串的自加情况
$a = 'zbz';
$a++; //$a='zca'
$a--; //无效
var_dump($a);

字符串函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$a = 'stringxxx哈哈哈';

//查询字符串长度,一个汉字占三个字节
$aa = strlen($a);

//查询字符串长度,一个汉字占一个字节
$aa = mb_strlen($a);

//将指定字符串进行替换并用$b计数替换次数,(需替换字符串,替换的值,被操作的字符串,替换次数计数)
$aa = str_replace('x','ss',$a,$b);

//字符串的截取(字符串,从哪开始,截取长度)
$aa = echo substr($i,0,3);

//重复字符串(字符串,重复次数)
$aa = echo str_repeat('aaa<br>',3);

PHP类型转换

自动类型转换

1
2
3
4
//PHP自动转换时,会尽最大努力转换为数字
$a = '1e3' + '1'; //1e3为科学计数,$a=1001
$a = '12a' + 10; //$a=22
$a = 'a12a' + 1; //$a=1

强制类型转换

1
2
3
//强制类型转换,(变量,'转换类型')
settype($a,'int');
var_dump($a);

PHP设置页面跳转

设置头部页面跳转

1
2
//设置跳转页面
header('Location:https://www.baidu.com');

设置头部页面延时跳转

1
2
//延时5s进行跳转
header('Refresh: 5; url=https://www.baidu.com');

PHP基础命令

查看PHP版本

1
2
//查看PHP版本
echo PHP_VERSION;

查看操作系统

1
2
//查看操作系统
echo PHP_OS;

查看文件路径

1
2
//查看文件路径
echo __FILE__;

反引号执行命令

1
2
3
//反引号可以执行其中的命令
$a = 'zzz';
`echo {$a} >> 1.txt`; //PHP文件将在当前目录下创建1.txt并写入字符串zzz

获取时间戳

1
2
//获取当前时间的时间戳
time()

设置时区

1
2
//设置为中国时区
date_default_timezone_set('PRC');

将时间戳格式化

1
2
3
4
//Y表示年(完整年份,即2022),y年(简写,即22);m月;d日;	连接符随意
//H小时(24小时制)h小时(12小时制);i分;s秒; 连接符随意
//注意,不设置时区将使用格林威治时间
date('Y-m-d H:i:s',time())

PHP注释

单行注释

1
//单行注释

多行注释

1
2
3
4
5
/* 多行注释  
***
******
*********
*/

逻辑运算符相关

!==不全等于

1
2
3
4
5
6
7
8
9
10
//!==不全等于,只有两者全等时返回false,否则返回true
$a = 100; //类型相等,值不等,返回ture
$a = '101'; //值相等,类型不等,返回ture
$a = 101; //值相等,类型也相等,返回false
if($a !== 101){
echo 'true';
}
else{
echo 'false';
}

逻辑运算符权重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*逻辑运算符权重
//权重最高
&&逻辑与

//权重第二
||逻辑或

//权重第三
xor逻辑异或 两边不相同为true 相同为false

//权重第四
!逻辑非

//权重最低
>,<,>=,<=,==
!0>=0时先运算!0
*/

if(!0>=0){ //结果为true
echo "true";
}
else{
echo "false";
}

特殊符号转义

1
2
3
4
5
6
7
8
9
$a = '<h1>666</h1>';

//将特殊字符转换为实体字符
$ax = htmlspecialchars($a);
echo $ax."<br>";

//将实体字符转换为特殊字符
$av = htmlspecialchars_decode($ax);
echo $av."<br>";

数据加密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$i='123456';

//将数据进行md5加密
$im=md5($i);
echo $im.'<br>';

//sha1加密
$ih= sha1($i);
echo $ih.'<br>';

//密码hash加密
$iph = password_hash($i,PASSWORD_DEFAULT);
echo $iph.'<br>';

//判断密码hash是否正确并输出
if(password_verify('123456','$2y$10$1FTwc35iFQCbj8A1eE6S.uaWnmFJf4lKtBlQWsswc0Qzf/FEE1V86')){

echo '成功<br>';

}else{

echo '失败';

}

数组相关

数组基础

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//声明数组
$arr = array(1,2,'3',4,5);

//声明数组
$arr = [1,2,3,4,'5'];

//在数组最后添加新数据
$arr[] = 100;

//修改数据
$arr[1] = 8000;

//删除特定元素
unset($arr[2]);

//删除整个数组
unset($arr);

//关联数组,类似于python的字典
$arr = ['name'=>'tome','age'=>26];

//关联数组添加新数据
$arr['sex']='man';

遍历数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$users = [

['name'=>'张三', 'sex'=>'男', 'age'=>18],
['name'=>'李四', 'sex'=>'女', 'age'=>20],
['name'=>'王五', 'sex'=>'男', 'age'=>21],
];
//循环遍历数组,$key存放下标,$value存放对应值
foreach ($users as $key => $value){

foreach ($value as $a => $b){

echo $b.'<br>';

}

}

数组转换

1
2
3
4
5
//将数组转换成字符串并返回,包含键值对
json_encode($arr[$x])

//将字符串转换成数组并返回,true表示返回一个数组,false返回一个对象
json_decode($arr[$i],true);

php自带函数

判断数组

1
2
//判断是否为数组
is_array();

数组计数

1
2
//计数,计算数组有几个元素
count($arr);

数组取值

1
2
3
4
5
//从数组内拿出值并赋值给另一个数组,下标将会变成0,1,2...
$arr = ['name'=>'tome'];
$a=array_values($arr);
//$a[0]=tome
echo $a[0];

获取键名

1
2
//返回数组中所有的键名
array_keys( )

判断数组中是否存在

1
2
//检查值是否在数组中
in_array('tome',$arr);

数组填充

1
2
//对数组进行填充(数组,填充长度填n就到下标n-1,填充内容)
$ac = array_pad($arr,10,'lll');

数组值求和

1
2
//求出数组值的和
array_sum($arr);

数组合并

1
2
//将两个数组合并为一个数组
array_merge($arr,$ac);

数组反序

1
2
//将数组值调转顺序
array_reverse($arr);

数组去重

1
2
//去除数组中的重复项
array_unique($arr);

数组尾部添加值

1
2
//向数组$arr添加一个值到最后,该函数返回值为数组$arr的长度
array_push($arr,1);

数组删除

1
2
//将数组$arr最后一个值删除
array_pop($arr);

数组头部添加

1
2
//向数组头部加入数值
array_unshift($arr,5,6,7);

字符串拆分数组

1
2
//把一个字符串, 按某些字符拆分,  返回一个数组
explode( 分割符, 字符串 )

数组连接成字符串

1
2
//把数组中每个元素, 用连接符拼接成一个字符串
implode( 连接符, 数组 )

正则匹配

正则规则编写

1
2
3
4
5
//匹配规则,第一种写法
$reg = '/a[bc]y/';

//匹配规则,第二种写法
$reg = '#a[bc]y#';

正则规则示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// [bc]意思为b或c,即匹配[]中任意一个字符且
$reg = '/a[bc]y/';

// [^0-9]意思为不是0-9,即匹配不在[]中的任意一个字符
$reg = '/a[^0-9]y/';

// /a[A-z]y/可以匹配a-z大小写字母;注意/a[a-Z]y/会报错,因为a的ascll码比Z大
$reg = '/a[A-z]y/';

// /a(acy)y/ 先匹配aacyy,然后再匹配acy;会产生歧义,不建议使用
$reg = '/a(acy)y/';

// /\d{2,4}/ 匹配数字,最少两位,最多四位,匹配尽量多位数,即默认为贪婪模式
$reg = '/\d{2,4}/';

// /\D{2,4}/ 匹配非数字,最少两位,最多四位
$reg = '/\D{2,4}/';

// /\w{2,4}/ 匹配数组字母下划线,最少两位,最多四位
$reg = '/\w{2,4}/';

// /\W{2,4}/ 匹配非数组字母下划线,最少两位,最多四位
$reg = '/\W{2,4}/';

// /\s{4}/ 匹配空白符,精确匹配四位
$reg = '/\s{4}/';

// /\S{4}/ 匹配非空白符,精确匹配四位
$reg = '/\S{4}/';

// /^\w/ 只匹配开头第一位
$reg = '/^\w/';

// /\w{3}$/ 只匹配结尾连续3位
$reg = '/\w{3}$/';

// /^aby$/匹配开头为aby,结尾为aby,且限定了长度
$reg = '/^aby$/';

// /.*/匹配除了换行符的任意字符任意次数
$reg = '/^aby$/';

正则匹配函数

1
2
3
4
5
6
7
//正则匹配函数,返回一个二维数组和所有符合的结果
//参数解释:(正则规则,匹配字符串,查找结果<可以是一个未定义的变量>)
preg_match_all($reg,$str,$arr);

//正则匹配函数,返回一个一维数组,且当找到第一个符合的结果时返回结果不继续查找
//参数解释:(正则规则,匹配字符串,查找结果<可以是一个未定义的变量>)
preg_match($reg,$str,$arr);

php报错相关

错误抑制符@

1
2
3
4
5
6
//@错误抑制符
@$a = $_GET['id'];
var_dump($a);

//可用三元运算符代替
$a = isset($_GET['id'])?$_GET['id']:'';

PHP报错等级

1
2
3
4
5
6
7
8
//变量未定义,提示性错误
getType($a);

//缺少参数,警告性错误
getType();

//函数名不对,致命性错误
getTypes();

配置文件设置PHP报错

1
2
3
4
5
6
7
8
9
10
11
12
13
通过php.ini决定报错处理方式

//是否在页面上显示错误信息,On打开,Off关闭
display_errors=On/Off

//是否把错误记录在日志文件中
log_errors=On/Off

//日志文件位置
error_log='phpstudy\Apache\logs\error.log'

//设置哪些错误需要报告,其他错误将不报告;所有错误都报告,除了提示性错误
error_reporting=E_ALL&~E_NOTICE

PHP代码临时设置PHP报错

1
2
3
4
5
6
7
8
9
10
11
//获取php.ini中的某项设置
ini_get('error_log')

//一次性获取所有配置,以数组形式返回
ini_get_all()

//临时修改php.ini中的某项设置,仅当前文件有效
ini_set('display_errors','On')

//设置报错的等级,0为不报错,1为致命性错误才报错,-1为报告所有错误
error_reporting(0);

PHP文件操作

文件引入

1
2
3
4
5
6
7
8
//引入文件,可引入多次,引入失败后面代码继续执行
include '文件名';

//引入文件,只引入一次
include_once ('文件名');

//引入文件,引入错误后面代码不执行
require '文件名';

打开文件

1
2
3
//以写的方式打开文件,没有文件时将会创建;(文件名,打开模式)
//w为覆盖写入模式,w+为覆盖读写模式;a为追加写入模式,a+为追加读写模式;
$f = fopen('demo.txt','r');

文件读取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//从ly.txt中读取数据
$arr = file_get_contents('ly.txt');

//读取文件
fread($f,filesize('demo.txt'));

//在文件指针位置读取一个字符
fgetc($f);

//在文件指针位置读取一行
fgets($f);

//将整个文件读取到一个数组中
file('demo.txt');

文件写入

1
2
3
4
5
6
7
8
//对文件ly.txt进行覆盖写入
file_put_contents('ly.txt', $as);

//对文件ly.txt进行追加写入
file_put_contents('ly.txt', $as, FILE_APPEND);

//写入文件
fwrite($f,'hello,world');

关闭文件

1
2
3
//关闭文件
//注意:打开文件后一定要关闭
fclose($f);

PHP目录操作

打开目录

1
2
3
4
5
//第一步,打开目录
//将目录路径赋值给变量
$dir = './test666';
//打开指定目录
$f = opendir($dir);

读取目录

1
2
3
4
5
6
7
8
//第二步,读取目录
//遍历目录
while ($fs = readdir($f)){
//输出文件夹中除了.和..的文件
if(!($fs=='.'||$fs=='..')){
echo $fs;
}
}

关闭目录

1
2
//第三步,关闭目录;打开文件后一定要记得关闭
closedir($f);

目录/文件操作函数

查看文件或目录是否存在

1
2
//查看文件或目录是否存在,返回值为true或false;可用相对路径和绝对路径
file_exists("./test");

判断是否为文件夹

1
2
//判断是否为文件夹,返回值为true或false;
is_dir('time.php');

判断是文件还是文件夹

1
2
//判断是文件还是文件夹,返回file或dir
filetype('time.php');

判断文件大小

1
2
//判断文件大小为多少字节,返回文件字节数
filesize('time.php');

查看上次访问的时间戳

1
2
//返回上一次访问的时间戳
fileatime('time.php');

查看创建文件的时间戳

1
2
//返回创建文件的时间戳
filectime('time.php');

查看上次修改的时间戳

1
2
//返回上一次修改的时间戳
filemtime('time.php');

返回文件上级路径

1
2
//返回文件到上一级的路径,只返回自己写的路径;返回php/test666/
dirname('php/test666/666.txt');

获取文件名

1
2
//拿取文件名,清除多余的路径;返回666.txt
basename('php/test666/666.txt');

获取文件绝对路径

1
2
//返回文件的绝对路径
realpath('time.php');

获取文件路径信息

1
2
//获取文件路径信息,返回一个数组
pathinfo('time.php');

复制文件

1
2
//可以带路径复制文件,即复制到指定路径内
copy('time.php','./php/ts.php');

创建文件夹

1
2
//创建文件夹
mkdir('ls');

删除文件夹

1
2
//删除文件夹,文件夹必须为空
rmdir('ls');

删除文件

1
2
//删除文件
unlink('time.php');

cookie相关

设置cookie

1
2
//参数解释(cookie名,cookie值,cookie失效时间,cookie有效地址)
setcookie('classid','look',time()+30,'/');

删除coolie

1
2
//删除cookie
setcookie('users','',time()-1,'/');

获取cookie

1
2
//通过超全局变量获取cookie值
$cookies = $_COOKIE['classid'];

PHP与数据库联动

与数据库建立连接

1
2
//建立MySQL连接(主机地址,用户名,密码,数据库名)
$link = mysqli_connect('localhost','root','root','test');

设置编码

1
mysqli_set_charset($link,'utf8');

执行sql语句

1
2
3
//执行sql语句
$sql = 'select * from stu';
$result = mysqli_query($link,$sql);

获取返回值

1
2
3
4
5
6
7
//mysqli_fetch_row()返回一个一维索引数组
//mysqli_fetch_assoc()返回一个一维关联数组
//mysqli_fetch_array()返回一个一维索引和关联的结合数组
//mysqli_fetch_all($result,MYSQLI_ASSOC);MYSQLI_ASSOC二维关联数组,MYSQLI_BOTH二维索引加关联数组

//获取从数据库中取到的数据
$arr=mysqli_fetch_assoc($result);

关闭数据库连接

1
2
//关闭数据库连接
mysqli_close($link);