2025年细说php入门学习

细说php入门学习文章目录 1 php 基本语法 2 变量 3 数据类型 1 整型 interger 2 浮点型 float 3 布尔型 boolean 4 字符串 string 5 数组 array 7 对象 boject 8 资源 resource 9 空 null 4 常见函数以及基本语法 1 三种常见函数 2 四种常见输出 3

文章目录

1. php基本语法

2. 变量

3. 数据类型

(1). 整型 interger

(2). 浮点型 float

(3). 布尔型 boolean

(4) 字符串 string

(5). 数组 array

(7). 对象 boject

(8). 资源 resource

(9). 空null

4. 常见函数以及基本语法

(1). 三种常见函数

(2). 四种常见输出

(3). 自动类型转换

(4) .强制类型转换

(5) . 常量

(7). 运算符

5.流程控制

(1) 分支结构 if / switch

(2). 循环结构

1.while循环结构

2.doWhile 循环

4.for循环

5.混合写法:

6.多重循环

7.流程控制符

6. 函数function

(1).函数命名规范

(2) . 函数返回值

(3). 参数

(4). 变量作用域

(5). 静态变量

(6). 自定义函数

7. 数组 array

(1).定义格式:

(2).遍历数组

(3). 指针函数

(4). 预定义数组

8. 正则

9. 时间

10. 错误

(1) 错误的三种领域

(2).错误级别

(3). 屏蔽错误

(4). 自定义报错

(5). 逻辑错误

11. 文件

(1) 文件属性: 常见分类

(2) 文件分类

(3). 文件路径

(4)文件-目录-操作

(5) . 文件加载

(6) 递归函数

(7) 文件内容 文件操作

(8) 接收上传内的文件

(9) 验证

(10) 高频率 uuid 设置唯一的id

(11) 文件下载

12 .面向对象

(1) 对象

(2) 伪对象 $this

(3) 连贯操作 OOP

(4)魔术方法

(5) PDO 操作数据库 ( 数据库抽象层 )

1. php基本语法

php 服务器语言

服务器: Apache服务器

PHP文件: 存放wamp/www目录

访问方式

只能通过浏览器访问,访问地址**: lcoalhost**

代表访问本地服务器

PHP是什么?

超文本预处理器

一句话: 一种用来开发动态网站的服务器脚本语言

PHP文件

格式: ***.php

定界符

注释

// 单行

#单行

/* 多行 */

设置编码

header( ‘content-type: text/html; charset-编码 ‘)

PHP基本语法

每一条PHP命令均已分号结尾.发表该php命令结束其中,最后一条命令可以省略分号,推荐加上分号

php报错 不是当前行 就是上一行

2. 变量

含义: 变量理解为数学中的未知数

声明变量:

格式: $变量名=值

内存: 一旦申明一个变量,就会占用一定的内存
+ 当程序结束,没有人在引用变量时,就会被删除

		+ 注意点: 若变量没有值,则被称之为未定义变量,该变量会报错.

变量命名规范

有数字,字母和下划线组成

不能以数字开头

支持中文., 但不推荐

变量名要有意义

可变变量

将一个变量的值,作为另一个变量名来使用

$name = '山鸡';
$山鸡 = '乌鸡';
$乌鸡 = '呜呜呜';
echo $$$name;

则会输出 : 呜呜呜

引用变量值:

传值

$a = 100;
$b = $a;
$b = 200;
echo $a,$b
这时,$a=100 $b=200;
传的是值所以$a不改变

传址 &

$a = 100;
$b = &$a;
$b = 200;
echo $a,$b
这时,$a=200 $b=200;
传的是址所以$a改变

3. 数据类型

1. 标量类型
int整型
float浮点型
bool布尔型
string字符串
2. 复合类型
array数组
boject对象
3. 特殊类型
resource资源
nul
判断是否为某种类型
is_string ( 变量)判断是否为字符串
is_numeric( 变量)判断是否为数字字符串
is_scalar( 变量)判断是否为标量
is_int( 变量 )判断是否为整型
is_float(变量)判断是否为浮点型
is_array( 变量)判断是否为数组
is_object( 变量)判断是否为对象
is_resource( 变量)判断是否为资源

(1). 整型 interger

最大整型: PHP_INT_MAX 超过最大整型转为浮点型.

进制基数前缀
二进制0-10b
八进制0-70
十进制0-9
十六进制0-9 a-f0x

进制转换:

任意进制—> 十进制:
基数 * 进制 ^ 次方

十进制—> 转任意进制
将十进制除以 任意进制, 结果到倒取余

----

(2). 浮点型 float

浮点型:

小数

科学计数法 2e3 2e4 …3*10 的3次方…

浮点数不适合做运算

有效位数: 从前向后,第一个非0数字开头, 向后保留14位.

(3). 布尔型 boolean

布尔型 bool 的值:

true 对,肯定.是,1,可以…

false 错,否认,否,0,不可以…

作用: 当运算不能直接表达, 一般会使用bool来表达状态

有 七种 值与false等价:
false
0
0.0
‘’ , ‘0’
null
空数组
未定义的变量

(4) 字符串 string

格式:

单双引号 : 单双引号的共同特性: ( 单双引号可以互插,不能自插. )
单引号:

不解析变量

不解析转义字符,但解析转义转义字符.

+ 转义符: \
+ 常见转义: \n 换行 \r 回车 \t 制表符 Tab
+ 转义 转义字符
+ \' 普通单引号
+ \" 普通双引号
+ \\ 普通斜杠
+ $ 普通$符,不再有变量声明的意义了

双引号:

解析变量 变量最好用{}包起来

解析转义字符

heredoc结构

