文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP基础学习

2023-09-12 07:43

关注

第一章、PHP基础

PHP是一种适合Web开发的编程语言,运行于服务器端,可以在C/S架构中为客户端软件提供服务器接口,又可以在B/S上作为架构来搭建动态网站。(本篇文章以B/S架构为基础)

Apache为PHP提供工作环境

Apache

目录结构

默认监听端口号:80

默认站点目录:http://localhost

错误页面

状态码
403

Forbidden;拒绝访问

404Not Found;页面没有找到
500Internal Server Error;服务器内部错误

1xx 信息提示:这些状态代码表示临时的响应

2xx 成功:这类状态代码表明服务器成功地接受了客户端请求。

3xx 重定向:客户端浏览器必须采取更多操作来实现请求。例如:浏览器可能不得不请求服务器上其他不同的页面,或通过代理服务器重复该请求。

4xx - 客户端错误:发生错误,客户端出现问题。例如,客户端请求不存在的页面,客 户端未提供有效的身份验证信息。

5xx - 服务器错误:服务器由于遇到错误而不能完成该请求。

第二章、PHP基本语法

标记与注释

标记

标记类型开始标记结束标记

标准标记(最优)

< ? php? >
短标记(需要将)< ?? >

注释

注释类型格式

C++(常用)

/ /
C/ *……*  /
Shell#

输出语句

输出语句类型含义
echo可包含多个,用“ ,”隔开
print与echo用法相同,只能输出一个值
print_r()

内置函数,可以输出任意类型

var_dump()打印一个或多个类型的数据,还可以获取元素类型和个数

PHP标识符

  1. 只能由字母、数字、下划线组成,且不能包含空格
  2. 必须以字母、下划线开头
  3. 长度任意
  4. 用作变量名时,区分大小写

数据与运算

定义常量

常量定义方式实例
define()函数 define('常量名称','常量值',true/false:用于设置常量名是否对大小写敏感)
const关键字cinst   常量名  = 常 量值

  定义变量

PHP是弱语言,可以事先不申明就可以直接进行赋值使用

        申明变量:     $  变量名

赋值方式实例
传值赋值$ 变量名 = 值
引用赋值$ 变量名 = &(引用)$变量名
可变变量

套娃;

$a = 'ni';

$ni = 'hao';

$hao = 'ma';

echo $a, '  ' ,$ $a '  ' ,$ $ $a;

返回:ni hao ma

数据类型

  1. 布尔型  bool :true/false
  2. 整型  int  
    进制数表示10
    八进制012
    十进制10
    十六进制0xa
  3. 浮点型

  4. 字符串型

转义字符

字符含义
\n换行
\r回车
\t水平指标符
\v垂直指标符
\eEscape
\f换页
\\反斜线

\$

美元标记
\"双引号

数据类型转换

运算符及优先级

流程控制语句

  1. 选择结构语句
if($score>=60){    echo '及格啦!';}
if(score>=60){    echo '及格啦!';}else{    echo '挂科了。';}
switch (表达式){    case 值1:代码段1;break;    case 值2:代码段2;break;    defaul:代码段n;}

         2.循环结构语句

​while(循环条件){    循环体;}​
do{    循环体;}while(循环条件);
for(定义变量;循环条件;变量自增或自减){    代码段;}

         3.跳转语句

        4.文件包含语句  

 include  '文件路径';

第三章、函数

函数定义语法结构

访问函数外定义的变量,需要使用'global'关键字

function函数名([参数1,参数2,……]){    函数体……    要是想要函数的返回值,就需要使用return关键字}

参数设置

在函数中定义的变量在函数调用完了就会被释放

参数示例
无参函数函数体内需要有return
按值传递

function 函数名(参数1,参数2,……){};在引用的时候可以使用变量代替

引用传参修改参数值function(&$ 变量名);用于全局变量
设置参数默认值可以在定义函数时设置默认参数
指定参数类型PHP7.0版本后可以设置参数的数据类型(跟C语言格式差不多)

