elric
20 次阅读
约 17 分钟 · 5359 字
PHP 笔记

PHP 笔记

2023-10-10 ~ 2023-10-11

总的来说,PHP相当于结合了C++、Linux和JS的一部分

一、PHP 语言介绍

记得要保存之后再打开。。。

1.0 PHP 语言介绍

PHP:Hypertext Preprocessor(超文本预处理器)

PHP 是一种广泛用于 Web 开发的开源服务器端脚本语言

它可以嵌入 HTML 中执行,还可以执行编译后代码,使代码运行更快

语法吸收了 C 语言、java 和 Perl 的特点,利于学习,使用广泛

PHP 可以访问数据库,并与服务器上的其他文件交互。

PHP 是网络安全中需要掌握的一门语言

PHP 最初被设计为一种简单易用的语言,因此对于初学者来说非常易于理解和学习

PHP 也是一种功能强大的语言,拥有大量功能和扩展库,能够胜任各种任务

目前 PHP 在全球网页市场、手机网页市场还有为手机提供 API(程序接口)排名第一

1.1 PHP 部署安装环境

集成环境包:[1] (简单易上手)

[2]

1.2 PHP 的 IDE

PHPstorm

VSCode

二、PHP 的基本语法

2.1 PHP 函数知识

新建一个文件hello_world.php,里面写:

PHP
<?phpecho "hello world";		/*输出:hello world*/?>

可以发现:

  1. php 代码写在<?php ?>
  2. 使用//和/**/来注释
  3. php 代码也和 js 一样,可以加 ; 也可以不加
  4. 当然了,php 代码也最好不要有中文

首先打开下图的启动

然后在浏览器输入:

localhost/你要打开的文件路径(“WWW”文件夹下的)

如:要打开WWW/php/lesson01/1.hello_world.php

则输入:localhost/php/lesson01/1.hello_world.php

在一个 php 文件中输入:

PHP
<?phpphpinfo();		//用于显示当前服务器的php的详细信息?>

然后打开,则会显示 php 的详细信息:

2.2 PHP 常量、变量

2.2.1 PHP 变量知识

PHP
<?php$iphone7 = 5880;$iphone7plus = 6088;echo $iphone7 + $iphone7plus;?>

php 的变量必须以$这个符号开始,和linux命令一样

命名和c++/linux命令一样

php 的变量和js一样,不用声明变量类型

推荐使用驼峰命名法或下划线命名法作为命名风格。

例如:firstName或first_name

变量分为:

  1. 可变变量
PHP
<?php//定义第一个变量$shu = 'biao';//定义第二个变量$biao = '鼠标';//“ $“$shu” ” --> “ $biao ” --> “鼠标”echo $$shu;?>

就是变量名也是可变的意思

  1. 外部变量(超全局变量)

就是 php 在提前规定好的一些变量

外部变量是在脚本中全局可用的预定义变量,可以从任何地方访问。它们被存储在 PHP 的超全局数组中。常见的外部变量包括$_GET、$_POST、$_SESSION等

HTML
<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <title>Title</title>  </head>  <body>    <!-- 这一行method 对应的值改为post --->    <!-- 将文件提交给“3.Superglobals.php”,并打开它 --->    <form action="3.Superglobals.php" method="post">      <input type="text" name="username" />      <input type="password" name="pwd" />      <input type="submit" name="提交" />    </form>  </body></html>
PHP
<?php//$_POST[‘username’],将username作为字符串放在中括号里面,就得到了表单里面的<input type=”text”name=”username”/>的值$u = $_POST['username'];echo $u.'<br />';//$_POST[‘pwd’],将pwd作为字符串放在中括号里面,就得到了表单里面的<input type=”text”name=”pwd”/>的值$passwd = $_POST['pwd'];echo $passwd.'<br />';?>
输出:“账号”“密码”

其他的一些外部变量

序号 全局变量名 变量解释说明
1 $_COOKIE 得到会话控制中的 cookie 传值信息
2 $_SESSION 得到会话控制中的 session 传值信息
3 $_FILES 得到文件上传的结果
4 $_GET 得到 get 传值的结果
5 $_POST 得到 post 传值的结果
6 $_REQUEST 可以得到 get 的传值结果,也能得到 POST 传值的结果
  1. 环境变量

主要用的有$_SERVER和$_ENV两个环境变量。不过,$_ENV逐渐被 PHP 的新版本给废弃了。

PHP
<?php// 获取当前页面的URL$url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];echo "Current URL: $url";?>
输出:Current URL: localhost:63342/WWW/php/lesson02/4.Environment_Variables.php?_ijt=7deat8r0c48bhk17ea2q28vm3u&_ij_reload=RELOAD_ON_SAVE

其他的一些环境变量

其他环境变量
其他环境变量

2.2.2 PHP 常量知识

常量就是平常不变的量

定义语法:

PHP
<?php	define('常量名','常量值');  	   //有点像c++的宏定义?>

在字符串中调用常量:

PHP
<?php	define('MyName','樱花莎');  	//双引号也可以	echo MyName;    echo '我的名字是:'.MyName;    echo '我的名字是:'.'MyName';   //这个MyName只是一个字符串?>

系统自带的一些常量:

序号 常量名 变量解释说明
1 LINE 当前所在的行
2 FILE 当前文件在服务器的路径
3 FUNCTION 当前函数名称
4 CLASS 当前类名
5 METHOD 当前成员方法名
6 PHP_OS PHP 运行的操作系统
7 PHP_VERSION 当前 PHP 的版本
8 TRAIT Trait 的名字(PHP 5.4 新加常量)
9 DIR 文件所在的目录信息
10 NAMESPACE 当前命名空间的名称(区分大小写)

2.3 PHP 注释

一共有以下三种注释方法:

类似 C++的//、/**/和 Linux 命令的#

PHP
<?php    //    /**/    #?>

2.4 PHP 数据类型

一共有八种,分别是:

  • boolean(布尔类型)

  • integer(整形)

  • float/double(浮点型)

  • string(字符串型)

2 种复合数据类型:

  • array(数组类型)

  • object(对象类型)

2 中特殊的数据类型:

  • resource(资源类型)

  • null(无/空白类型)