$a = <<    xxoo;

(5). 数组 array

定义: 容器,可以容纳任意数据

声明:

格式1: $变量名[ ] : 值

格式2: $变量名 = [ 值1, 值2 , …]

格式3: $变量名 = array(值1,值2,…)

组成:

数组是由键和值 组成

数组的键: int 或者 string
​ 键的别名: 偏移量 下标 索引

数组的值: 任意类型的值

操作数组:

读取: 通过键来读取数组的值

修改: 通过已有的键 来修改数组的值

新增: 通过没有的键 来新增数组的值

删除: 通过unset( )函数来删除值

(7). 对象 boject

一切皆对象

简单获取一个对象 obj = new stdclass; var_dump(obj);

(8). 资源 resource

任何文件都是资源

简单获取一个资源
fopen( 文件路径, 文件打开方式 r 只读 w写入)

(9). 空null

什么都没有过,占有内存,但内存中没有具体内容

常用与占位

echo 不能输出null

直接赋值 null

未定义的变量

被删除的变量 nuset

4. 常见函数以及基本语法

(1). 三种常见函数

在PHP中: 如果只是为了输出一句话
简化为

三种常见函数功能返回值
empty(变量 )判断一个变量是否为空( 只要与false等价,都为空)空 => true // 非空 => false
isset(变量 )判断一个变量是否设置,(只有null 和 未定义变量是没有设置过的)设置 => true // 未设置=> false
unset(变量 )删除变量, 从而释放内存返回值: 无

内存 注意点:

每定义一个变量,系统就会分配一个内存给变量

当内存没有被任何变量引用时,就会自动释放

函数: 一个函数没有返回值时, 强行接收, 则只会接收到null

(2). 四种常见输出

echo

支持intfloat, string, resource 的输出

属于 语法结构, 不是函数

print 或 print( )

支持int,float,string,resource的输出

print 语法结构

print( ) 函数
​ 返回值: int

print_r( );

除了bool 和null 不能输出,其余都可以输出

函数,返回值:bool

输出理论无限制,实际受限于内存

var_dump

支持 任意类型

函数,返回值:无

输出有上限

小结:

​ print_r 适合大批量数据输出

​ var_dump 仅仅用于测试, 信息全面(文件地址,行高,数据类型,值,长度)

(3). 自动类型转换

弱类型语言: 支持隐式转换

强类型语言: 不支持隐式转换

隐式转换: 偷偷将数据类型 进行转换

PHP 属于 弱类型语言

(4) .强制类型转换

临时转换 只是暂时将变量类型转为其他类型,但本声不变. 运算符强制转换 (bool)str 布尔型 (int)str 整型 (float)str 浮点数 (string)str 字符串 (array)str 数组 (object)str 对象 函数强制转换 intval(str) 整型 floatval(str) 浮点型 boolval(str) 浮点型 strval(str) 字符串

永久转换
settype ( 变量 , 类型 )

(5) . 常量

经常不变化的量,即为常量.

注意点:

严格区分大小写,推荐大写

常量不能重新赋值

常量不能重新定义

格式: const 常量名 = 常量值

格式: define ( 常量名, 常量值 , bool ) bool值确认是否区分大小写.

预定义常量
预定义常量 功能 PHP_INT_MAX 最大整型数 M_PI 圆周率 PHP_OS 当前PHP所在系统 PHP_VERSION 当前PHP版本

魔术常量
预定义常量 __DIR__ 获取当前文件的所在目录 __FILE__ 获取当前文件的盘符路径 __LINE__ 获取当前行号

(7). 运算符

算数运算符

+ - * / % 加减乘除取余.

余数 % 除了求余之外,还有2种特殊功能

余数的正负: 取决于 第一位的正负

取余的范围: %x 结果: [ 0 ,x )

结果范围    x ~ y

0 ~ y-x %(y-x+1)
+x
------------------
x ~ y

结果: %(y-x+1) + x
求奇偶数 
余数为0 即为偶数
余数为1 即为奇数

结束范围: 0~1
%2
1. 求任意数字的 个位数 0 ~ 9
$a = 123;
var_dump( $a % 10 ); 10的1次方

2. 求任意数字的 最后两位 00 ~ 99
$a = 123;
var_dump( $a % 100 ); 10的2次方

3. 求任意数字的 最后n为
%10的n次方

自增\自减

​ ++ 变量a 自己给自己+1
a++ 先返回a 在给a+1
++a 先给a+1 在返回a

​ – 变量自己给自己-1
a– 同上
–a 同上

字符串拼接

拼接符 . 小数点

主要用于:

字符串.变量

变量.字符串

变量.变量

单引号的速度 比 双引号的块

为了整个项目的运行速度考虑:

​ 如果变量较少,推荐用单引号,变量用拼接

​ 如果变量较多,使用双引号,变量用{} 包起来

赋值运算符
赋值运算符 含义 = 将 = 右边的 赋给 左边的 += a += b ==> a = a + b -= 同上 *= 同上 /= 同上 %= a .= b ==> a = a . b

比较运算符
比较运算符 含义 注意点: 所有的比较结果: 都是bool值 > >= 大于 大于等于 < <= 小于 小于等于 == 判断两边的值是否相等 === 全等: 判断两边的值是否相等 且 数据类型相等 != 判断两边的值 是否不等 !== 不全等: 只有全等时为false, 其余都是true

逻辑运算符
逻辑运算符 含义: 注意: 所有的逻辑运算符结果都是: bool值 逻辑与 && 两边为真即为真, 一边为假即为假 逻辑或 一边为真即为真, 两边为假即为假 逻辑非 ! 真即是假, 假即是真