嵌套调用

在调用一个函数时,调用其他的函数,下面给个例子:

  • 递归调用

一个函数在其函数体内调用自己

高级应用

  • 静态变量

想要调用函数后,值能够保存就要使用静态变量:

  • 可变函数

怎么说呢,这个函数,其实是一个规定,有点像可变变量($ 变量名)的用法你定义了一个函数,如果你想在某个变量里面使用的时候就在后面加一个"()"让它近似变成函数名的结构就行了。

这也说明一个问题,你可以用一个变量来代替函数名称。

  • 回调函数

一般用于参数传递

call_user_func作为PHP的内置函数,可以接受用户自定义的回调函数作为参数

  • 匿名函数

没有函数名称的函数,也称作闭包函数,一般用于临时定义的函数,用匿名函数就无需担心函数名称命名冲突的问题了。

PHP内置函数

  • 字符串函数
  • 一般括号"()"内第一个表示需要操作的字符串,第二个表示操作的起始位置,第三个表示操作的位数,若第三个被省略的话那就是一直操作到最后。
函数名称功能描述
strlen()

获取字符串长度

strpos()

查找字符串首次出现的位置

strrpos()查找字符串最后一次出现的位置
str_replace()对字符串中的某些字符进行替换操作
substr()获取字符串中的子串
explode()使用一个字符串分割另一个字符串

implode()

用指定的连接符将数组连接成一个字符串
trim()用指定字符串的首尾的空白字符
str_repeat()重复一个字符串
strcmp()用于判断两个字符串的大小
  • 数学函数
函数名功能描述函数名功能描述
abs()取绝对值min()取最小值
max()取最大值pi()取圆周率的值
ceil()向上取最接近的整数floor()向下取最接近的整数
fmod()取除法的浮点数余数pow()计算x的y次方
is_nan()判断是否为合法数值sqrt()取平方根
round()对浮点数进行四舍五入rand()随机生成整数
  • 时间日期函数
函数名功能描述
time()获取当前的UNIX时间戳
date()格式化一个本地时间/日期
mktime()获取指定日期的UNIX时间戳
shortime()将字符串转化成UNIX时间戳
microtime()获取当前的UNIX时间戳和微秒数

UNIX时间戳是表示格林威治时间1970年01月01日00时00分00秒到现在的总秒数

格式化时间戳

echo date('Y-m-d H-i-s');

第四章、数组

        要是操作一批数据的话,你每一条信息都用一个变量来定义的话就很麻烦,而且这些数据一般都有一定的关联性,你把它们串在一起定义成一个数组不是很方便。那也就引出了这个章节要讲的内容。

        在PHP中,数组是由一个或多个数组元素组成的,每个数组由键和值组成:"键"是元素的识别名称,"值"是元素内容;"键"和"值"存在一定对应关系称为"映射"。

数组构成:数组是由一个或多个数组元素组成的

数组元素:一每个数组元素由键(Key)和值(Value)构成

键:“键”为元素的识别名称,也被称为数组下标

值: “值”为元素的内容

映射: “键”和“值”之间存在一种对应关系,称之为映射

类型划分:根据键的数据类型,可以将数组划分为索引数组和关联数组

数组类型

  • 索引数组

键为整数的数组,一般情况是从0开始,用来标记元素的位置,当然也可以自己定义;你要是不设置键的话基本上默认索引数组。

0123
214321543
  • 关联数组

键为字符串的数组,一般都是键和值有一定的逻辑关系;需要你自己定义键。

姓名年龄性别电话
5t5不详怎么可能会告诉你

数组的基本使用 

  • 数组的定义

array()构建数组

//索引数组$fruit = array('apple','grape','pear');//省略了键名就是默认的0,1,2$sport = array(2=>'basketball',4=>'jogging');//自定义的键名2:篮球,4:慢跑//关联数组$ziliao = array('id'=>123,'name'=>'5t5','tel'=>'就不告诉你');//对应的键有对应的值

