版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025年新版php期末笔试题及答案一、单项选择题(每题2分,共20分)1.以下关于PHP8.3新特性的描述,错误的是?A.新增`enum`类型的`from()`和`tryFrom()`方法B.允许在`match`表达式中使用`null`作为分支条件C.支持`readonly`类属性的默认值声明D.废弃`mb_strlen()`函数的第四个参数答案:D(PHP8.3新增`mb_strlen()`对`encoding`参数的严格检查,未废弃该参数)2.执行以下代码,输出结果是?```php$arr=[1,2,3];array_walk($arr,function(&$v){$v=$v;});echoimplode(',',$arr);```A.1,2,3B.1,4,9C.2,4,6D.报错答案:B(`array_walk`默认传递引用时需显式声明引用参数,此处正确修改原数组)3.关于PHP面向对象特性,以下说法正确的是?A.抽象类中必须包含抽象方法B.Trait可以定义构造函数,但多个Trait冲突时需手动解决C.接口中可以定义私有方法D.最终类(finalclass)不能被继承,但可以定义抽象方法答案:B(抽象类可以没有抽象方法;接口方法必须是公共的;最终类不能有抽象方法)4.以下哪个函数可以正确获取当前脚本的绝对路径?A.`$_SERVER['PHP_SELF']`B.`__FILE__`C.`dirname($_SERVER['SCRIPT_FILENAME'])`D.`getcwd()`答案:B(`__FILE__`返回当前文件的绝对路径,`PHP_SELF`可能包含路径信息但受URL影响)5.使用PDO连接MySQL数据库时,正确的DSN格式是?A.`mysql:host=localhost;dbname=test`B.`pdo:mysql;host=localhost;dbname=test`C.`mysql:server=localhost;database=test`D.`database:mysql;host=localhost;name=test`答案:A(PDO的DSN格式为`驱动名:参数1=值;参数2=值`)6.执行以下代码,输出结果是?```php$x=5;functiontest(){global$x;$x=10;echo$x;}test();echo$x;```A.105B.510C.1010D.55答案:C(`global`声明将函数内变量指向全局作用域的$x,修改后全局变量同步)7.以下哪项不是PHP8.0引入的特性?A.命名参数(NamedParameters)B.联合类型(UnionTypes)C.构造函数属性提升(ConstructorPropertyPromotion)D.JIT编译器(Just-In-TimeCompiler)答案:D(PHP8.0引入了前三项,JIT在PHP8.2作为实验性功能推出)8.要限制用户上传文件类型为JPG/PNG,且大小不超过2MB,正确的`$_FILES`验证逻辑是?A.检查`$_FILES['file']['type']`是否为`image/jpeg`或`image/png`,并判断`$_FILES['file']['size']<=21024`B.检查文件扩展名是否为`.jpg`或`.png`,并判断`$_FILES['file']['size']<=210241024`C.使用`getimagesize()`验证MIME类型,并判断`$_FILES['file']['size']<=210241024`D.直接信任前端传递的`Content-Type`头,并限制大小答案:C(`$_FILES['type']`不可信,扩展名可伪造,`getimagesize()`更可靠;2MB=210241024字节)9.关于PHP错误处理,以下说法错误的是?A.`E_ERROR`错误会导致脚本终止B.使用`set_error_handler()`可以捕获所有级别的错误C.`try/catch`只能捕获异常(Exception),不能直接捕获错误(Error)D.PHP8.0起,大部分错误会转换为`Error`异常答案:B(`set_error_handler()`无法捕获`E_ERROR`、`E_PARSE`等致命错误)10.以下代码的输出结果是?```php$str='HelloPHP8.3';echopreg_replace('/(\b\w+\b)(\s+)(\b\w+\b)/','$3$2$1',$str);```A.PHPHello8.3B.Hello8.3PHPC.PHP8.3HelloD.8.3PHPHello答案:A(正则匹配两个单词及中间空格,交换顺序,原字符串匹配"Hello"和"PHP",替换为"PHPHello",剩余"8.3"保留)二、填空题(每空2分,共20分)1.PHP8.3中新增的`[AllowDynamicProperties]`属性用于解决________问题。答案:动态属性被`__set_state()`或反射操作时的警告2.要将数组`['a'=>1,'b'=>2]`转换为JSON字符串并保留键名,应使用函数________,参数需添加________。答案:`json_encode()`,`JSON_FORCE_OBJECT`3.在MySQL中使用PDO预处理语句防止SQL注入时,应使用________方法绑定参数,或直接使用________占位符。答案:`bindParam()`,命名(或`:`)4.若要限制类的实例只能被创建一次,应使用________设计模式,通常通过私有的________方法和静态的________方法实现。答案:单例(Singleton),构造(__construct),获取实例(getInstance)5.PHP中`session_start()`函数必须在输出任何内容之前调用,否则会抛出________错误。答案:Headersalreadysent6.计算字符串`'PHP8'`的MD5哈希值(小写),结果为________。答案:`3d3d5d3d3d3d5d3d3d3d5d3d3d3d5d3d`(实际应为`e4d909c290d0fb1ca068ffaddf22cbd0`,此处为示例虚构)三、简答题(每题8分,共40分)1.说明PHP8.0引入的“联合类型”(UnionTypes)与“可空类型”(NullableTypes)的区别,并举例说明。答案:联合类型允许参数或返回值为多种指定类型之一(如`int|string`),可空类型是联合类型的特殊形式(`?Type`等价于`Type|null`)。例如:`functiontest(int|string$a):?float{...}`表示$a可为int或string,返回值可为float或null。2.解释“依赖注入”(DependencyInjection)在PHP框架中的作用,并举例说明Laravel框架如何实现。答案:依赖注入通过外部传入依赖对象,降低类之间的耦合。Laravel通过服务容器(ServiceContainer)自动解析依赖,例如控制器构造函数中声明`publicfunction__construct(UserService$userService)`,容器会自动创建`UserService`实例并注入。3.简述使用`mysqli`扩展的`mysqli_multi_query()`执行多条SQL语句时的注意事项。答案:需循环调用`mysqli_next_result()`释放结果集,否则后续查询会出错;需严格校验输入防止SQL注入;事务控制需谨慎,因多条语句可能跨事务边界;结果集获取需使用`mysqli_store_result()`存储。4.说明PSR-12编码规范中关于代码缩进、大括号位置和命名的主要要求。答案:缩进为4个空格;类大括号换行(K&R风格),方法大括号同行;常量全大写下划线分隔(如`MAX_COUNT`),类名帕斯卡命名(如`UserService`),方法和变量驼峰命名(如`getUserName()`)。5.比较PHP中`session`和`cookie`的区别(至少列出4点)。答案:存储位置:session在服务器,cookie在客户端;安全性:session更安全(数据不暴露);存储大小:session无限制,cookie通常<4KB;生命周期:session可设置过期时间或随浏览器关闭失效,cookie可长期存储;传输方式:session通过cookie传递session_id(默认),cookie随HTTP头每次发送。四、编程题(共20分)1.(10分)实现一个用户登录验证函数,要求:接收用户名($username)和密码($password)参数连接MySQL数据库(主机:localhost,用户:root,密码:123456,数据库:test)验证用户名是否存在,若存在则校验密码(密码已使用`password_hash()`存储)返回关联数组:成功时`['status'=>'success','user_id'=>123]`,失败时`['status'=>'error','msg'=>'...']`需防止SQL注入,处理数据库连接异常参考代码:```phpfunctionuserLogin(string$username,string$password):array{$pdo=null;try{$pdo=newPDO('mysql:host=localhost;dbname=test;charset=utf8mb4','root','123456',[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_EMULATE_PREPARES=>false]);$stmt=$pdo->prepare('SELECTid,password_hashFROMusersWHEREusername=?');$stmt->execute([$username]);$user=$stmt->fetch(PDO::FETCH_ASSOC);if(!$user){return['status'=>'error','msg'=>'用户名不存在'];}if(password_verify($password,$user['password_hash'])){return['status'=>'success','user_id'=>$user['id']];}else{return['status'=>'error','msg'=>'密码错误'];}}catch(PDOException$e){return['status'=>'error','msg'=>'数据库错误:'.$e->getMessage()];}finally{$pdo=null;//关闭连接}}```2.(10分)使用PHP实现一个简单的中间件(Middleware)类,要求:支持链式调用(如`$middleware->handle()->next()`)中间件可检查请求是否包含有效Token(假设Token为请求头`X-Token`,值为`secret123`)若验证通过则传递到下一个中间件,否则返回HTTP403状态码并终止参考代码:```phpclassMiddleware{protected$next;publicfunctionsetNext(Middleware$next):self{$this->next=$next;return$this;}publicfunctionhand
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业控制制度汇编与实施模板
- 酒店消防管理制度
- 周末帮父母做家务的事件记叙作文5篇范文
- 2025云南宣富高速楚雄市东南绕城高速元绿高速那兴高速高速公路收费员招聘341人笔试历年参考题库附带答案详解
- 2025云南丽水市汽车运输集团股份有限公司招聘工作人员2人笔试参考题库附带答案详解(3卷)
- 供应商稳定供货承诺书范文7篇
- 2025中国有研科技集团有限公司应届毕业生招聘(河北有岗)笔试历年参考题库附带答案详解
- 个人信用管理自律保证承诺书范文3篇
- 上海市分行2026年度校园招聘笔试历年典型考题及考点剖析附带答案详解
- 2026年湖北第二师范学院植物抗癌活性物质提纯与应用湖北省重点实验室高层次人才招聘5-8人备考题库完整答案详解
- GB 8270-2014食品安全国家标准食品添加剂甜菊糖苷
- 2023年杭州临平环境科技有限公司招聘笔试题库及答案解析
- 易制毒化学品日常管理有关问题权威解释和答疑
- LF炉机械设备安装施工方案
- 湖北省高等教育自学考试
- 企业三级安全生产标准化评定表(新版)
- 中心卫生院关于成立按病种分值付费(DIP)工作领导小组及制度的通知
- 五年级上册数学课件 口算与应用题专项 人教版(共64张PPT)
- 耐压测试仪点检记录表
- 梅州市梅江区村级资金财务管理制度(试行)
- 胸腺瘤与重症肌无力手术治疗课件
评论
0/150
提交评论