三元运算符
三元运算符 ++ – ! …等 一元运算符 + – * / % …等 二元运算符 条件表达式 ? true环境 : false环境 三元运算符:仅仅适合 做一些简单判断

5.流程控制

(一). 顺序结构 : 代码从上往下依次执行

(二). 分支结构 : 通过 if /switch 进行分支选择

(三). 循环结构 : 将一些功能 不断重复去执行

(1) 分支结构 if / switch

分支结构: 具有跳过某一段代码的功能

if 分支结构

分支写法1:
if ( 条件表达式 ) true环境1
//不用加{} 条件仅仅只能影响紧跟在if后面的一条命令
分支写法2:
if ( 条件表达式 ){

true环境
}
//条件仅仅能影响后面 {} 内的所有代码.
分支写法3:
if ( 条件表达式 ){

true环境
}else{

false环境
}
// 条件为真时,则进入true环境,否则进入false环境
分支写法4:
if ( 条件表达式1 ){

true环境1
}elseif( 条件表达式2 ){

true环境2
}elseif( 条件表达式3 ){

true环境3
}...
// 从多个表达式中,选择一个满足( 符合先来后到的原则 )
分支写法5:
巢状分支.
if ( 条件表达式1 ){

if ( 条件表达式2 ){

if ( 条件表达式3 ){

...
}
}
}

switch分支结构

switch( 标志 ){ 

case '标志1': 代码块; break;
case '标志2': 代码块; break;
case '标志3': 代码块; break;
case '标志4': 代码块; break;....
default 代码块;
}
//不写break 则匹配到符合条件 后的所有case都会执行
写上break 则只会执行符合条件的一条代码.
如果没有找到标志, 则会执行 default

(2). 循环结构

1.while循环结构

​ while( 条件表达式 ){

​ 代码块
​ }

如果条件为真 -> 则执行1次 代码块 -> 再回到条件表达式 -> 再次判断条件 真 -> 再执行1次代码块 …

当条件为假 -> 立马结束循环 -> 准备执行循环外的代码

$i=0;
while($i<10){

echo $i;
$i++;
}
//输出 123456789
2.doWhile 循环

while 和dowhile的区别

while 先条件判断,在决定是否执行代码块

dowhile 先执行一次代码块,在条件判断,然后决定是否执行代码块

doWhile循环
do{

代码块1
}while( 条件2 )
执行顺序 1 2 12 12
注意点: 如论条件是否成立至少会执行一次代码块
4.for循环

​for循环

格式: for( 初始值1; 循环条件2; 循环增量3){

​ 代码块4
​ }

执行顺序
1 243 243 243
当条件2 为假时,则结束循环

初始位置和增量位置 可以不写值

for($i=0; $i<10; $i++){ 

echo $i;
}
//输出 0123456789
5.混合写法:
以下所有写法,都是在html代码块中写的.
1.for 与 HTML 混合写法

html原生代码

--------------------------------------
2.if 与 HTML 混合写法

html原生代码

--------------------------------------

html代码 true

html代码 false

----------------------------------

html原生代码 true

html原声代码 true

html原生代码 true
...
6.多重循环

多重循环: 在循环中 嵌套循环

7.流程控制符

break
立马结束分支/循环,准备执行分支/循环外的代码

continue
立马结束当前一轮的循环,准备进行下一轮循环.

for 碰到 cotinue,立马进入增量3

while 碰到 continue,立马进入条件判断

die /exit
立马结束程序,die之前的代码依旧执行

die ( 内容 )

exit ( 内容 ) 在结束程序之前,在输出一次内容

6. 函数function

作用 : 用函数封装一些功能, 重复利用

函数分类:

系统函数: 数学,字符串,数组,其他函数等

自定义函数: 根据用户需求来封装函数

自定义函数: ( 声明 )

格式:
function 函数名 ( 参数 ){

​ 代码块
}

组成:

关键字: function

函数名 : 要有意义 ( 动词+ 名词)

( ): 声明函数时的参数, 称之为形式参数, 简称形参

{ }: 函数体代码块, 函数功能具体代码

特性:
函数不调用不执行
函数一旦调用,name函数执行之后,会返回到调用函数的地方

小结:
功能相似, 位置相同 ,用 循环
功能相似, 位置不同, 用函数

调用函数:
函数名( )
函数名 ( 实参 )

(1).函数命名规范

命名规范

由数字,字母和下划线组成

不能以数字开头

不区分大小写

命名形式

驼峰命名法
从第二个单词开始,首字母大写
function addUserName( ){ }

帕斯卡命名法
每个单词首字母都大小 ( 大驼峰 )
function AddUserName( ){ }

下划线命名法
function add_user_name( ){ }

函数名不能重名
function var_dump(){ }
函数名不能重名包括系统函数和自定义的函数.

函数名要有意义
看到函数名 就大致能猜出是什么意思
多个单词组成的函数名: 动词 + 名词
​ getName( )
​ sendMsg( )
​ setInfo( )

(2) . 函数返回值

关键字: return

无return: 当函数的代码块全部执行, 会自动返回到调用函数的地方,没有返回值(自然结束) 若强行接收返回值,则得到null

有return : 当函数的代码块执行到return时,则立马返回到函数调用的地方,返回return值(提前结束)

返回值的类型

可以返回任意类型

如何返回多个值

将多个值存入一个数组中,最终返回数组几个.

在外面通过数组一个一个取出

function demo3(){ 

$a = 10;
$b = 10.5;
$c = [$a, $b];
return $c;
}

(3). 参数

形参: 在声明函数时给的参数 parameter

实参: 在调用函数时给的参数 argument

参数个数差异会有何种不同

实参个数 = 形参个数 完美