只要掌握这两个基本规则就可以把它们串起来使用。

  • 数组的赋值

就直接赋值就行了,PHP没有那么讲究。

$arr[] = 123;  //$arr[0]=123$arr[4] = 456;//$arr[4]=456$arr[] = '不想学啦';//$arr[5]='不想学啦' // []里面没有值的话就看上面要么从0开始,要么按顺序来$arr['name'] = '5t5';//$arr[name]='5t5' 
  • 短数组定义发

[ ]于array()的定义方式是相同的

$fruit = ['grape','pear'];$ziliao = ['name'=>'5t5','sex'=>'nan'];$num = [[2,3],[3,7]];//array(array(2,3),array(3,7));
  • 数组的遍历

用foreach()语句来完成遍历

//方式一foreach (数组名称 as 键 => 值) {    // 处理语句}//方式二foreach (数组名称 as 值) {    // 处理语句}
$info = ['id'=>1,'name'=>'5t5','sex'=>'nan'];//第一种方法foreach($info as $k => $v);//一个键一个值的打印    echo &k.':'.$v.' ';//输出结果id:1 name:5t5 sex:nan//第二种方法foreach($info as $v)//只要值打印    echo $v.' '//输出的结果1 5t5 nan// . 这个是连接字符串的符号,应该还记得吧
  • 数组的删除

用unset()函数来完成数组的删除

unset($info);
  • 数组操作符

运算符

含义

示例

说明

+

联合

$a + $b

$a$b的联合,合并数组

==

相等

$a == $b

如果$a$b具有相同的键值对则为true

===

全等

$a === $b

如果$a$b具有相同的键值对并且顺序和类型都相同则为true

!=

不等

$a != $b

如果$a不等于$b则为true

<> 

不等

$a <> $b

如果$a不等于$b则为true

!==

不全等

$a !== $b

如果$a不全等于$b则为true

数组查找

  • 顺序查找法

        只需按照数组中元素的保存顺序,利用待查的值与数组中的元素从前往后一个一个的进行比较,直到找到目标值或查找失败。

  • 二分查找法

        每次将查找值与数组中间位置元素的值进行比较,相等返回;不等则排除掉数组中一半的元素,然后根据比较结果大或小,再与数组中剩余一半中间位置元素的值进行比较,以此类推,直到找到目标值或查找失败。

  • 冒泡排序

        实现原理:按照要求从小到大排序或从大到小排序,不断比较数组中相邻两个元素的值,较小或较大的元素前移。冒泡排序比较的轮数是数组长度减1,每轮比较的对数等于数组的长度减当前的轮数

        缺点:冒泡排序的效率很低,在实际中使用较少。

  • 简单选择排序:

            是一种非常直观的排序算法。

         实现原理:从待排序的数组中选出最小或最大的一个元素与数组的第1个元素互换,接着再在剩余的数组元素中选择最小的一个与数组的第2个元素互换,依次类推,直到全部待排序的数组元素排序完成。

        如按照从小到大的顺序完成简单选择排序,图中利用箭头标注的两个元素就是在此次循环中互换的元素。

  • 快速排序

        是对冒泡排序的一种优化。

        实现原理:首先选择一个基准元素,通常选择待排序数组的第1个数组元素。通过一趟排序,将要排序的数组分成两个部分,其中一部分比基准元素小,另一部分比基准元素大,然后再利用同样的方法递归的排序划分出的两部分,直到将所有划分的数组排序完成。

  • 插入排序

        是冒泡排序的优化,是一种直观的简单排序算法。

        实现原理:通过构建有序数组元素的存储,对未排序数组的元素,在已排序的数组中从最后一个元素向第一个元素遍历,找到相应位置并插入。其中,待排序数组的第1个元素会被看作是一个有序的数组,从第2个至最后一个元素会被看作是一个无序数组。

 数组的常用函数

  • 指针操作函数

        用于指向数组中的某个元素,默认情况下,指向数组的第1个元素。通过移动或改变指针的位置,可以访问数组中的任意元素。