2.4.1 整型

8 进制声明方式:

PHP
<?php//8进制的取值范围是0-7,即0、1、2、3、4、5、6、7$bajinzhi=033145;echo $bajinzhi;?>// 这里仅仅是个说明,并不是八进制的运算,具体看下面的图

10 进制声明方式:

PHP
<?php//为了方便大家记忆和前期学习,英文不好的朋友可用拼音来声明变量。//声明变量整数,英文int$int=1000;$zhengshu=1000;echo $int;echo $zhengshu;?>// 这里仅仅是个说明,并不是十进制的运算,具体看下面的图

16 进制声明方式:以 0x 开始,后面跟 0-f 的,0x 的后面的 abcdef 不区分大小写。(了解即可)

PHP
<?php//16进制的取值范围是0-f,即0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f//声明变量整数,英文int$shiliujinzhi=0x6ff;echo $shiliujinzhi;// 这里仅仅是个说明,并不是十六进制的运算,具体看下面的图?>
十进制 二进制 八进制 十六进制
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 20 10

2.4.2 布尔数据类型

布尔类型举例说明:

PHP
<?php//声明一个变量(拼音)为布尔$buer=true;//声明一个变量(英文)$bool=false;?>

2.4.3 字符串数据类型

在 PHP 语言中声明字符串有三种方式:

  1. 用单引号声明
  2. 用双引号声明
  3. 用字界符声明

单引号声明

PHP
<?php//声明字符串变量$zifu$zifu='好好学习吧';echo $zifu;?>

双引号声明

PHP
<?php//声明字符串变量$str$str="我想好好学习";echo $str;?>

字界符声明

  1. 在变量后面的等号写三个小于号 <<<

  2. 然后在<<<后面写上字符(建议英文大写字符)

  3. 然后换行写上任意想写的字符

  4. 写完后,顶行。在行最开始处,再写上<<<后面的字符和分号。

PHP
<?php$dingjie = <<<ABC  如果      非要在这个测试    前        面<br />       加上一段    <i>有趣的话</i>    我想说,<h1>努力学习不好么<h1>ABC;echo $dingjie?>

那双引号和单引号有什么区别呢:

  1. 双引号解析变量,但是单引号不解析变量

  2. 在双引号里面插入变量,变量后面如果有英文或中文字符,会把这个字符和变量拼起来,视为一整个变量。一定要在变量后面接上特殊字符,例如空格等分开。

  3. 如果在双引号里面插变量的时候,后面不想有空格,可以拿大括号将变量包起来。

  4. 双引号解析转义字符,单引号不解析转义字符。但是单引号能解析\

  5. 单引号效率高于双引号,尽可能使用单引号

  6. 双引号和单引号可以互相嵌套,双引号中可以插入单引号,单引号当中插入变量,这个变量会被解析。

  7. 神奇的字符串拼接胶水——(.)点,用来拼接字符串。

  8. 一般将定界符声明字符串视为双引号一样的功能来看待。

2.4.4 浮点型数据类型

声明方式分为两种:

  1. 普通声明方式

  2. 科学声明方式

普通声明浮点数:

PHP
<?php//声明变量fudian的植为12121.3232$fudian=12121.3232;echo $fudian;?>

科学声明浮点数:

PHP
<?php//声明变量$f1的植为0.8873$f1=0.8873;var_dump($f1)?>
输出:D:/elric/Programming/study/PHP/ceshi.php:4:float 0.8873//这个4为第四行

var_dump() 函数用于输出变量的相关信息。显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

2.4.5 PHP 数据类型之查看和判断数据类型

查看数据类型:

  1. gettype(传入一个变量)能获得变量的类型

  2. var_dump(传入一个变量)输出变量类型和值

PHP
<?php//声明一个变量88.8,可以自己多做几次实现换成其他类型看看$type输出是多少。$float = 88.8;$type = gettype($float);echo $type; //多换几个类型试试$str = '你喜欢男人还是喜欢女人';$type = var_dump($str);echo $type;?>
输出:doubleD:/elric/Programming/study/PHP/ceshi.php:9:string '你喜欢男人还是喜欢女人' (length=33)

判断数据类型方法:

使用is_*系列函数,is_types这一系列的函数,来进行判断某个数据属于哪种类型,如果是这个类型返回真,不是这个类型返回假。

序号 判断函数 函数判断描述
1 is_int 判断是否为整数数据类型
2 is_bool 判断是否为布尔数据类型
3 is_float 判断是否是浮点数据类型
4 is_string 判断是否是字符串数据类型
5 is_array 判断是否是数组数据类型
6 is_object 判断是否是对象数据类型
7 is_null 判断数据信息是否为空
8 is_resource 判断是否为资源数据类型
9 is_scalar 判断是否为标量
10 is_numeric 判断是否为数值类型
11 is_callable 判断是否为函数
PHP
<?php//is_*系列函数有个特点,就是如果是这个类型的返回的值为真,不是这个数据类型就返回的是假//声明类型为假$fo = false;if (is_bool($fo)) {    echo '执行真区间';}else{    echo '执行假区间';}echo "<br />"; //检查未声明的变量$p是否为空,为空就执行真区间if(is_null($p)) {    echo '执行真区间';}else{    echo '执行假区间';}echo "<br />"; //字符串类型的数值,检查执行的真还是假$str = '18.8';if(is_numeric($str)) {    echo '执行真区间';}else{    echo '执行假区间';}echo "<br />"; //把sca的值换为整数 浮点 布尔和字符串试试$sca = true;if(is_scalar($sca)) {    echo '执行真区间';}else{    echo '执行假区间';}echo "<br />"; //换成echo,is_int试试,为什么echo执行假区间呢?if(is_callable('var_dump')) {    echo '执行真区间';}else{    echo '执行假区间';}echo "<br />";?> 
输出:执行真区间执行真区间执行真区间执行真区间执行真区间

2.5 PHP 流程控制语句

PHP
<?php//我们定义一个泡到美女的变量($pao)为true,意思为泡到了$pao =fales;if($pao){    echo '林志玲,我爱死你了';    echo '我愿意去死';}else{    echo '照骗,爱会消失的';    echo '我不愿意去死';}?>