实参个数 > 形参个数

多余的实参被抛弃,

形参已按照先来后到的原则进行接收

实参个数 < 形参个数

多余的形参: 1.被当成未定义的变量 会报错

​ 2.采用默认值

实参个数不确定时???

计算器: 多个数字进行累加

形参 一个都不要写

通过几个函数来处理所有的实参

函数功能
func_get_args( )以数组的形式接受所有的实参
func_get_arg( n )值接受下标为n 的实参
func_num_args( )获取实参的总个数
function demo4(){ 

$sum = 0;
$total = func_num_args();
for ($i=0; $i < $total; $i++) {

$sum = $sum + func_get_arg($i);
}
echo $sum;
}

(4). 变量作用域

变量作用域: 变量只能在指定的区域 起作用

全局变量: 在函数外部定义的变量

局部变量: 在函数内部定义的变量
注意:
​ 默认情况下:
​ ①. 全局变量 不能在局部环境中使用
​ ②. 局部变量 不能在全局环境中使用
​ 特殊情况下:
​ ①. $GLOBALS[ 变量名 ]
​ 可以在任意环境中使用, 该变量名 只能是全局环境中的变量
​ ⑤. global 变量
​ 该变量可以在函数外部直接使用

$a = 10; //全局变量
function demo1(){

global $b;
$b = 20; //局部变量
echo $GLOBALS['a'];
//通过 $GLOBALS[ 全局变量名 ] 即可在局部环境中使用 全局变量
}
demo1();
// 在全局环境中, 可以输出 global修饰的 局部变量
echo $b;

(5). 静态变量

关键字 : static

定义: 在函数结束时,不会被删除,当下一次在调用次函数时,可以获取上一次静态变量值.

仅限于函数内部使用

function demo2(){ 

static $b = 50;
echo $b.' ';
$b++;
}
demo2(); 50
demo2(); 51
demo2(); 52...

(六). 函数技巧

变量技巧
可变变量: 将一个变量的值 作为另一个变量名 来使用
引用变量
函数技巧
可变函数: 将一个变量的值 作为函数名 来使用
引用函数: 通过 &符 将内存地址赋予
// 引用函数例:
function demo3(&$x){

$x++;
echo 'x = '.$x.'
';
}
$b = 20;
demo3($b);
echo 'b = '.$b.'
';

(6). 自定义函数

小技巧:
做任何功能, 考虑以下几点

1. 函数名   
2. 参数
几个形参
形参要不要默认值
3. 核心功能
如果 核心需要 参数配合, 其余数值配合, 可以先做 模拟数据
4. 补充
缺什么参数, 补什么参数
缺什么值, 补什么值

7. 数组 array

(1).定义格式:

array(
键 => 值
key => value,
key => value,
...
key => value,
)

键: 只有int 或 string .
如果设置键为 float ,bool等其他类型,则会强制转为int 或string.
键的别名: 下标 偏移量 索引, index offset

值: 任何类型

分类
索引数组: 键为 int
关联数组 : 键为 string

格式: 数组名[键] = 值 数组名 = [ 键1=> 值1, 键2 => 值2 ,…]

小结

true = 1 = 1.x         //等价
false = 0 = 0.0 = '0' = 0.x
null = '' = 未定义变量
非法下标:
数组
对象

多维数组
在数组中, 值设为数组,即为多维数组

(2).遍历数组

基本遍历方法: for while doWhile

指针遍历方式: foreach

指针遍历: 不需要考虑初始值, 不需要考虑增量, 不需要考虑条件

只能接受当前一轮的键 , 每一次循环, 都只能接收一个键或值

擅长遍历 非索引,非规律数字的数组
foreach( 数组名 as 键 => 值 ){

代码块
}
若只需要值, 不需要用键, 可以简化写法
foreach( 数组名 as 值 ){

代码块
}

(3). 指针函数

函数名功能
current( )获取当前指针所指向的值
key( )获取当前指针所指向的键
next( )将指针 下移一位
prev( )将指针 上移一位
reset( )将指针重置到第一位
end( )将指针重置到最后第一位
each( )获取当前指针的键和值, 且下移一位

一旦超出范围, 是无法通过next 或 prev 返回数组中

next 和 prev 相对性的 移动指针

解决方案: 通过 reset 或 end 回到数组中

(4). 预定义数组

php系统预先定义好的”数组”.

预定义数组名功能
$GLOBALS获取全局环境中所有可用的变量 (超全局变量)
$_GET接收所有以get方式传递过来的值
$_POST接收所有以post方式传递过来的值
$_FILES用于接收上传的文件
$_COOKIE存储浏览器端的cookie
$_SESSION存储服务器端的session
$_REQUEST接收get, post 和cookie 的值
$_SERVER存储服务器相关的信息. 例如: 服务器名, 地址, 参数, 协议, IP …
$_SERVER的数组中
下标描述
HTTP_HOST主机名
HTTP_USER_AGENT终端, 浏览器信息
REMOTE_ADDR客户端IP
SERVER_ADDR服务器IP
SCRIPT_FILENAME脚本地址( 盘符 )
SCRIPT_NAME脚本地址( 网址 )
REQUEST_METHOD请求方式
REQUEST_URI请求地址 (带参数)
QUERY_STRING请求参数

字符串可以当索引数组来用.

      0123456
$a = 'abcdefg';
访问 字符c
echo $a[2];
echo $a[6];
超出范围, 返回 空字符串
衍生: 遍历字符串时, 得到 空字符串, 则证明字符串已经遍历完了
echo $a[999];
var_dump($a[999]);

8. 正则

正则表达式 含义 : 用某种模式去匹配字符串的一个公式