函数名称

功能描述

current()

获取数组中当前指针指向的元素的值

key()

获取数组中当前指针指向的元素的键

next()

将数组中的内部指针向前移动一位

prev()

将数组中的内部指针倒回一位

each()

获取数组中当前的键值对并将数组指针向前移动一步

end()

将数组的内部指针指向最后一个元素

reset()

将数组的内部指针指向第一个元素

$arr = ['a', 'b', 'c', 'd'];echo key($arr) . ' - ' . current($arr); // 获取当前指针指向的键和值:0 - aecho next($arr); // 将当前指针向前移动一位:becho end($arr); // 将当前指针指向最后一个元素:decho prev($arr); // 将当前指针倒回一位:cecho reset($arr); // 将指针指向第1个元素:a
$sweets = ['Muffin', 'cookie', 'cake'];while (list($k, $v) = each($sweets)) {    $curr = current($sweets);   // 此时指针已经被each()移动到了下一位   // 输出结果:0 => Muffin-cookie 1 => cookie-cake 2 => cake-    echo $k => $v-$curr ;}
  • 数组元素操作函数

在操作数组过程中,经常会遇到在数组的前面或后面添加或删除元素的情况。

函数名称

功能描述

array_pop()

将数组最后一个元素弹出(出栈)

array_push()

将一个或多个元素压入数组的末尾(入栈)

array_unshift()

在数组开头插入一个或多个元素

array_shift()

将数组开头的元素移出数组

array_unique()

移除数组中重复的值

array_slice()

从数组中截取部分数组

array_splice()

将数组中的一部分元素去掉并用其他值取代

$arr = ['puff', 'Tiramisu'];array_pop($arr);     // 移出数组最后一个元素print_r($arr);      // 输出结果:Array ( [0] => puff ) array_push($arr, 'cookie'); // 在数组末尾添加元素print_r($arr);     // 输出结果:Array ( [0] => puff [1] => cookie ) array_unshift($arr, 22, 33);// 在数组开头插入多个元素print_r($arr);  // 输出结果: Array ( [0] => 22 [1] => 33 [2] => puff [3] => cookie ) array_shift($arr);   // 移出数组第一个元素print_r($arr);     // 输出结果:Array ( [0] => 33 [1] => puff [2] => cookie )
  •  数组排序函数

        对于数组的排序,除了可使用前面小节讲解的排序算法实现外。PHP还提供了内置的数组排序函数,可以轻松对数组实现排序、逆向排序、按键名排序等操作。

函数名称

功能描述

sort()

对数组排序(从低到高)

rsort()

对数组逆向排序(从高到低)

asort()

对数组进行排序并保持键值关系

ksort()

对数组按照键名排序

arsort()

对数组进行逆向排序并保持键值关系

krsort()

对数组按照键名逆向排序

shuffle()

将数组元素顺序打乱

array_multisort()

对多个数组或多维数组进行排序

$weather = ['sun', 'rain', 'haze'];asort($weather);// 保持键值关系正序排序print_r($weather);// 输出结果:Array ( [2] => haze [1] => rain [0] => sun ) sort($weather);// 按正常类型正序排序print_r($weather);// 输出结果:Array ( [0] => haze [1] => rain [2] => sun ) rsort($weather);// 按正常类型倒序排序:print_r($weather);// 输出结果:Array ( [0] => sun [1] => rain [2] => haze )
  •  索引函数

数组中元素的查找,除了前面讲解的查找算法外,PHP还为其提供了内置函数。

函数名称

功能描述

in_array()

检查数组中是否存在某个值

array_search()

在数组中搜索给定的值,如果成功则返回相应的键名

array_key_exists()

检查给定的键名是否存在于数组中

$data = ['a' => 1, 'b' => 2, 'c' => 3];var_dump(in_array(2, $data));    // 输出结果:bool(true)var_dump(array_search(2, $data));    // 输出结果:string(1) "b" var_dump(array_key_exists(2, $data)); // 输出结果:bool(false)

 数组在字符串和函数中的应用

  • PHP提供的explode()函数用于根据指定字符对字符串进行分割
  • explode()函数的返回值类型是数组类型:第1个参数表示分隔符、第2个参数表示要分割的字符串、第3个参数是可选的,表示返回的数组中最多包含的元素个数,当其为负数m时,表示返回除了最后的m个元素外的所有元素,当其为0时,则把它当做1处理。
// ① 字符串分割成数组var_dump(explode('n', 'banana'));// 输出结果:array(3) { [0]=> string(2) "ba" [1]=> string(1) "a" [2]=> string(1) "a" } // ② 分割时限制次数var_dump(explode('n', 'banana', 2));// 输出结果:array(2) { [0]=> string(2) "ba" [1]=> string(3) "ana" } // ③ 返回除了最后2个元素外的所有元素var_dump(explode('n', 'banana', -2));// 输出结果:array(1) { [0]=> string(2) "ba" }
  • PHP提供的implode()函数用于利用指定字符将一维数组内的元素值连接成字符串
  • implode()函数的返回值类型为字符串型:1个参数表示连接字符串2个参数表示待转换的数组。其中,不论指定字符是否存在,只要第2个参数是空数组,结果都为空字符串。值得一提的是,由于历史原因,该函数的第1个参数可以省略。
// ① 利用指定字符连接一维数组元素的值echo implode('-', ['a', 'b', 'c']);// 输出结果:a-b-cecho implode(',', ['a' => 1, 'b' => 2]); // 输出结果:1,2// ② 省略指定字符echo implode(['a', 'b', 'c']);// 输出结果:abc// ③ 利用指定字符连接一个空数组var_dump(implode('it', []));// 输出结果:string(0) ""
  • 将数组作为参数调用函数

        在PHP中,call_user_func_array()函数可以实现回调函数的调用,并将一个数组作为回调函数的参数。回调函数执行后,其返回值将作为call_user_func_array()函数的返回值进行返回。

// 示例1,输出结果:10, 20function test($a, $b){echo "$a, $b";}echo call_user_func_array('test', [10, 20]); // 示例2,输出结果:int(1) int(2)call_user_func_array('var_dump', ['a' => 1, 'b' => 2]);

第五章、错误处理及调试

  •         错误用于指出语法、环境或编程问题。根据错误出现在编程过程中的不同环节,大致可以分为以下4
语法错误

指编写的代码不符合PHP的编写规范

逻辑错误

最让人头疼,不但不会阻止PHP脚本的执行,也不会显示出错误信息

环境错误

是由于PHP开发环境配置的问题引起的代码报错

运行错误一般不会阻止PHP脚本的执行,但会导致程序出现潜在的问题
  • PHP中的每个错误都有一个错误级别与之关联,用于表示当前错误的等级。 例如Error、Warning、Notice等错误。 PHP采用常量的形式来表示错误级别,每个错误级别都是一个整型。

级别常量

描述

E_ERROR

1

致命的运行时错误,这类错误不可恢复,会导致脚本停止运行

E_WARNING

2

运行时警告,仅提示信息,但是脚本不会停止运行

E_PARSE

4

编译时语法解析错误,说明代码存在语法错误,无法执行

E_NOTICE

8

运行时通知,表示脚本遇到可能会表现为错误的情况

E_CORE_ERROR

16

类似E_ERROR,是由PHP引擎核心产生的

E_CORE_WARNING

32

类似E_WARNING,是由PHP引擎核心产生的

E_COMPILE_ERROR

64

类似E_ERROR,是由Zend脚本引擎产生的

E_COMPILE_WARNING

128

类似E_WARNING,是由Zend脚本引擎产生的

E_USER_ERROR

256

类似E_ERROR,由用户在代码中使用trigger_error()产生的

E_USER_WARNING

512

类似E_WARNING,由用户在代码中使用trigger_error()产生的

E_USER_NOTICE

1024

类似E_NOTICE,由用户在代码中使用trigger_error()产生的

E_STRICT

2048

严格语法检查,确保代码具有互用性和向前兼容性

E_DEPRECATED

8192

运行时通知,对未来版本中可能无法正常工作的代码给出警告

E_ALL

32767

表示所有的错误和警告信息(在PHP 5.4之前不包括E_STRICT

// ① 使用未定义的变量echo $var;// 提示信息“Notice: Undefined variable...”// ② 使用未定义的常量echo PI;// 提示信息“Notice: Use of undefined constant...”// ③ 访问不存在的数组元素$arr = array();echo $arr['age'];// 提示信息“Notice: Undefined index: age...”
  • 手动触发错误
        PHP解释器自动触发的错误外,还可以根据不同的需求自定义错误,它们可以用于协助调试,或在发布给其他人的代码中生成不推荐使用的通知等。 PHP 的内置函数 trigger_error() 可以触发错误,该函数声明如下:
bool trigger_error ( string $error_msg [, int $error_type = E_USER_NOTICE ] )//第1个参数是错误信息内容//第2个参数是错误类别,默认为E_UESR_NOTICE

第六章、PHP与Web页面交互

Web交互的流程

  1. web表单交互

 

        当PHP收到来自浏览器提交的数据后,会自动保存到超全局变量中;超全局变量是PHP预定义好的变量,可以在PHP脚本的任何位置使用;常见的超全局数组变量有$_POST$_GET等。

  • 当表单的method属性提交方式为POST时,浏览器发送POST请求通过POST方式提交的数据会保存到$_POST
  • 当表单的method属性提交方式为GET时,浏览器发送GET请求通过GET方式提交的数据会保存到$_GET​​​​​​​

        2.URL参数交互

        当表单以GET方式提交时,会将用户填写的内容放在URL参数中进行提交。表单的method属性删除(或将其值改为get),然后提交表单,会得到如下URL

http://localhost/login.php?username=test&password=123456

        “? ”后面的内容为参数信息         参数是由参数名和参数值组成的,中间使用等号“= ”进行连接         多个参数之间使用“& ”分隔         username和 password 是参数名,对应表单中的 name 属性         test和 123456 是参数值,对应用户填写的内容         3.数组方式提交数据         复选框是一种支持提交多个值的表单控件,在编写表单时应将其name 属性设置为数组。
 游泳 读书 跑步

        4.HTML特殊字符处理

硬件

说明

nl2br()

将字符串中的换行符前插入HTML换行标记

strip_tags()

从字符串中去除HTMLPHP标记

htmlspecialchars()

将字符串中的特殊字符转换为HTML实体字符

htmlspecialchars_decode()

将字符串中的HTML实体字符转换回原来的字符

urlencode()

编码URL字符串

urldecode()

解码已编码的URL字符串

http_build_query()

生成URL编码后的字符串

HTTP协议

        HyperText Transfer Protocol的简称,超文本传输协议,专门用于定义浏览器与Web服务器之间数据交换的格式。

 

HTTP是一种基于“请求”和“响应”的协议

客户端与服务器建立连接后由客户端(浏览器)向服务器端发送一个请求,被称作HTTP请求

客户端与服务器建立连接后服务器接收到请求后会做出响应,称为HTTP响应

  • PHP处理过程

        在浏览器与服务器的交互过程中,Web服务器通过HTTP协议与浏览器进行交互PHP只用于处理动态请求

 

  •  HTTP请求消息

来源地址:https://blog.csdn.net/m0_52677891/article/details/127990108

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