这里只是介绍有if...else...等流程控制语句,详细的在第三章

2.6 PHP 算数运算方法

类似C++的运算方法,少部分类似js的

算数运算符,就是小学所学过的大多数知识

序号 符号信息 说明 举例说明
1 + 表示相加符号 $x + $y
2 - 表示相减符号 $x - $y
3 * 表示相乘符号 $x * $y
4 / 表示相除符号 $x / $y
5 % 表示取余或取模符号 $x % $y
PHP
<?php$x=5;$y=6;//5+6为11echo $x+$y;?>

2.6.1 PHP 自加自减运算

序号 符号信息 说明
1 $x++ 表示先赋值后累加运算
2 $x-- 表示先赋值后求差运算
3 ++$x 表示先累加运算后赋值
4 --$x 表示先求差运算后赋值
PHP
<?php$x=5;//先赋值后做加法运算,即将$x的值赋值为$y.$x的值为5,所以将$x的值赋值为$y.$y也是5$y=$x++;echo $y;//$x的结果输出为6,因为赋值给$y后,$x自己又把自己进行了+1操作。所以,$x结果为6echo $x;?>

2.6.2 PHP 比较运算符

序号 符号信息 说明
1 > 表示大于符号
2 < 表示小于符号
3 >= 表示大于等于符号
4 <= 表示小于等于符号
5 == 表示等于符号
6 != 表示不等于符号
7 === 表示全等(判断类型等于)
8 !== 表示不全等(判断类型不等于)
PHP
<?php$x=5;$y=6;//因为5大于6不成立,所以为错的,即为false执行了假区间if(!$x > $y){    echo '变量x大于变量y 成立';}else{    echo '变量x大于变量y 不成立';}?>

2.6.3 PHP 程序逻辑运算符号

序号 符号信息 说明 举例说明
1 逻辑与(并且关系) $x 和 $y 都为真则返回为真 $x and $y
2 逻辑或(或者关系) $x 和 $y 均为 false 为真,其它情况全为真 $x or $y
3 逻辑非 取反,即 true 变为 false,false 变为 true !$x
4 逻辑异或 相同取 false,相异为 true $x xor $y
PHP
<?php$x=true;$y=false;//逻辑与(并且),要求两个都为true才能执行真区间,所以代码中执行假区间if($x && $y) {    echo '执行了真区间';}else{    echo '执行了假区间';}?>

2.6.4 PHP 程序位运算

序号 符号信息 说明 举例说明
1 按位与 And 将把 $a 和 $b 中都为 1 的位设为 1 $a & $b
2 按位或 Or 将把 $a 和 $b 中任何一个为 1 的位设为 1 $a
3 按位异或 Xor 将把 $a 和 $b 中一个为 1 另一个为 0 的位设置为 1 $a ^ $b
4 按位取反 Not 将把 $a 中为 0 的位设为 1,反之亦然 ~$a
5 左移 将把 $a 中的位向左移 $b 次(每一次移动都表示乘以 2) $a << $b
6 右移 将把 $a 中的位向右移 $b 次(每一次移动都表示除以 2) $a >> $b
PHP
<?php//$x二进制为:$x=5;//$y二进制为:$y=8;//结果为13echo $x ^ $y;?>

2.6.5 PHP 三元运算符合其它运算符

三元运算符,相当于是 if…else 结构,不过三元运算符的写法更加简洁,语法格式如下:

