特别鸣谢:@NLER提供雨课堂数据
(未完待续,请持续关注此板块)
【计科三四】雪课堂PHP期末模拟题:https://ks.wjx.top/vm/tUAmjxq.aspx#
【计科一二】PHP第一章练习题 https://ks.wjx.top/vm/QnjHad4.aspx#
【计科一二】PHP第二章练习题 https://ks.wjx.top/vm/h2FvEVI.aspx#
【计科一二】PHP第三章练习题 https://ks.wjx.top/vm/mDvpYRP.aspx#
【计科一二】PHP第四章练习题 https://ks.wjx.top/vm/Pj7n0AW.aspx#
【计科一二】PHP第五章练习题 https://ks.wjx.top/vm/wBNmk7o.aspx#
【计科一二】PHP第六章练习题 https://ks.wjx.top/vm/tU0jnyJ.aspx#
【计科一二】PHP第七章练习题 https://ks.wjx.top/vm/eqtTMy8.aspx#
以下内容都是博主根据上面的练习题逆向整理的
第1章
1.1 PHP入门
PHP开发环境有:Notepad++、NetBeans、Zend Studio、PhpStorm、Visual Studio Code
PHP可以在 windows环境上跑,也可以在linux环境下运行
PHP是基于B/S架构的脚本语言,运行于服务器端,不能通过浏览器运行
1.2 Apache
Apache 默认监听的端口号是
80
安装Apache 时,
conf目录
是Apache服务器的配置目录
- 主文件配置:
httpd.conf
- 辅文件配置:extra目录下的
httpd-vhosts.conf
等
默认情况下,辅配置文件不开启。
1.2.1 配置 Apache
将Apache解压后,需要配置安装路径才可以使用
(安装完还不能直接使用)。
Apache默认是不支持PHP运行的,我们可以通过在Apache的配置文件中加载PHP模块功能。
1、加载模块
LoadModule php7_module “c:/web/php7.4/php7apache2_4.dll”
2、指定php的文件类型
AddType application/x-httpd-php .php
3、指定配置目录
PHPIniDir “c:/web/php7”
配置安装路径
ServerRoot
配置项用于配置Apache的安装目录
使用Notepad++编辑器打开Apache的配置文件“htdocs\httpd.conf”,执行文本替换,将原来的“c:/Apache24”全部替换为“c:/web/apache2.4”。
配置服务器域名
ServerName
配置项用于配置Apache的服务器域名
打开
httpd.conf
,在里面搜索“ServerName”,找到下面一行配置(如下面的代码块)。下述代码开头的“#”表示该行是注释文本,应删去“#”使其生效,如下所示。
#ServerName www.example.com:80
上述配置中,“www.example.com”是一个示例域名,若不需要指定域名,也可以更改为本机地址,如“127.0.0.1”或“localhost”。
ServerName www.example.com:80
其他配置项
DocumentRoot
指令用来设置httpd提供服务的目录。即你所在项目入口处的文件夹。
Deny from all
表示拒绝所有的访问
Allow from all
表示允许所有的访问
1.2.2 安装 Apache
- 切换命令行到 Apache 安装目录
cd C:\web\apache2.4\bin
- Apache核心安装命令:**
httpd.exe -k install
**
1.2.3 启动 Apache
在命令提示符下输入
net start apache2.4
命令来启动apache2.4服务
1.2.4 其他
通过编辑apache配置文件httpd.conf,找到AddType application/x-httpd-php 进行修改,修改为:
AddType application/x-httpd-php .php .jsp
,这样PHP就可以执行扩展名为“.jsp”的程序。
1.3 MySQL
MySQL 的默认端口:
3306
当需要使用PHP操作MySQL数据库时,需要在php.ini文件中开启的扩展为
extension=php_mysqli.dll
DDL
查看数据库:SHOWDATABASES; (查看已有的数据库)
创建数据库:CREATEDATABASE`db`; (创建一个名称为db的数据库)
选择数据库:USE`db`; (选择数据库db进行操作)
删除数据库:`DROP DATABASE `db`; (删除数据库db)
DTL
DML
其他
在查询SQL语句中
LIKE
或
NOT LIKE
用于模糊查询,
%
表示一个或多个字符
第二章
2.1 PHP的数据类型
- 标量数据类型:String(字符串)、Integer(整型)、Float(浮点型)、Boolean(布尔型)
- 复合数据类型:Array(数组)、Object(对象)
- 特殊数据类型:NULL(空值)、Resource(资源)
2.2 PHP 传值赋值 和 引用赋值
PHP 支持引用赋值,使用
$var = &$othervar;
语法。
引用赋值意味着两个变量指向了同一个数据,没有拷贝任何东西。
示例:
<?php$a=10;$b=&$a;$b=20;echo$a.'--'.$b;// 运行结果:20--20?>
2.3 PHP中的
foreach
循环
<?php$info=['id'=>1,'Jac','age'=>18];foreach($infoas$k=>$v){echo$k.': '.$v.' ';}// 运行结果:id: 1 0: Jac age: 18
2.4
&&
||
and
or
的区别
优先级从高到低:
&&
||
and
or
- && 和 || 的优先级高于 and 和 or
- && 和 || 是左结合的,而 and 和 or 是右结合的
- && 和 || 的运算结果是布尔值,而 and 和 or 的运算结果是最后一个计算的操作数
举个例子:
<?php$a=true;$b=false;$c=true;var_dump($a&&$b||$c);// bool(true)var_dump($aand$b||$c);// bool(false)var_dump($a||$b&&$c);// bool(true)var_dump($aor$b&&$c);// bool(true)var_dump(true&&false);// bool(false)var_dump(trueandfalse);// bool(true)?>
2.5 round(), floor(), ceil() 的区别
在PHP中,round()、floor()、ceil()都是用于处理数字的函数,它们的主要区别如下:
- round():把一个浮点数四舍五入为最接近的整数。如果小数部分为0.5,则根据偶数舍去或进位。
- floor():把一个浮点数向下取整为最接近的整数。即舍去小数部分,返回不大于原数的整数。
- ceil():把一个浮点数向上取整为最接近的整数。即进位到最接近的整数,返回不小于原数的整数。
总的来说,round()函数在处理小数时比较精确,而floor()和ceil()函数主要用于处理需要向下或向上取整的情况。
2.6 可变变量
在 PHP 中,可变变量是一种非常独特的特性,它允许您动态地为变量赋值,并且通过对变量名进行操作,来访问和修改该变量的值。
可变变量的语法是在变量名前面加上两个美元符号(
$$
)。例如,假设您有一个名为
$var
的变量,您可以创建一个可变变量,以便它的名称由另一个变量
$var1
指定:
$var='Hello World!';$var1='var';echo$$var1;// Hello World!
这将输出 ‘Hello World!’,因为可变变量
$$var1
实际上是
$var
。
可变变量在某些情况下非常有用,例如在使用
关联数组
时,您可以动态地为数组项赋值:
$fruit='apple';$$fruit=5;echo$apple;// 5
这将输出 5,因为通过可变变量,我们为数组项
$apple
赋值为5。
需要注意,可变变量在某些情况下可能会使您的代码更难以阅读和维护,因此应该谨慎使用。
2.7 字符串拼接
在 PHP 中,可以使用点(.)运算符来拼接字符串。
例如,如果要拼接两个字符串 $str1 和 $str2,可以使用以下语法:
$newstr=$str1.$str2;
也可以使用复合赋值运算符 .= 来将另一个字符串添加到已有字符串的末尾:
$str1="hello";$str1.=" world";// $str1 现在为 "hello world"
另外,在 PHP 5.6+ 版本中,还可以使用双引号字符串插值来拼接字符串。例如:
$name="John";echo"My name is $name";// 输出 "My name is John"
上述例子中,在字符串中使用变量名 $name 就会自动替换成变量的值。这种方式更简便快捷,使用起来更加方便。
2.8 全局变量和局部变量
在 PHP 中,全局变量和局部变量的使用和其他编程语言类似。
全局变量是定义在函数外部的变量,可以在脚本中的任何位置访问和使用。例如:
$global_var="Hello";functionprint_global_var(){global$global_var;// 必须使用 global 关键字声明外部变量echo$global_var;}print_global_var();// 输出 "Hello"
需要注意的是,在函数中使用全局变量时,必须通过 global 关键字声明变量,否则该变量会被认为是局部变量。
局部变量是定义在函数内部的变量,只能在该函数范围内访问和使用。例如:
functionprint_local_var(){$local_var="World";echo$local_var;}print_local_var();// 输出 "World"echo$local_var;// 报错:Undefined variable: local_var
需要注意的是,局部变量的作用域只限于该函数,函数执行结束后,局部变量的值就会被销毁。而全局变量的作用域则为整个脚本,除非显式销毁变量或脚本执行结束,否则全局变量的值会一直存在。
因此,在编写 PHP 代码时,应谨慎使用全局变量,以防止意外修改变量值或引起其他问题。而对于需要在多个函数或页面中使用的变量,可以考虑使用常量或 session 变量来实现。
2.9 关联数组
PHP的关联数组是一种特殊的数组类型,其中每个元素都有一个关联的键来标识它。在关联数组中,键可以是字符串或整数,而不仅仅是数字。这使得关联数组更灵活,因为您可以使用具有意义的键来组织和访问数据。
创建关联数组时,需要使用array()函数,并将每个键和对应的值作为参数传递。下面是一个示例:
$person=array("name"=>"John","age"=>30,"city"=>"New York");
在上面的示例中,我们创建了一个名为$person的关联数组,其中包含三个元素:name、age和city。每个元素都有一个对应的键,分别为"name"、“age"和"city”。
要访问关联数组中的元素,可以使用其键作为索引。例如,要输出$person数组中的名称,可以使用以下代码:
echo$person["name"];
这将输出"John",因为"name"键对应的值是"John"。
您还可以使用foreach循环遍历关联数组中的所有元素。例如,以下代码将遍历$person数组中的所有元素,并输出它们的键和值:
foreach($personas$key=>$value){echo$key.": ".$value."<br>";}
这将输出以下内容:
name: John
age:30
city:NewYork
总的来说,关联数组是PHP中一种非常有用的数据类型,可以让您使用有意义的键来组织和访问数据。
2.10 unset()
PHP中的unset()函数用于销毁指定变量,使其不再存在于内存中。当使用unset()函数删除一个变量时,PHP会回收变量的内存空间,从而释放内存并提高程序的性能。
此外,unset()函数不仅可以用于删除变量,还可以用于删除数组中的元素,例如:
$fruit=array('apple','orange','banana');unset($fruit[1]);// 删除数组中的第二个元素('orange')print_r($fruit);// 输出:Array([0] => apple [2] => banana)
需要注意的是,unset()函数只能删除变量本身,而不能删除变量指向的值。如果想要清空变量的值,可以使用赋值为null的方式,例如:
$name='John';$name=null;// 清空$name变量的值
2.11 使用字符串函数获取文件的扩展名
<?php$file_name="apple.jpg";$file_array=explode(".",$file_name);$file_ext=end($file_array);echo$file_ext;// 运行结果:jpg
第3章
- mysqli_query()函数用于执行MySQL操作语句
- 在更新数据时,如果没有指定where条件,则所有记录行都将被更新
- 可以在like之前使用not关键字,用来查询与指定通配符不匹配的记录
- mysql_query()函数执行“use 数据库名”这条SQL语句可以实现数据库的选择
- limit的第一个参数表示的是每次读取的起始位置
- 操作MySQL数据库的PDO扩展的文件名是extension=php_pdo_mysql.dll
- 使用like模糊搜索时,“%Y%”这样的条件将匹配包含字符“Y”的字符串
- 在MySQL中,数据表中的数据条目是从0开始计算的
- 在使用insert语句添加数据时,数据的值的顺序需要与数据表中的字段顺序保持一致
- 使用limit子句可以实现分页获取数据,它的第一个参数是起始位置
- mysql_fetch_assoc()函数从结果集中取得一行作为关联数组
- PHP操作MySQL数据库时,需要使用mysqli_query()函数执行SQL语句
- select * from
itcast_info
limit 0,100可以查询出前100条数据 - mysqli扩展在默认情况下已经安装好了,在php.ini中开启该扩展的配置项是extension=php_mysqli.dll
- PRIMARY KEY可以唯一标识表中的某一条记录
- 在MySQL中更新数据时,一条SQL语句可以更新多行数据
- mysql_query()函数在执行查询语句时,返回的数据需要使用类似mysqli_fetch_array()等函数获取,并处理后输出
- mysql_query()仅对SELECT、SHOW、EXPLAIN或DESCRIBE语句返回一个资源标识符,如果查询执行不正确则返回FALSE
- 使用mysqli扩展连接到数据库需要调用mysqli_connect()函数,并判断连接是否成功
- SQL语句可以使用ORDER BY关键字实现排序,DESC表示降序排序,ASC表示升序排序
- 使用SQL语句可以创建数据表,指定数据表的字段名、类型、主键、自增等信息
- 在选择数据库前必须指定字符集,可以使用SET NAMES关键字指定
- 使用limit子句可以实现分页获取数据,包括起始位置和每页显示的记录数
以上是PHP操作MySQL数据库的主要知识点总结。在实际应用中,需要根据不同的需求,灵活运用这些知识点进行开发。
第4章
- output_buffering = 4096表示输出缓冲区大小为4096字节
- 使用session_start()函数开启一个会话,并可以在$_SESSION超全局变量中保存会话数据
- 超全局变量
$_GET
、$_POST
、$_SERVER
、$_COOKIE
、$_SESSION
、$_REQUEST
等是PHP预定义好的变量,可以在脚本的任何位置使用 - session会话ID在客户端和服务器端都保存,用于区别不同的用户
- 使用setcookie()函数创建Cookie,可以设置Cookie的名称、值、过期时间、作用域等参数
- JavaScript表单验证只能做简单的验证,在服务器端进行表单验证可以保证系统的安全稳定
- Session是一种服务器端的技术,它的生命周期从用户访问页面开始,直到关闭浏览器结束
- Content-Type字段用于表示实体内容的MIME类型
- 可以通过setcookie()函数为保存到Cookie中的SessionID设置HttpOnly属性,使其只能通过HTTP协议访问
- 在使用表单时,相同name的单选按钮如果都没有选中,则不会提交该数据
- HTTP协议是一种明文传输协议,对于安全性敏感的网站,应使用HTTPS协议进行加密传输
- 使用setcookie()函数创建Cookie时必须在其他信息输出前调用,否则会导致程序出错
- 可以通过trim()、intval()、strip_tags()、htmlspecialchars()等函数对用户输入数据进行过滤和转换
- 可以使用preg_match()函数进行正则表达式匹配
- 使用HTTP协议发送响应消息时,可以在响应头中增加Set-Cookie响应头字段来设置Cookie
- HTTP协议中常见的状态码有404、200、403、500等
- Web服务器可以为每个用户的浏览器创建一个供其独享的Session文件
- Session数据保存在服务器端,但是sessionid是保存在客户端的,因此需要通过Cookie来进行传递
- 可以使用$_SESSION超全局变量从Session中读取数据
- 可以使用HTTP协议中的GET和POST方法来向服务器提交数据,GET方法将数据置于URL中,而POST方法将数据置于请求体中
以上是PHP会话管理和HTTP协议相关的主要知识点总结,对于实际开发中的应用,需要根据不同的需求灵活运用这些知识点进行开发和维护。
第5章
- 图像处理函数:
- imagesetpixel(): 用于在图像中绘制一个像素点。
- imageline(): 用于在图像中绘制一条直线。
- imagerectangle(): 用于在图像中绘制一个矩形。
- imageellipse(): 用于在图像中绘制一个椭圆形。
- imagecreatetruecolor(): 用于创建一个真彩色图像,支持各种颜色。
- getimagesize(): 用于获取图像的信息,包括宽度、高度和类型等。
- 文件操作函数:
- basename(): 用于获取路径中的文件名部分。
- pathinfo(): 用于返回文件路径的信息,包括目录名、文件名、文件基本名和扩展名。
- copy(): 用于复制文件。
- file(): 将整个文件读入数组中,数组中每个元素为一行数据。
- fgets(): 用于在打开文件时获取一行数据。
- file_get_contents(): 将文件全部内容读取到一个字符串中。
- fgetc(): 在打开文件时获取一个字符。
- fopen(): 用于打开文件。
- fclose(): 用于关闭文件。
- fread(): 用于读取文件内容。
- fwrite(): 用于写入文件内容。
- filesize(): 用于获取文件大小。
- unlink(): 用于删除文件。
- rmdir(): 用于删除目录,但只能删除空目录。
- dirname(): 用于返回路径中的目录部分。
- is_file(): 用于判断文件是否存在。
- is_dir(): 用于判断目录是否存在。
- scandir(): 用于获取目录中的文件列表。
- mkdir(): 用于创建目录。
- 文件上传:
- $_FILES数组:用于获取上传文件的相关信息。
- move_uploaded_file()函数:用于将上传文件移动到指定位置。
- enctype属性值设置为multipart/form-data:用于实现文件上传。
- HTTP请求方法:
- GET:用于从服务器获取数据。
- POST:用于向服务器提交数据。
- 超全局数组:
- $_GET:用于获取由HTTP_GET方式提交至PHP脚本的变量。
- $_POST:用于获取由HTTP_POST方式提交至PHP脚本的变量。
- $_REQUEST:用于获取由GET、POST和COOKIE方式提交至PHP脚本的变量。
- $_FILES:用于获取上传文件的相关信息。
- 图片水印:
- imagecopy(): 用于将一个图像复制到另一个图像上。
- imagecopymerge(): 用于将一个图像复制到另一个图像上并设置透明度。
- 文字水印:
- imagefttext(): 使用FreeType 2字体将文本写入图像。
- imagettftext(): 用TrueType字体向图像写入文本。
- 文件下载:
- header()函数:用于设置HTTP响应头。
- Content-type:用于指定下载文件的MIME类型。
- Session技术:
- 用于验证码的验证。
- 文件指针指向:
- 打开文件时根据打开模式和参数决定。
- 文件打开模式:
- r:只读方式打开,将文件指针指向文件头。
- r+ :读写方式打开,将文件指针指向文件头。
- w:写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
- w+ :读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
- a:写入方式打开,将文件指针指向文件尾。如果文件不存在则尝试创建之。
- a+ :读写方式打开,将文件指针指向文件尾。如果文件不存在则尝试创建之。
第6章
回答每一个问题,如下:
- 在PHP的类中,提供了三个访问修饰符 公有 public 、保护protected 、私有private。 答案:对。
- 在类中可以使用 self 关键字表示当前的对象。 答案:错。self是在类内调用静态成员的方式。
- 在PHP类中可以使用final关键字禁止继承和重写。 答案:对。
- 类的继承是指在一个现有类的基础上去构建一个新类,构建出的新类称为子类,现有类称为父类。 答案:对。
- 在PHP中,可以通过 abstract 关键字声明抽象类, 抽象类中可以有非抽象方法、成员属性和常量。 答案:对。
- spl_autoload_register()可以实现类库的自动加载。 答案:对。
- 保证一个类仅有一个实例,这句话描述的是单例模式。 答案:对。
- 在PHP语言中,抽象类不能被实例化。 答案:对。
- 在子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数,而不仅仅是相同的方法名,如果想要调用父类中被重写的方法,就需要使用parent关键字, parent关键字用于访问父类的成员。由于parent关键字引用的是一个类而不是一个方法,因此需要使用范围解析操作符(::)。子类方法重写父类方法时,访问权限不能小于父类方法的访问权限。 答案:对。
- 在创建对象时,如果不需要传递参数,则可以省略类名后面的括号。 答案:对。
- 面向对象的三大特征是封装、多态、继承,其中继承的实现非常简单,在编写一个类文件的时候使用extends关键字来继承另一个类即可,可以通过重写来实现多态效果。 答案:对。
- 在类中声明的成员变量被称为成员属性,声明的方法被称为成员方法。 答案:对。
- 接口不能直接被实例化,即不能使用new关键字创建接口对象。PHP提供implements关键字用于实现接口。 答案:对。
- 如果抽象类中所有的成员方法都是抽象的,则可以将这个类定义为接口,其语法格式如下: interface 接口名{ // 成员 常量 // 抽象方法 } 其中,关键字interface用来定义接口。接口中的成员属性只能是使用const修饰的常量,不能是变量,而抽象类中可以定义成员变量。接口中所有的方法都是抽象方法,因此方法名前就不需要使用abstract关键字修饰了。 答案:对。
- 这个符号“::”被称为静态访问符,访问静态成员都需要通过这个操作符来完成。 答案:对。
- self是在类内调用静态成员的方式,而类名在类内和类外都可以调用。 答案:错。类名在类外可以调用,在类内需要使用self。
- 如果一个类继承了某个抽象类,则它必须实现该类的所有抽象方法。 答案:对。
- 抽象类不能直接被实例化,即不能使用new关键字创建抽象类对象,必须先继承该抽象类,然后再实例化子类。抽象类中至少要包含一个抽象方法。如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现,即只有声明没有方法体,不能被调用。 答案:对。
- 子类在继承父类时,会继承父类的所有公共成员和受保护的成员,而不会继承父类的私有成员。 答案:对。
- 类中定义的__construct()表示构造方法,它会在类实例化对象时自动调用,用于初始化类中的成员。在一个对象被销毁时,被自动调用的方法是析构方法__destruct()。 答案:对。
- 类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。 答案:对。
- 在类中声明静态成员的关键字是static。
- 在PHP中,可以创建对象的关键字是 new。
- 在类中,属性是通过成员变量实现的,而行为是通过成员函数(又称为方法)实现的。定义类的语法格式:类名【成员变量;成员方法;】。
- 对象复制可以通过clone关键字来完成。
第7章
PDO (PHP Data Object) 是一种用于访问数据库的扩展,可以统一不同数据库的访问接口,实现代码的可移植性。其核心类是PDO类,使用方式分为面向对象和面向过程两种语法形式。
PDO的数据源(DSN)包括PDO驱动名、主机名、端口号、数据库名称等信息。PDO处理结果集的方法包括fetch()、fetchColumn()和fetchAll(),其中fetch()方法用于获取下一行数据,需与while配合使用以获取所有数据;fetchColumn()方法以字符串方式返回指定列的值;fetchAll()方法以数组形式返回所有行。
PDO执行SQL语句有三种方法:exec()方法主要用于没有结果集合返回的操作,如INSERT、UPDATE、DELETE等操作;query()方法主要用于有记录结果返回的操作,特别是SELECT操作;预处理语句可以解决重复分析和编译的问题,提高运行速度。
PDO错误处理模式包括ERRMODE_ERROR、ERRMODE_SILENT、ERRMODE_WARNING和ERRMODE_EXCEPTION;errorCode()和errorInfo()方法用于检查语句和数据库对象是否有错误。在使用PDO的预处理语句时,bindParam()方法可以将变量参数绑定到占位符上,execute()方法用于执行预处理语句。
PDO的缺点是维护困难和可移植性差,但其解决了不同数据库扩展的应用程序接口互不兼容的问题。
重点知识点:PDO的数据源(DSN)、处理结果集的方法、预处理语句、执行SQL语句的三种方法、错误处理模式。
版权归原作者 okfang616 所有, 如有侵权,请联系我们删除。