功能:由正规字符查询 替换操作

组成: 有正规字符和一些特殊字符构成

/^[0-9]+abc$/
1.定界符 /
2.开始标志 ^
3.[0-9]原子
4.元字符
5.abc原子

可见原子:
unicode编码表中用键盘输出后肉眼可见的字符

标点;“‘ _ ? . 等等

英文字母数字 a-z,A-Z,0-9

汉字、日文、阿拉伯文等其他语言文字

Σ θ ∈ ≌ 等数理化公式符号

其他可见字符

不可见原子:
unicode编码表中用键盘输出后肉眼不可见的字符

换行, 回车,制表符,空格. 与其他不可见元素

元字符

| 元字符:

原子的筛选方式
|匹配两个或者多个分支选择
[]匹配方括号中任意一个原子
[^]除了括号内的不可匹配,[]外匹配任意一个原子
2. 原子归类
.匹配除了换行符之外的任意字符
\d匹配任意一个十进制数字 [0-9]
\D匹配任意一个非十进制数字 [ ^0-9]
\s匹配一个不可见原子 [\n\t\r]
\S匹配一个可见原子 [ ^\n\t\r]
\w匹配任意一个数字字母或下划线 [0-9a-zA-Z]
\W匹配任意一个非数字字母或下划线 [ ^ 0-9a-zA-Z]
3. 量词{n} 表示其前面的一个原子恰好出现n次
{n,} 表示其前面的一个原子最少出现n次
{n,m} 表示其前面的一个原子最少出现n次,最多出现M次.
* 匹配0次,1次,或者多次其前面的原子 {0, }
+ 匹配1次或者多次其前面的原子 {1, }
? 匹配0次或者1次 其前面的原子 {0,1}
4. 边界控制, 模式单元, 模式选择符
^ 匹配字符串开始位置
$ 匹配字符串结尾位置
() 匹配其中的整体为一个原子
( | ) 匹配其中的两个或更多的选择之一, 分隔多选一模式
5. 模式修正符 在定界符的后面
贪婪匹配 U 匹配结果存在歧义时,取其长 例: .*/U
懒惰匹配 U 匹配结果存在歧义时,取其短 .*?/U
忽略空白 X 匹配结果忽略空白
大小写匹配 i 匹配结果不区分大小写

单次匹配函数
preg_match( 正则, 对象, 结果) 结果是一个数组 返回每个匹配到的原子 返回值时1或者0
​ 参数:
​ 正则: 根据需求设计正则
​ 对象: 将对象匹配正则
​ 结果: 以数组形式接收 匹配的结果, 可省略
返回值: 成功的匹配的次数
成功: 1次
失败: 0次
常用于: 判断是否匹配成功

匹配全部函数

preg_match_all( 正则, 对象 [,结果])

返回值: 匹配的次数
​ 成功: >= 1
​ 失败: = 0

例:
只获取字符串中的所有汉字 \x{
4e00} ~ \x{
9fa5}
$preg = '/[\x{4e00}-\x{9fa5}]/u';
$total = preg_match_all($preg, $str, $result );

正则替换函数

preg_replace( 正则, 替换值, 对象 )

常用于敏感字等…

例:
$str = 'MMP, 你是不是脑残啊, 脑子是不是不好使啊, MMP';
敏感词库
$keywords = ['MMP', '脑残'];
替换敏感字 占用了几位就几个星星
foreach($keywords as $v){

1. 统计占几位
$num = preg_match_all('/./u', $v);
2. 将 * 重复 num次
$star = str_repeat('*', $num);
3. 替换敏感词
$str = preg_replace("/{
$v}/", $star, $str);
}
echo $str;

正则函数 过滤 —- 向后引用

preg_grep( 正则, 数组 )

1. 过滤不符合正则规定的格式 	
​ 2. **一般与向后引用一起使用**

3. **向后引用**: \1 后面\1 与 前面第一个( )匹配的值 一模一样
​ \num 后面\num 与 前面第num个( )匹配的值 一模一样

条件: 在使用\1 或 \2 或 \num 之前, 前面得要有 ( ) 小括号

注意: 在字符串中进行使用, 可以用 1 或 2 或

( ) 单元模式

将( )内的内容当做一个整体, 作为一个大原子
( 这个大原子里面可能有好几个原子 但是看做一个原子了哦~~~)

( ) 内的内容送进 子模式组

注意点:  **被小括号包起来后** ,**被匹配的值 会进入到接收结果的数组中.** 也就是**子模式组**
例: $time = '2019-01-23';
$preg = '/(\d{4}) - (\d{2}) - (\d{2}) /x';
preg_match($preg, $time, $result);
var_dump($result);
取消子模式:
(?: 正则) 仅仅保留 当成一个整体的作用, 不再具备送进子模式组的功能
例: $time = '2019-01-23';
$preg = '/(?:\d{4}) - (\d{2}) - (\d{2}) /x';
preg_match($preg, $time, $result);
var_dump($result);

9. 时间

属性名功能
date_default_timezone_set ( ‘PRC’ );设置时区为中国
date_default_timezone_get ( UTC );获取格林威治时间,所谓的世界标准时间 (默认UTC)
time ( )获取时间戳 从1970年-现在的秒数
格式化时间 data(格式 [, 时间戳] )非字母 随便写, 都是原样输出——- 字母严格区分大小写(大多数的字母都具有特殊意义)
Y year4位年份 2019
y year2位年份 19
m month月份 01-12
d day天 01-31
H hour24小时 00~23
h hour12小时 01~12
a am/pm上午/下午
A Am/Pm上午/下午
i minute分钟 00~59
s second秒 00-59
microtime ******微秒 获取的是一个时间戳
z今天是今年的第几天
W本周是今年的第几周
t本月一共多少天
mktime( 时,分,秒,月,日,年 )自定义时间 返回值:时间戳
strtotime( )字符串转为时间戳 返回值: 时间戳strtotime可以将字符串转为时间戳 配合data格式化时间 将其转为直观的年月日时间
now本地现在的时间
yesterday前一天
tomorrow明天
last year前一年
next year明年
last minute上一分钟
last week上一周
5 day5天后
-5 day5天前
10 second10秒之后
最多支持到2038年