序号 符号信息 说明
1 $x ? 真代码段 : 假代码段 判断是否为真假?真情况:假情况
2 ` (反引号) | 反引号中间插入代码,执行系统命令,等价于 shell_exec 函数 | |
3 @ 表示抑制错误,把这一行的错误不让它显示出来了,效率低不建议用
4 => 数组下标访问符
5 -> 对象访问符
6 instanceof 判断某个对象是否来自某个类,如果是的返回 true,如果不是返回 false
PHP
<?php$x=true;$x?$y=5:$y=6;//输出5echo $y;?> <?phpecho '<pre>';echo `ipconfig`;echo '</pre>';?>

三、PHP 流程控制语句

基本和C++一样,就elseif中间没有空格这点不一样

3.1 if 条件控制语句

注意:和C++不同的是,elseif中间没有空格

PHP
<?phpIf(判断语句1){   执行语句体1}elseif(判断语句2){   执行语句体2} elseif(判断语句n){   执行语句体n}else{   最后的else语句可选}

3.2 if 嵌套语句

PHP
<?phpif(判断1){  if(判断2){    代码段1;}else{    代码段2;}}else{  if(判断3){    代码段3;}else{    代码段4;}}?>

3.3 switch 语句使用

PHP
<?phpswitch(变量){    //字符串,整形   case 具体值1:      执行代码1;      break;   case 具体值2:      执行代码2;      break;   case 具体值3:      执行代码3;      break;      defult:}?>

上面的 break 是可选的,上面的 default 也是可选的,不要在 case 后面写成分号,后面是冒号.不要在 case 后面写判断区间,如($foo >20 或者 $foo == 30)
Switch 里面的变量最好是整形 字符串 因为布尔判断更适合 if…else.

3.4 while 循环语句说明

PHP
<?php//定义需要往返的次数,老外喜欢从0开始计数,所以系统也是从0开始$count=0;//while后面接布尔值判断,为真执行,为假停止//$count小于100的时候执行,也就是$count为0至99的时候执行.//如果$count不小于100了,循环停止执行后续的代码 //循环开始处while($count < 100){    echo "这是王总第 $count 次出差 <br />";    //每次执行让$count+1,这样的话,就不会产生$count永远小于100的情况了    $count++;}//循环结束?>

对比说明 do…while 与 while 区别:

PHP
do{   //代码框}while(判断)

3.5 for 循环语句

PHP
for(表达式1;表达式2;表达式3)  需要执行的代码段;}

例:

PHP
<?phpfor($i=1;$i<=10;$i++)  echo ‘分手后第’.$i.’年, 我全都忘了你的样子<br />’;}?> 

3.6 goto 循环语句

PHP
<?phpgoto wan;echo '天王盖地虎';wan:echo '小鸡炖蘑菇';?>

例:

PHP
<?phpfor ($i=0;$i<100;$i++){    echo '第'.$i.'每周往返北京大连<br />';    if($i == 17){        goto end;    }}end:echo '集团公司要求停止此项';?>

四、PHP 函数基本语法

类似js的语法

4.1 PHP 函数的介绍

PHP
Function 函数名(参数名1=[值1], 参数名2=[值2] , 参数名n=[值n]){    函数中的功能体    [return 返回值]}

例:

PHP
<?phpfunction php_cn(){    echo "好好学习";}php_cn();php_cn();?>

函数备注说明:

  1. 函数名只能是字母,数字,下划线的组合,并且之间不能包含空格,数字不能放在变量名首位.

  2. 函数名与变量命名规则一样,但是不同的是,函数名不区分大小写

  3. 函数体的参数若是定义了,未传参,代码会报错.

  4. 函数后的参数如果有默认值,参数可以不填,代码也不会报错

  5. 函数后的参数可以写多个

  6. 函数后如果有默认值和无默认值的参数,通常把无默认值的参数写在最前面

  7. 函数体的变量与函数体外的变量没有关系

  8. 函数体中若有 return,return 后的代码不执行.

  9. 函数执行完后,可把函数体内的值,带到函数体外

  10. 函数的执行没有顺序关系,可以在定义外之前的位置调用

例:

HTML
<html>  <head>    <title>网站页面信息</title>  </head>  <body>    <!-- 先用POST来做实验,以后可以改为get -->    <form action="glob.php" method="post">      <input type="text" name="info" />      <input type="submit" name="提交" />    </form>  </body></html>
PHP
//文件名“glob.php”<?phpfunction demo() {    echo $_POST['info'];}demo();?>

4.2 实际开发的情况

在实际开发中,常常需要把程序中的共用代码放到一个文件中,使用这些代码的文件只需要包含这个文件即可.这种方法有助于提高代码的重用性,给代码的编写与维护带来很大的便利.在 PHP 中,有以下四种方法包含一个文件:

序号 函数信息 说明 包含失败
1 include 文件继续向下执行,通常用于动态包含 返回一条警告
2 require 代码就不会继续向下执行,通常包含极为重要的文件,这个代码别想执行 返回一个致命错误
3 include_once 除了原有include的功能外,它还会做once检测,如果文件曾经被包含过,不在包含 返回一条警告
4 require_once 除了原功能以外,会做一次once检测,防止文件反复被包含 返回一个致命错误

例:

PHP
//文件名“functions-test-02”<?phpfunction demo(){    echo 'aaaa';}function test(){    echo 'bbbb';}?>
PHP
//文件名“user.php”<?phpinclude "function-test-02.php";//可以直接调用demo();test();?>

在 functions.php 的同级目录下,在创建一个 user.php 文件把 functions.php 文件包含进来.
这样函数信息就可以专门放在 functions.php 里面,哪需要用到这些函数的时候,就从哪包含进来.

简单来说,这个include就相当于C++中的引入自创的头文件

以下是自带的函数

4.3 数学常用函数总结

序号 函数信息 说明 实例
1 abs() 求绝对值 $abs = abs(-42); //42
2 ceil() 进一法取整 echo ceil(9.999); //10
3 floor() 舍去法取整 echo floor(9.999); //9
4 fmod() 浮点数取余 $x=5.7; $y=1.3; $r=fmod($x,$y); //$r=0.5
5 pow() 返回数的n次方 echo pow(-1,20); //1
6 round() 浮点数四舍五入 echo round(195583.2); //196
7 sqrt() 求平方根 echo sqrt(9); //3
8 max() 求最大值 echo max(1,3,5,6,7); //7
9 min() 求最小值 echo min(1,3,5,6,7); //1
10 mt_rand() 更好的随机数 echo mt_rand(1,100);
11 rand() 随机数 echo rand();
12 pi() 获取圆周率值 echo pi(); //3.1415926535898

4.4 字符串常用函数总结

序号 函数信息 说明 实例
1 trim() 删除字符串两端的空格或其他预定义字符 echo trim("\r\nHello World!\r\n");
2 rtrim() 删除字符串右边的空格或其他预定义字符 echo rtrim("Hello World!\n\n");
3 chop() rtrim()的别名 同上
4 ltrim() 删除字符串左边的空格或其他预定义字符 echo ltrim("\r\nHello World!");
5 dirname() 返回路径中的目录部分 echo dirname("c:/testweb/home.php");
6 str_pad() 把字符串填充为指定的长度 echo str_pad("Hello World",20,".");
7 str_repeat() 重复使用指定字符串 echo str_repeat(".",13);
8 str_split() 把字符串分割到数组中 print_r(str_split("Hello"));
9 strrev() 反转字符串 echo strrev("Hello World!");
10 wordwrap() 按照指定长度对字符串进行折行处理 echo wordwrap($str,15);
11 str_shuffle() 随机地打乱字符串中所有字符 echo str_shuffle("Hello World");
12 parse_str() 将字符串解析成变量 parse_str('id=23&name=John%20Adams', $myArray);
13 number_format() 通过千位分组来格式化数字 echo number_format('1000000');
14 strtolower() 字符串转为小写 echo strtolower("Hello WORLD!");
15 strtoupper() 字符串转为大写 echo strtoupper("Hello WORLD!");
16 ucfirst() 字符串首字母大写 echo ucfirst("hello world");
17 ucwords() 字符串每个单词首字符转为大写 echo ucwords("hello world");
18 htmlentities() 把字符转为 HTML 实体 echo htmlentities("John & 'Adams'", ENT_COMPAT);
19 htmlspecialchars() 预定义字符转 html 编码 -
20 nl2br() \n 转为 <br> -
21 strip_tags() 去掉 HTML、XML 以及 PHP 的标签 echo strip_tags("<b>Hello</b> world!");
22 addcslashes() 在指定的字符前添加反斜线转义 echo addcslashes('Hello, my name is John Adams.','m');
23 stripslashes() 删除由 addcslashes() 添加的反斜线 echo stripslashes('Hello, \my na\me is Kai Ji\n.');
24 addslashes() 指定预定义字符前添加反斜线 echo addslashes("Who's John Adams?");
25 quotemeta() 在字符串中某些预定义的字符前添加反斜线 $str = "Hello world. (can you hear me?)"; echo quotemeta($str);
26 chr() 从指定的 ASCII 值返回字符 echo chr(052);
27 ord() 返回字符第一个字符的 ASCII 值 echo ord('hello');
28 strcasecmp() 不区分大小写比较两个字符串 echo strcasecmp("Hello world!", "HELLO WORLD!");
29 strcmp() 区分大小写比较两个字符串
30 strncmp() 比较字符串前 n 个字符,区分大小写
31 strncasecmp() 比较字符串前 n 个字符,不区分大小写 int strncasecmp(string $str1, string $str2, int $len)
32 strnatcmp() 自然顺序法比较字符串长度,区分大小写 int strnatcmp(string $str1, string $str2)
33 strnatcasecmp() 自然顺序法比较字符串长度,不区分大小写 int strnatcasecmp(string $str1, string $str2)
34 chunk_split() 将字符串分成小段 str chunk_split($body, int $len, $end);
35 strtok() 标记分割字符串 str strtok($str, $token);
36 explode() 使用一个字符串为标志分割另一个字符串 array explode(str $sep, str $str[, int $limit]);
37 implode() 同 join,将数组值用预设字符连接成字符串 string implode(string $glue, array $pieces);
38 substr() 截取字符串 string substr(string $string, int $start [, int $length ]);
39 str_replace() 字符串替换操作,区分大小写 mixed str_replace(mixed $search, mixed $replace, mixed $subject[, int &$num]);
40 str_ireplace() 字符串替换操作,不区分大小写 mixed str_ireplace(mixed $search, mixed $replace, mixed $subject[, int &$count]);
41 substr_count() 统计一个字符串在另一个字符串中出现次数 int substr_count(string $haystack, string $needle [, int $offset = 0 [, int $length ]]);
42 substr_replace() 替换字符串中某串为另一个字符串 mixed substr_replace(mixed $string, string $replacement, int $start [, int $length ]);
43 similar_text() 返回两个字符串相同字符的数量 int similar_text(str $str1, str $str2)
44 strchr() (同 strstr) 返回从某字符开始到结束的字符串 string strstr(string $str, string $needle [, bool $before_needle])
45 strrchr() 返回从最后一次出现位置到结束的字符串 string strrchr(string $haystack, mixed $needle)
46 stristr() 同 strstr,不区分大小写 string stristr(string $haystack, mixed $needle [, bool $before_needle = false])
47 strpos() 查找字符串首次出现的位置 int strpos(string $haystack, mixed $needle [, int $offset = 0])
48 stripos() 查找首次出现的位置,不区分大小写 int stripos(string $haystack, string $needle [, int $offset])
49 strrpos() 查找最后出现的位置 int strrpos(string $haystack, string $needle [, int $offset = 0])
50 strripos() 查找最后出现的位置,不区分大小写 int strripos(string $haystack, string $needle [, int $offset])
51 strspn() 返回字符串中首次符合 mask 的子字符串长度 int strspn(string $str1, string $str2 [, int $start [, int $length]])
52 strcspn() 返回字符串中不符合 mask 的子字符串长度 int strcspn(string $str1, string $str2 [, int $start [, int $length]])
53 str_word_count() 统计字符串包含的单词数 mixed str_word_count(str $str[,])
54 strlen() 统计字符串长度(字节) int strlen(str $str)
55 count_chars() 统计字符串中所有字母的出现次数 mixed count_chars(string $string [, int $mode])
56 md5() 计算 MD5 摘要 $str = "Hello"; echo md5($str);
57 mb_substr() 获取子字符串的部分(多字节) string mb_substr(string $str, int $start [, int $length = NULL [, string $encoding]])
58 mb_strlen() 获取字符串的长度(多字节) mixed mb_strlen(string $str [, string $encoding])
59 iconv() 将字符串转换为指定编码 string iconv(string $in_charset, string $out_charset, string $str)
60 iconv_substr() 截取子字符串的部分(iconv) string iconv_substr(string $str, int $start [, int $length [, string $charset]])
67 iconv_get_encoding() 获取 iconv 扩展的内部配置变量 mixed iconv_get_encoding([string $type])
68 mb_substr_count() 统计子字符串出现的次数(多字节) int mb_substr_count(string $haystack, string $needle [, string $encoding])
61 mb_check_encoding() 检查字符串是否有效编码 bool mb_check_encoding([string $str [, string $encoding]])
62 mb_strpos() 查找字符串在另一个字符串中最后出现的位置(多字节) mixed mb_strpos(string $str, string $needle [, int $offset])
63 mb_split() 使用正则表达式分割多字节字符串 array mb_split(string $pattern, string $string [, int $limit])
64 parse_url() 解释 URL 成为一个数组 mixed parse_url(string $url [, int $component])
  • 多字节字符处理:mb_* 和 iconv_* 函数支持多字节字符(如中文)。

  • 中文编码:

    • GBK:双字节,一个汉字占用 2 字节。

    • UTF-8:三字节,一个汉字占用 3 字节。

4.5 时间常用函数总结

PHP
<?php$mytime = getdate();echo "年 :".$mytime['year']."\n";echo "月 :".$mytime['mon']."\n";echo "日 :".$mytime['mday']."\n";echo "时 :".$mytime['hours']."\n";echo "分 :".$mytime['minutes']."\n";echo "秒 :".$mytime['seconds']."\n";echo "一个小时中的第几钟 :".$mytime['minutes']."\n";echo "这是一分钟的第几秒 :".$mytime['seconds']."\n";echo "星期名称 :".$mytime['weekday']."\n";echo "月份名称 :".$mytime['month']."\n";echo "时间戳   :".$mytime[0]."\n";?>

五、PHP 数组结构

这里的数组和js的一样

5.1 PHP 数组介绍

数组的英文是 array,可以存入多个不同类型的数据,php 的数组是一个复合数据类型。

例 1:

PHP
<?php$shu = array(1 , 1.5 , true ,'天王盖地虎,小鸡炖蘑菇');echo '<pre>';var_dump($shu);echo '</pre>';?>//在上例中,我们发现我们存入了:整型、浮点、布尔、字符串//注:上例中echo pre这个标签的主要目的是为原样输出,格式展示的更好看,更清晰。//可以用var_dump()打印出来显示看一下效果://索引数组的下标必须要从0开始吗?//答:这个问题其实不然,索引数组并不一定要从0开始。//那如何能够不从0开始呢?//答:需要用到大家在上面学的一小块知识哟。就是键值对应符。我们来动手写。

例 2:

PHP
<?php$kele = array('只有不断努力才能博得未来',10 => 'NoAlike', 'PHP中文网' , '去PHP中文网学PHP', 19 => '苹果和梨子我都爱' , '橘子我最爱');//打印显示$keleecho '<pre>';var_dump($kele);echo '</pre>';?> 
输出:D:/elric/Programming/study/PHP/ceshi.php:5:array (size=6)  0 => string '只有不断努力才能博得未来' (length=36)  10 => string 'NoAlike' (length=7)  11 => string 'PHP中文网' (length=12)  12 => string '去PHP中文网学PHP' (length=21)  19 => string '苹果和梨子我都爱' (length=24)  20 => string '橘子我最爱' (length=15)

5.2 for 循环遍历索引数组

PHP
<?php//声明一个数组,值为1到10$num = array(1,2,3,4,5,6,7,8,9,10); //按照索引数组的特点,下标从0开始。所以1的下标为0,10的下标为9echo $num[0].'<br />';echo $num[9].'<br />'; //我们可以得到数组中元素的总个数,为10echo count($num) .'<br />'; //遍历这个索引数组的话,我们就可以定义一个变量为$i//$i 的值为0,从0开始//可以设定一个循环条件为:$i 在下标的(9)最大值之内循环for($i = 0 ; $i < count($num) ; $i++){   echo $num[$i].'<br />';}?> //通过上面的例子,我们就把数组进行了循环。因为下标是从0开始的,定义i=0 。 每次循环的时候让i=0。每次循环的时候让i=0。每次循环的时候让i加1,但是必须要小于10,因为数组下标的最大值为9

5.3 常用操作数组函数

这些函数,也是面试中基础面试中最爱问到的问题。

序号 函数信息 说明
1 array_shift() 弹出数组中的第一个元素
2 array_unshift() 在数组的开始处压入元素
3 array_push() 向数组的末尾处压入元素
4 array_pop() 弹出数组末尾的最后一个元素
5 current() 读出指针当前位置的值
6 key() 读出指针当前位置的键
7 next() 指针向下移
8 prev() 指针向上移
9 reset() 指针到开始处
10 end() 指针到结束处
11 array_combine() 生成一个数组,用一个数组的值作为键名,另一个数组值作为值
12 range() 创建并返回一个包含指定范围的元素的数组
13 compact() 创建一个由参数所带变量组成的数组
14 array_fill() 用给定的值生成数组
15 array_chunk() 把一个数组分割为新的数组块
16 array_merge() 把两个或多个数组合并为一个数组
17 array_slice() 在数组中根据条件取出一段值,并返回
18 array_diff() 返回两个数组的差集数组
19 array_search() 在数组中搜索给定的值,如果成功则返回相应的键名
20 array_splice() 把数组中的一部分去掉并用其它值取代
21 array_sum() 计算数组中所有值的和
22 in_array() 检查数组中是否存在某个值
23 array_key_exists() 检查给定的键名或索引是否存在于数组中
24 shuffle() 将数组打乱,保留键值
25 count() 计算数组中元素数目或对象中的属性个数
26 array_flip() 返回一个键值反转后的数组
27 array_keys() 返回数组中所有的键,组成一个数组
28 array_values() 返回数组中所有值,组成一个数组
29 array_reverse() 返回一个元素顺序相反的数组
30 array_count_values() 统计数组中所有值的出现的次数
31 array_rand() 从数组中随机抽取一个或多个元素,注意是键名
32 array_unique() 删除重复值,返回剩余数组
33 sort() 按升序对给定数组的值排序,不保留键名
34 rsort() 对数组进行降序排序,不保留键名
35 asort() 对数组排序,保持索引关系
36 arsort() 对数组进行降序排序,保持索引关系
37 ksort() 按键名对数组排序
38 krsort() 将数组按照键名进行降序排序
39 natsort() 用自然顺序算法对数组中的元素排序
40 natcasesort() 自然排序,不区分大小写
41 array_filter() 去掉数组中的空元素或者预定元素
42 extract() 将键变为变量名,将值变为变量值

例子:弹出数组中的第一个元素

PHP
<?php$mingren = array("test", "test1", "test2", "test3");$dc = array_shift($mingren);echo $dc .'<br />';print_r($mingren);?>

六、PHP 正则表达式

6.1 使用范围

正则表达是会在开发中经常看到,它主要用在以下一些地方:匹配邮箱、手机号码、验证码、替换敏感的关键词。例如:涉及政治和骂人的话

6.2 定界符

PHP 的正则表达示定界符的规定如下:定界符,不能用 a-zA-Z0-9/ 其他的都可以用。必须成对出现,有开始就有结束。

字符 功能
. 匹配任意1个字符(除了\n)
[] 匹配[]中列举的字符
\d 匹配数字,即0-9
\D 匹配非数字,即不是数字
\s 匹配空白,即空格、tab键
\S 匹配非空白
\w 匹配单词字符,即a-z、A-Z、0-9、_
\W 匹配非单词字符
字符 功能
^ 匹配字符串开头
$ 匹配字符串结尾
\b 匹配一个单词的边界
\B 匹配非单词边界
字符 功能
* 匹配前一个字符出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有1次
? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m} 匹配前一个字符出现m次
{m,} 匹配前一个字符至少出现m次
{m,n} 匹配前一个字符出现在m到n次
字符 功能
| 匹配左右任意一个表达式
(ab) 将括号中字符作为一个分组
\num 引用分组num匹配到的字符串
(?P<name>) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串

6.3 正则符号的定义方式

举例说明正则符号的定义方式:

PHP
例子						说明/中间写正则/		  	正确$中间写正则$				正确%中间写正则%			  正确^中间写正则^			  正确@中间写正则@	      正确(中间写正则)				错误  /\//A中间写正则A			  错误

6.4 关于转义字符

注:\ 是转义字符,如果在以后正则表达示里面需要匹配/,如下:

PHP
/ / /

这个时候真要匹配/ 的时候,需要把定界符里面的/ 用转义字符转义一下,写成下面的例子:

PHP
/ \/ /

如果你觉得麻烦,遇到这种需要转义的字符的时候可以把两个正斜线(/ /)定界,改为其他的定界符(# #)。

6.5 正则表达式格式

正则表达式格式:preg_match ( string $正则 , string $字符串 , array&$结果] )

功能:根据正则变量 ,匹配字符串变量。如果存在则返回匹配的个数,把匹配到的结果放到$结果变量里。如果没有匹配到结果返回 0。

PHP
<?php$zz = '/wq/';$string = 'ssssswqaaaaaa';if(preg_match($zz, $string, $matches)){   echo '匹配到了,结果为:';   var_dump($matches);}else{   echo '没有匹配到';}?>

6.6 常用的正则函数有

序号 函数信息 说明
1 preg_filter() 执行一个正则表达式搜索和替换
2 preg_grep() 返回匹配模式的数组条目
3 preg_match() 执行一个正则表达式匹配
4 preg_match_all() 执行一个全局正则表达式匹配
5 preg_replace_callback_array() 传入数组,执行一个正则表达式搜索和替换使用回调
6 preg_replace_callback() 执行一个正则表达式搜索并且使用一个回调进行替换
7 preg_replace() 执行一个正则表达式的搜索和替换
8 preg_split() 通过一个正则表达式分隔字符串

七、PHP 文件系统管理

有点像Linux命令

7.1 什么是文件操作:

我们会点鼠标右键删除文件、会 control(ctrl)+c(或右键)复制、粘贴文件,会新建一些文件,检测这个文件是不是只读文件。在电脑里面进行的这些操作,在代码里面如果能操作就好了。因为,如果有了这些操作。我们能做很多事情了:可不可以写入修改配置文件、是不是可以做 PHP 安装的时候检测文件的权限、是不是可以做生成 Html 文件等等很多不同的操作,总之其他太多太多的地方用到了文件操作。

7.2 fopen、fread、fclose 等操作读取文件

7.2.1 readfile读取文件函数
PHP
readfile ( string: $文件名)//功能:传入一个文件路径,输出一个文件。

例:

PHP
<?php   //linux类的读了方式   readfile("/home/paul/test.txt");   //windows类的读取方式   readfile("c://oldboy/oldboy/boot.ini");?>//注意:上面的代码中windows的斜线是\斜线,可能会转义掉一些字符。因此,我们写的时候最好写上两个斜线。(上面没改)
7.2.2 file_get_contents打开文件函数
PHP
<?php   $filename = 'NoAlike.txt';   $filestring = file_get_contents($filename);   echo $filestring;?>

file_get_contents打开文件的方式简单、粗暴。

7.2.3 fopen、fread、fclose操作读取文件
PHP
resource fopen	 	    ( string $文件名, string 模式)string fread 			( resource $操作资源, int 读取长度)bool fclose 			( resource $操作资源 )

fopen 的模式有下面几个,我们来讲一下 fopen 的模式:

序号 模式 说明
1 r 只读方式打开,将文件指针指向文件头。
2 r+ 读写方式打开,将文件指针指向文件头。
3 w 写入方式打开,将文件指针指向文件头并将文件大小截为0。如果文件不存在则尝试创建。
4 w+ 读写方式打开,将文件指针指向文件头并将文件大小截为0。如果文件不存在则尝试创建。
5 a 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建。
6 a+ 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建。
7 x 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建。
8 x+ 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建。
PHP
<?php   //你可以创建一个NoAlike.txt,以只读模式打开   $fp = fopen('NoAlike.txt', "r");   //var_dump()操作一下$fp看看效果,输出的是不是只有类型提示的是resource   var_dump($fp);?>

7.3 PHP 创建和修改文件内容

7.3.1 file_put_contents写入文件
PHP
file_put_contents ( string $文件路径, string $写入数据)//功能:向指定的文件当中写入一个字符串,如果文件不存在则创建文件。返回的是写入的字节长度

例:

PHP
<?php   $data = "在PHP中文网学好PHP,妹子票子不再话下!";   $numbytes = file_put_contents('test.txt', $data);   if($numbytes){       echo '写入成功,我们读取看看结果试试:';       echo file_get_contents('test.txt');   }else{       echo '写入失败或者没有权限,注意检查';   }?>
7.3.2 fwrite配合fopen进行写入操作
PHP
<?php    $filename = 'test.txt';    $fp= fopen($filename, "w");    $len = fwrite($fp, '我是一只来自北方的狼,却在南方冻成了狗');   	//关闭这个文件    fclose($fp);    print $len .'字节被写入了\n';?>/*代码说明:· 不论有没有新建都会打开文件重新写入· 原有的文件内容会被覆盖掉· 文件不存在会创建*/

有以下几种模式:

序号 模式 说明
1 r 只能读不能使用 fwrite 写
2 r+ 可操作读、写
3 w 只可以写功能
4 w+ 即可读又可以写
5 x 每次写入会干掉原有文件的内容,文件不存在都会创建
6 a 每次写入都会向文件的尾部追加内容

注:a+ 是增强的追加功能。可以读取时也可以使用。

7.4 PHP 创建临时文件

我们之前创建的文件都是永久文件,而创建临时文件在我们平时的项目开发中也非常有用,创建临时文件的好处:文件操作完成后即删除,不需要去维护这个文件的删除状态。

tmp 是临时文件的意思

PHP
<?php   //创建了一个临时文件   $handle = tmpfile();   //向里面写入了数据   $numbytes = fwrite($handle, '写入临时文件');   //关闭临时文件,文件即被删除   fclose($handle);   echo  '向临时文件中写入了'.$numbytes . '个字节';?>

7.5 PHP 移动、拷贝和删除文件

7.5.1 重命名文件:
PHP
rename($旧名,$新名);//功能:这个函数返回一个bool值,将旧的名字改为新的名字。

例:

PHP
<?php   //旧文件名   $filename = 'test.txt';   //新文件名   $filename2 = $filename . '.old';   //复制文件   rename($filename, $filename2);?>
7.5.2 复制文件
PHP
copy(源文件,目标文件)//功能:将指定路径的源文件,复制一份到目标文件的位置。

例:

PHP
<?php   //旧文件名   $filename = 'copy.txt';   //新文件名   $filename2 = $filename . '_backup';   //修改名字。   copy($filename, $filename2);?> //说明:会通过上面的例子,发现多出来了一个文件。
7.5.3 删除文件

这个删除是直接删除,在回收站看不到这个文件

PHP
unlink(指定路径的文件)

例:

PHP
<?php   $filename = 'test.txt';   if (unlink($filename)) {       echo  "删除文件成功 $filename!\n";   } else {       echo  "删除 $filename 失败!\n";   }?>
7.5.4 检测文件属性函数

假设安装界面的网址是:install.php,安装的锁文件是 install.lock。我们就可以检测 install.lock 文件是否存在。

PHP
<?phpif(file_exists('install.lock')){   echo '已安装,请不要再次进行安装';   exit;}?>

常用文件属性函数:

序号 函数信息 说明
1 file_exists() 文件是否存在
2 is_readable() 文件是否可读
3 is_writeable() 文件是否可写
4 is_executable() 文件是否可执行
5 is_file() 是否是文件
6 is_dir() 是否是目录
7 clearstatcache() 清除文件的状态缓存
7.5.5 PHP 目录处理函数

php 目录处理函数处理文件夹的基本思想如下:

  1. 读取某个路径的时候判断是否是文件夹

  2. 是文件夹的话,打开指定文件夹,返回文件目录的资源变量

  3. 使用 readdir 读取一次目录中的文件,目录指针向后偏移一次

  4. 使用 readdir 读取到最后,没有可读的文件返回 false

  5. 关闭文件目录

常用函数:

序号 函数信息 说明
1 opendir 打开文件夹,返回操作资源
2 readdir 读取文件夹资源
3 is_dir 判断是否是文件夹
4 closedir 关闭文件夹操作资源
5 filetype 显示是文件夹还是文件,文件显示 file,文件夹显示 dir

例:

PHP
<?php//设置打开的目录是D盘$dir = "d:/";//判断是否是文件夹,是文件夹if (is_dir($dir)) {   if ($dh = opendir($dir)) {      //读取到最后返回false,停止循环      while (($file = readdir($dh)) !== false) {           echo "文件名为: $file : 文件的类型是: " . filetype($dir . $file) . "<br />";       }       closedir($dh);   }}?>
7.5.6 PHP 文件权限设置

chmod主要是修改文件的的权限

PHP
<?php//修改linux系统/var/wwwroot/某文件权限为755chmod("/var/wwwroot/index.html", 755);chmod("/var/wwwroot/index.html", "u+rwx,go+rx");chmod("/somedir/somefile", 0755);?>
7.5.7 PHP 文件路径函数

我们经常会遇到处理文件路径的情况。例如:

  1. 文件后缀需要取出来

  2. 路径需要取出名字不取目录

  3. 只需要取出路径名中的目录路径

  4. 或者把网址中的各个部份进行解析取得独立值

  5. 甚至是自己组成一个 url 出来

很多地方都需要用路径处理类的函数。把常用的路径处理函数为大家做了标注,对着这个路径处理函数进行处理即可:

序号 函数信息 说明
1 pathinfo() 返回文件的各个组成部分
2 basename() 返回文件名
3 dirname() 文件目录部分
4 parse_url() 网址拆解成各部分组成
5 http_build_query() 生成 url 中的 query 字符串
6 http_build_url() 生成一个 url

例:

PHP
<?php$path_parts = pathinfo('d:/www/index.inc.php');echo '文件目录名:'.$path_parts['dirname']."<br />";echo '文件全名:'.$path_parts['basename']."<br />";echo '文件扩展名:'.$path_parts['extension']."<br />";echo '不包含扩展的文件名:'.$path_parts['filename']."<br />";?>
7.5.8 PHP 实现文件留言本

下面要使用的文件结构:

PHP
index.php		展示输入框和留言内容write.php 		向message.txt写入数据message.txt 	存入聊天内容

编写 index.php 文件信息:

PHP
<?php//设置时区date_default_timezone_set('PRC');//读了内容@$string = file_get_contents('message.txt');//如果$string 不为空的时候执行,也就是message.txt中有留言数据if (!empty($string)) {    //每一段留言有一个分格符,但是最后多出了一个&^。因此,我们要将&^删掉    $string = rtrim($string, '&^');    //以&^切成数组    $arr = explode('&^', $string);    //将留言内容读取    foreach ($arr as $value) {        //将用户名和内容分开        list($username, $content, $time) = explode('$#', $value);        echo '用户名为<font color="gree">' . $username . '</font>内容为<font color="red">' . $content . '</font>时间为' . date('Y-m-d H:i:s', $time);        echo '<hr />';    }}?><h1>基于文件的留言本演示</h1><form action="write.php" method="post">    用户名:<input type="text" name="username" /><br />    留言内容:<textarea  name="content"></textarea><br />    <input type="submit" value="提交" /></form>

看了刚刚的展示内容,我们知道文件存储时:
1、段与段之间进行了分割
2、内容与用户之前用一个特殊的符号进行了分割

编写 write.php 写入留言至文件的代码:

PHP
<?php//追加方式打开文件$fp=fopen('message.txt','a');//设置时间$time=time();//得到用户名$username=trim($_POST['username']);//得到内容$content=trim($_POST['content']);//组合写入的字符串:内容和用户之间分开,使用$#//行与行之间分开,使用&^$string=$username.'$#'.$content.'$#'.$time.'&^';//写入文件fwrite($fp,$string);//关闭文件fclose($fp);header('location:index.php');?>

注释:


  1. http://www.phpstudy.net/ ↩︎

  2. https://www.bilibili.com/video/BV1S3411T7R7?vd_source=6624e0e44854da7a1075d20beabc51d8 ↩︎

评论区

分享你的想法,与大家交流讨论

Twikoo 加载失败

Twikoo 脚本加载失败