10. 错误

(1) 错误的三种领域

语法错误 最常见,也最容易修复
若文件中,有任意一行代码发生错误语法,name整个文件一行代码都不会执行

运行时错误 在代码的解析过程中,不合理,则报错.运行时错误
比较常见 , 相对容易修复
​ 有些运行时错误,会终止程序的运行
​ 有些运行时错误,不会终止程序的运行

逻辑错误
最麻烦的错误, 不会提示错误 也不会终止程序.

(2).错误级别

error 1 致命错误

wrning 2 警告错误,不会终止程序

norice 8 提示错误,不会终止程序

(3). 屏蔽错误

在开发测试中建议全部打开查看错误,在正是上线中,建议全部屏蔽提高用户体验度

屏蔽方式1:
@ : 错误抑制符
​ 那边变量报错,就在那里加@ 仅限于小代码块范围使用

屏蔽方式2: 店长推荐 使用函数来屏蔽

error_reporting(0);关闭错误报告
error_reporting(1);显示错误报告
error_reporting(E_ALL);显示所有的错误报告
error_reporting(E_ERROR);只显示 error 错误报告
error_reporting(E_WARNING);只显示 warning 错误报告
error_reporting(E_NOTICE);只显示 notice 错误报告
error_reporting(E_ALL ^E_WARNING);除了 warning 不报, 其余都报
error_reporting(E_ALL & ~E_WARNING);除了 warning 不报, 其余都报
error_reporting(E_ALL ^E_NOTICE);除了 warning 不报, 其余都报
error_reporting(E_ALL & ~E_NOTICE);除了 notice 不报, 其余都报

屏蔽方式3:

通过 ini_set() 临时改变”配置文件”

ini_set('error_reporting', E_NOTICE);
ini_set('error_reporting', 8);
echo ini_get('error_reporting');

屏蔽方式4:

前面的3个屏蔽方式, 仅仅限于本文件的错误屏蔽, 不能屏蔽其他文件的错误

方式4: 通过直接 修改配置文件, 来屏蔽错误提示 (影响到整个服务器)

1 配置文件地址: wamp/bin/apache/apachex.x.x/bin/php.ini
2 修改配置1: error_reporting = 常量
3 修改配置2: display_errors = On 开启错误提示 Off/关闭错误提示
4 注意: 在修改任意配置, 需要重启服务器, 才能起作用

(4). 自定义报错

trigger_error(报错信息, 错误类型)
​ E_USER_ERROR
​ E_USER_WARNING
​ E_USER_NOTICE

错误日志
error_log(s1, s2, s3)

s1: 报错信息

s2: 消息类型 3: 将错误信息写入目标文件

s3: 目标文件

例:
$a = 10;
$b = 0;
if($b == 0){

$msg = '第二位参数不能为0 ';
$type = E_USER_WARNING;
$now = date('Y-m-d H:i:s');
$timezone = date_default_timezone_get();
$file = __FILE__;
$line = __LINE__;
// 在 txt文档中, 换行是通过 \r\n 来实现的
$message = "[ {
$now} {
$timezone} ] PHP {
$msg} in {
$file} on line {
$line} \r\n \r\n";
error_log($message, 3, './logs.txt');
trigger_error($msg, $type);
}else{

echo $a / $b;
}
echo '
';

(5). 逻辑错误

缩小错误范围:
​ 1. 断点法: 通过 die 来终止程序, 并输出之前的相关变量, 来判断是否有问题
​ 2. 注释法: 通过 注释 来屏蔽局部程序

11. 文件

(1) 文件属性: 常见分类

​ 1.file文件

​ 2.dir文件夹 目录.

(2) 文件分类

文件函数功能返回值
filetype( ’ 文件地址 ’ )获取文件类型常见以file与dir居多,文件不存在时,返回false
filesize( ’ 文件地址 ’ )获取文件大小文件的大小, 仅支持文件,不支持文件夹
file_exists( ’ 文件地址 ’ )判断文件是否存在返回值 bool型
is_readable( )判断文件是否可读返回值 bool型
is_writeable( )判断文件是否可写返回值 bool型
filectime( )获取文件创建时间可以设置date函数 设置返回的时间戳的格式
filemtime( )获取文件修改时间可以设置date函数 设置返回的时间戳的格式
fileatime( )获取文件访问时间可以设置date函数 设置返回的时间戳的格式

(3). 文件路径

​ 1.文件分隔符

​ window: 支持 / 也支持 \

​ Linux: 仅支持 /

​ 2.文件函数

文件函数功能
DIRECTORY_SEPARATOR获取当前系统支持的分隔符( 常量 )
dirname( )获取指定路径的目录
basename( )获取指定路径的文件名

(4)文件-目录-操作

函数名功能
openddir( )打开目录,返回资源
readdir( )读取目录资源,读取完毕,返回false
closedir( )关闭资源
mkdir(目录地址,0777所有权限, true开启递归创建 )创建空目录
rmdir( 目录地址 )删除空目录
is_file( )判断是否为文件
is_dir( )判断是否为目录
copy(复制谁,复制到那里去 )复制文件
touch( 文件地址 )创建空文件
unlink( 文件地址 )删除文件
rename( 剪切谁, 剪切到哪里去 )剪切 / 重命名

打开目录( 文件夹 ) : 每一个目录都有 . 和 …

​ . 当前目录

​ … 上一级目录

​ 一般情况下,很少用,只有直接操作命令时,才会用得上,或者操作上下级目录时.

删除目录只能删除空目录

(5) . 文件加载

属性名功能
include ’ 文件地址 ’文件加载 ( 加载地址出错 不会终止程序运行)
include ( ’ 文件地址 ’ )为了避免 文件重复加载 通过include_once 来加载
include_once ’ 文件地址 ’没有加载文件之前,无法使用文件中的变量
include_once( ’ 文件地址 ’ )支持相对路径 盘符路径, 不支持网址路径
require ‘文件地址’文件加载 ( 加载地址出错,立马终止程序运行) 支持相对路径 盘符路径, 不支持网址路径
require ( ’ 文件地址 ’ )同上~~~~
require_once ’ 文件地址 ’
require_once( ’ 文件地址 ’ )

为了避免重复加载 使用 _ once 来加载

在没有加载文件之前,无法使用文件中的变量

重复加载文件,就相当于将demo里面的代码复制一份

多次加载加载的文件之间没有关联

include加载地址出错,立马终止程序运行
require加载地址出错,不会终止程序运行

(6) 递归函数

1. 在函数内部调用自己 
2. 在执行后,最终会返回到最初的地方
3. 满足以上两点为递归函数

(7) 文件内容 文件操作

向文件赋予内容

file_put_contents(文件路径,内容)

例: file_put_contents(’./demo.txt’, ‘how are you?’);

向文件获取内容

file_get_contents(文件路径)

file_get_contents(’./demo.txt’);

面试题 请用一行代码获取百度首页

file_get_contents(‘https://www.baidu.com’)

打开文件

fopen('文件路径','打开方式')
r 读 read
文件指针指向开头
若文件不存在则报错
w 写 write
会删除原由的所有内容
若文件不存在,则自动创建
a 写 追加 append
文件指针指向末尾
若文件不存在则自动创建
+ 增强模式
需要配合以上三种模式形成r+ W
+ a+ 将具备读和写的功能
$handle = fopen('./demo.txt','r');
返回值为资源

读取文件资源

fread(资源,字节) 读取文件资源(指针形式)
echo fread($handle,1);
echo fread($handle,2); 会接着上一次读到的地方读下去
echo fread($handle,filesize('./demo.txt'));
读完所有

向文件资源写入内容

指针指向最前 清除所有内容并写入

fwrite(资源,内容)                 想文件写入内容
$content = '我今天要在这里写点东西';
fwrite($handle, $content);

追加内容,配合a方式

指针指向末尾,从最后写入追加内容

fwrite(资源,内容) 追加模式
fwrite($handle, "I need a Mr.wang");

增强模式

同时具备读写功能

fwrite($handle,'刺激刺激,装完逼就跑');

关闭文件资源

fclose(资源) 关闭资源
fclose($handle);

(8) 接收上传内的文件

接收上传的文件(三道坎)

前端form, 设置MAX_FILE_SIZE 上传大小

post协议(post_max_size), wamp限制: 8M以内
一旦超过,$_FLIES ,则接收不到上传的文件

服务器限制(upload_max_filesize):2M以内
一旦超过, error = 1 错误号

如果需要更大的上传限制,则修改配置文件php.ini

(9) 验证

判断error

判断是否从post协议传输

判断文件类型

设置新的文件名(唯一性)

设置存储目录

移动文件

1. 判断error
$key = key($_FILES);
if( empty($key) ){

echo '您上传的文件过大, 换个小点的'; die;
}
$error = $_FILES[$key]['error'];
if($error != 0){

switch ($error) {

case 1: echo '您上传的文件过大, 换个小点的'; break;
case 2: echo '您上传的文件过大, 换个小点的'; break;
case 3: echo '请检查您的网络'; break;
case 4: echo '请上传您的文件'; break;
case 6: echo '服务器繁忙, 请稍后再试'; break;
case 7: echo '服务器繁忙, 请稍后再试'; break;
}
die;
}
2. 判断是否是从post协议传输
// is_uploaded_file( 临时文件路径 )
$tmp = $_FILES[$key]['tmp_name'];
if( !is_uploaded_file($tmp)){

echo '非法上传';
}
3. 判断文件类型
$type = $_FILES[$key]['type'];
echo strtok($type, '/');
echo strstr($type, '/');
echo strstr($type, '/', true);
echo strchr($type, '/');
echo strchr($type, '/', true);
// echo strrchr($type, '/');
// $preg = '/ .* \/ /Ux';
// preg_match($preg, $type, $result);
// var_dump(rtrim($result[0],'/'));
$type = strtok($_FILES[$key]['type'], '/');
$allowType = ['image'];
if ( !in_array($type, $allowType) ) {

echo '您上传的格式有误'; die;
}
4. 设置新的文件名 (唯一性)
// 格式: 20190128xxxxxxxxxxxxxxxxxx.jpg
// echo uniqid(); // 基于1微秒 产生一个唯一ID, 适合低频率
$time = date('Ymd');
$suffix = strrchr( $_FILES[$key]['name'] , '.');
$newFile = $time.uniqid().$suffix;
// echo $newFile;
5. 设置存储目录
// upload/2019/01/28/
$savePath = 'upload/'.date('/Y/m/d/');
if ( !file_exists($savePath) ) {

mkdir($savePath, 0777, true);
}
6. 移动文件
// move_uploaded_file( 临时文件, 新目录+新文件名)
if ( move_uploaded_file($tmp, $savePath.$newFile)) {

echo '上传成功'; die;
}
echo '上传失败'; die

(10) 高频率 uuid 设置唯一的id

UUID的好处: 能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响,保生成的ID不仅是表独立的 而且是库独立的,这点在数据库切分时 尤为重要.

function UUID(){ 

$uuid = '';
if (function_exists('uuid_create') === true){

$uuid = uuid_create(1);
}else{

$data = openssl_random_pseudo_bytes(16);
$data[6] = chr(ord($data[6]) & 0x0f | 0x40);
$data[8] = chr(ord($data[8]) & 0x3f | 0x80);
$uuid = vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
return $uuid;
}
for ($i=0; $i < 10000000; $i++) {

echo UUID().'
';
}

(11) 文件下载

准备好前端html传输需要在的名字

//前端做好html a链接 链接php文件,传参get 名字想要下载的文件名
1. 接收需要下载的名字
$name = $_GET['name'];
2. 准备下载路径
$path = './download/'.$name;
3.准备下载之后的名字(唯一性)
$suffix = strrchr($name, '.');
产生32位 随机16进制字符,以保证唯一性
$filename = str_shuffle(str_shuffle(MD5(mt_rand().uniqid()))).$suffix;
header('content-Disposition:attachment; filename="'.$filename.'"');
4. 读取下载内容
readfile($path);

12 .面向对象

(1) 对象

对象概念

类: 抽象化 在定义功能

对象: 实例化, 在调用功能

类和对象的关系

类 就是对象的抽象化

对象 就是累的实例化

定义类

class 类名
{

成员属性(有什么)
成员方法(会什么)
}

创建对象

对象变量 = new 类名

操作属性 或 方法

条件限制: 必须要有对象才能操作

对象->属性

对象->方法名( )

class plane{ 

public $name = '波音747';
public function fly()
{

echo '我会飞
';
}
}
$a = new plane;
echo $a->name; //输出 波音747
$a->fly();

(2) 伪对象 $this

伪对象 $this

不需要声明,直接代表当前对象

只能在 类内 使用

一般用于类内操作属性 或 方法

伪对象使用方法 ———- (以下内容与方法是在写 类的内部的!!! )

方法1: var_dump($GLOBALS['name']);

方法2:

$b=new plane;
var_dump($b);
if($b == $GLOBALS['a']){

echo 'Yes';
}else{

echo 'No';
}

方法3 :

echo this->变量名(不用写

$this->类内部的方法名();

(3) 连贯操作 OOP

对象-> 方法1()->方法2()->方法3()

注意点; 在使用连贯操作的时候, 需要前面一个方法 返回一个对象. 用以调用后面的方法
所以要在方法1,方法2,…中return $this 只有这样才能够让后面的方法能够调用

个人总结: 1. 调用方法 强行接收 会收到**null**,

​ 2.在方法内**ruturn $this;可以返回当前对象(整个类)**

例:

class Person
{

public $name = '老王';
public $age = 18;
public function step1()
{

echo '黑虎掏心
';
var_dump($this);
return $this;
}
public function step2()
{

echo '白虎掏阴
';
}
}
$a = new Person;
$a->step1()->step2()->step3();
//return $this 之后后面的方法才能在对象中调用方法

(4)魔术方法

魔术方法定义: 在触发特定的条件时, 自动调用魔术方法

构造方法 public function __construc(){...}

触发条件: 实例化时,自动调用 (也就是new一个对象的时候自动调用)

常用于: 初始化

不需要返回值

实例化时: 变量 会接收 对象

调用时: 变量 接收 返回值

位置: 写在属性的最后面, 方法的最前面

在没有 构造方法时, 实例化的瞬间, 自动执行同类名的方法

就是 方法名与 类名相同的情况下,在new实例化的瞬间会被执行.

必须写在 属性的后面, 方法的最前面

class Person
{

public $name;
public function __construct()
{

echo '这是一个构造方法
';
return 123;
}
public function skill(){

echo '嘿嘿嘿';
}
}
$a = new Person; // 实例化对象, 自动调用构造方法;

析构方法 public function __destruct( ) { ... }

触发条件: 在对象被销毁时,自动调用

属于被销毁的几种情况

程序自然结束时

对象被覆盖时

对象被删除时

不能有参数

位置: 写在方法的最后面

例: 磊哥上课例子. 面试题…挺难的

class Person
{

public function __construct()
{

static $a = 10;
echo $a;
$a++;
}
public function demo()
{

echo '老王客串一下';
}
public function __destruct()
{

static $b = 50;
echo $b;
$b++;
}
}
$x = new Person;
$x = new Person;
$x->demo();

(5) PDO 操作数据库 ( 数据库抽象层 )

链接数据库

new PDO ( DNS, USER , PWD)

参数

DSN :数据库:host=主机IP地址;dbname=库名;charset=编码

USER: 用户名

PWD: 密码

准备sql语句

例: $sql = ' select * from user';

执行sql语句

PDO->query( sql语句 ) =====> 返回值: PDOStatement对象 例:

通过 PDOStatement 获取数据

PDOStatement -> fetch ( 参数 ) 获取一条数据

PDOStatement -> fetchAll ( 参数 ) 获取所有数据

​ 参数 : PDO::FETCH_ASSOC 关联

​ PDO::FETCH_NUM 索引

​ PDO::FETCH_BOTH 混合 (默认)

$row = $res->fetchAll(PDO::FETCH_ASSOC);
编程小号
上一篇 2025-03-21 13:06
下一篇 2025-01-16 11:51

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/137130.html