IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP 面试题(基础一) -> 正文阅读

[PHP知识库]PHP 面试题(基础一)

目录

PHP是什么?

PHP中echo(),print(),print_r()的区别

public、protected、private 三种访问控制模式的区别

OOP思想,特征和其意义

OOP的七大设计原则

表单中 get 与 post 提交?法的区别?

session 与 cookie 的关系和区别?

PHP7的新特性

PHP8的新特性

魔术常量

魔术?法

接?和抽象类的区别是什么?

PHP数组处理常用函数(重点看函数的‘参数’和‘返回值’)

PHP字符串处理常用函数

传值和传引?、传地址的区别

常见的状态码

include 和 require 有什么区别?


PHP是什么?????????

????????PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳JavaPerl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己,例如java的面向对象编程,该语言当初创建的主要目标是让开发人员快速编写出优质的web网站。 PHP同时支持面向对象和面向过程的开发,使用上非常灵活。

????????经过二十多年的发展,随着php-cli相关组件的快速发展和完善,PHP已经可以应用在?TCP/UDP服务、高性能Web、WebSocket服务、物联网实时通讯、游戏、微服务等非 Web 领域的系统研发。

PHP中echo(),print(),print_r()的区别

echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)

print() 只能打印出简单类型变量的值(如int,string)

print_r() 可以打印出复杂类型变量的值(如数组,对象)

echo 输出一个或者多个字符串

public、protected、private 三种访问控制模式的区别

public:公有,任何地?都可以访问

protected:继承,只能在本类或?类中访问,在其它地?不允许访问

private:私有,只能在本类中访问,在其他地?不允许访问

OOP思想,特征和其意义

OOP是?向对象编程,?向对象编程是?种计算机编程架构,OOP 的?条 基本原则是计算机程序是由单个能够起到?程序作?的单元或对象组合?成。

OOP具有三?特点:

1、封装性:也称为信息隐藏,就是将?个类的使?和实现分开,只保留部分接? 和?法与外部联系,或者说只公开了?些供开发?员使?的?法。于是开发?员只 需要关注这个类如何使?,?不?去关?其具体的实现过程,这样就能实现MVC 分?合作,也能有效避免程序间相互依赖,实现代码模块间松藕合。

2、继承性:就是?类?动继承其?级类中的属性和?法,并可以添加新的属性和 ?法或者对部分属性和?法进?重写。继承增加了代码的可重?性。PHP只?持单 继承,也就是说?个?类只能有?个?类。

3、多态性:?类继承了来??级类中的属性和?法,并对其中部分?法进?重 写。于是多个?类中虽然都具有同?个?法,但是这些?类实例化的对象调?这些 相同的?法后却可以获得完全不同的结果,这种技术就是多态性。多态性增强了软 件的灵活性。

1、易维护 采??向对象思想设计的结构,可读性?,由于继承的存在,即使改变需求,那么 维护也只是在局部模块,所以维护起来是?常?便和较低成本的。

2、质量? 在设计时,可重?现有的,在以前的项?的领域中已被测试过的类使系统满?业务 需求并具有较?的质量。

3、效率? 在软件开发时,根据设计的需要对现实世界的事物进?抽象,产?类。使?这样的 ?法解决问题,接近于?常?活和?然的思考?式,势必提?软件开发的效率和质 量。

4、易扩展 由于继承、封装、多态的特性,?然设计出?内聚、低耦合的系统结构,使得系统 更灵活、更容易扩展,?且成本较低。

帮助理解:?解析PHP面向对象的三大特征 - 海*星 - 博客园

OOP的七大设计原则

开闭原则:对扩展开放,对修改关闭

里氏替换原则:继承 必须保证 父类中的性质在子类中仍然成立

依赖倒置原则:面向接口编程,而不面向实现类

单一职责原则:控制 类的 粒度的大小 ,增强内聚性,减少耦合

接口隔离原则:要为各个类提供所需的专用接口

迪米特法则:迪米特法则(Law of Demeter)又叫作最少知识原则(The Least Knowledge Principle), 一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信,不和 陌生人说话。英文简写为: LOD。

合成复用原则:尽可能使用组合或者聚合等关系来关联类,其次才考虑使用继承。

前五个合称 SOLID原则(单一职责原则、开放关闭原则、里氏替换原则、接口隔离原则和依赖倒置原则)

表单中 get 与 post 提交?法的区别?

.1、GET 请求能够被 cache,GET 请求能够被保存在浏览器的浏览历 史 ??(密码等重要数据 GET 提交,别?查看历史记录,就可以直接 看 到这些私密数据)POST 不进?缓存。

2、GET 参数是带在 URL 后?,传统 IE 中 URL 的最?可??度为 2053 字符,其他浏览器对 URL ?度限制实现上有所不同。POST 请求 ?? 度限制(?前理论上是这样的)。

3、GET 提交的数据??,不同浏览器的限制不同,?般在 2k-8K 之 间, POST 提交数据?较?,??靠服务器的设定值限制,?且某些 数据 只能? POST ?法「携带」,?如 file。

4、全部? POST 不是?分合理,最好先把请求按功能和场景分下 类, 对数据请求频繁,数据不敏感且数据量在普通浏览器最?限定的 2k 范围内,这样的情况使? GET。其他地?使? POST。

5、GET 的本质是「得」,? POST 的本质是「给」。GET是从服务器上获取数据,POST是向服务器传送数据。?且,GET 是 「幂 等」的,在这?点上,GET 被认为是「安全的」。但实际上 server 端 也可以?作资源更新,但是这种?法违反了约定,容易造成 CSRF(跨 站请求伪造)。

session 与 cookie 的关系和区别?

基本概念

  对于许多人来说,都知道的是,cookie是存储在客户端的,可以用来放需要长期使用的内容,例如用户密码、用户账户等等,服务器是可以获取到cookie的内容的;而session则是存储在服务器端,通过唯一的session_id来区别用户,用于保存用户的登录状态和请求等,客户是不能获取到其内容的。
什么是cookie

Cookie翻译过来是‘ 小甜饼’,Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,实际上Cookie是服务器在本地机器上存储的一小段文本,并随着每次请求发送到服务器。

Cookie技术通过请求和响应报文中写入Cookie信息来控制客户端的状态。

Cookie会根据响应报文里的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下客户端再向服务端发起请求时,客户端会自动在请求报文中加入Cookie值之后发送出去.

之后服务端发现客户端发送过来的Cookie后,会检查是那个客户端发送过来的请求,然后对服务器上的记录,最后得到了之前的状态信息。

什么是session

对于cookie是存储在客户端的,这种存储在客户端的信息往往是不安全的,所以后来又有了session,客户端浏览器向服务器发送请求的时候,服务器将客户端的信息以某种形式存储在服务器上,这种存储在服务器端的信息在客户第二次访问服务器的时候被使用,用来确定用户的状态等信息。打个比方而言,就相当于这是一张记录客户信息的表格,客户只要表明身份,服务器就能从这个表格中来获取客户的信息,根据信息进行服务。

session与cookie的区别是什么?

1、保持状态: cookie和session都是用来跟踪浏览器用户身份的会话方式。

2、使用方式:

(1)cookie机制:如果不在浏览器中设置过期时间,cookie被保存在内存中,生命周期随浏览器的关闭而结 束,这种cookie简称会话cookie。如果在浏览器中设置了cookie的过期时间,cookie被保存在硬盘中,关闭浏 览器后,cookie数据仍然存在,直到过期时间结束才消失。 PHP 本文档使用 看云 构建 - 15 - Cookie是服务器发给客户端的特殊信息,cookie是以文本的方式保存在客户端,每次请求时都带上它

(2)session机制:当服务器收到请求需要创建session对象时,首先会检查客户端请求中是否包含sessionid。 如果有sessionid,服务器将根据该id返回对应session对象。如果客户端请求中没有sessionid,服务器会创建新 的session对象,并把sessionid在本次响应中返回给客户端。通常使用cookie方式存储sessionid到客户端,在交 互中浏览器按照规则将sessionid发送给服务器。如果用户禁用cookie,则要使用URL重写,可以通过 response.encodeURL(url) 进行实现;API对encodeURL的结束为,当浏览器支持Cookie时,url不做任何处 理;当浏览器不支持Cookie的时候,将会重写URL将SessionID拼接到访问地址后。

3、存储内容: cookie只能保存字符串类型,以文本的方式;session通过类似与Hashtable的数据结构来保存,能支持任何类型 的对象(session中可含有多个对象)

4、存储的大小: cookie:单个cookie保存的数据不能超过4kb; session大小没有限制。

5、安全性: cookie:针对cookie所存在的攻击:Cookie欺骗,Cookie截获;

session的安全性大于cookie。

PHP7的新特性

标量类型声明

返回值类型声明

语法糖:null合并运算符,太空船操作符

define允许定义常量数组,

匿名类,

新增了一些函数intdiv(),随机函数,

1、php7.0相比于php5.6的新特性 参考:PHP: 新特性 - Manual 2、php7.1相对于php7.0的新特性 参考:PHP: 新特性 - Manual 3、php7.2相对于php7.1的新特性 参考:PHP: 新特性 - Manual

PHP8的新特性

新增联合类型(Union Types);

添加了 WeakMap; 添加了 ValueError 类;

新增的特性大多是语法糖,主要是JIT。 JIT是一种编译器策略,它将代码表述为一种中间状态,在运行时将其转换为依赖于体系结构的机器码,并即时执 行,在PHP8中,Zend VM不需要解释某些操作码,并且这些指令将直接作为CPU级指令执行。

IT和opcache区别

要说明opcode cache与JIT的区别,得先明白,字节码,又叫中间码与机器码的区别。 简答的说,提升php执行效率,更快了。

魔术常量

__LINE__ :?件中的当前?号

__FILE__ :?件的完整路径和?件名。如果?在被包含?件中,则返回被包含的?件名。 ? PHP 4.0.2 起,__FILE__ 总是包含?个绝对路径(如果是符号连接,则是解析 后的绝对路径),?在此之前的版本有时会包含?个相对路径。

__DIR__ :?件所在的?录。如果?在被包括?件中,则返回被包括的?件所在的?录。 __FUNCTION__ :函数名称(PHP 4.3.0 新加)。? PHP 5 起本常量返回该函数被定义时的名字 (区分??写)。在 PHP 4 中该值总是?写字?的。

__CLASS__ :类的名称(PHP 4.3.0 新加)。? PHP 5 起本常量返回该类被定义时的名字(区 分??写)。 在 PHP 4 中该值总是?写字?的。类名包括其被声明的作?区域(例如 Foo\Bar)。注意? PHP 5.4 起 __CLASS__ 对 trait 也起作?。当?在 trait ?法 中时,__CLASS__ 是调? trait ?法的类的名字。

__NAMESPACE__ :当前命名空间的名称(区分??写)。此常量是在编译时定义的(PHP 5.3.0 新 增)。

__METHOD__ :类的?法名(PHP 5.0.0 新加)。返回该?法被定义时的名字(区分??写)。 __TRAIT__ :Trait 的名字(PHP 5.4.0 新加)。? PHP 5.4.0 起,PHP 实现了代码复?的?个 ?法,称为 traits。 Trait 名包括其被声明的作?区域(例如 Foo\Bar)。 从基类继承的成员被插?的 SayWorld Trait 中的 MyHelloWorld ?法所覆盖。其 ?为 MyHelloWorld 类中定义的?法?致。优先顺序是当前类中的?法会覆盖 trait ?法,? trait ?法?覆盖了基类中的?法。

魔术?法

__sleep: serialize 之前被调?

__wakeup: unserialize 时被调?

__toString: 打印?个对象时被调?

__set_state :调? var_export 时被调?,?__set_state的返回值作为 var_export 的返回值 __construct: 构造函数,实例化对象时被调?

__destruct: 析构函数,当对象销毁时被调?

__call: 对象调?某个?法,若存在该?法,则直接调?,若不存在,则调 ?__call 函数

__get: 读取?个对象属性时,若属性存在,则直接返回,若不存在,则调?__get 函数

__set: 设置?个对象的属性时,若属性存在,则直接赋值,若不存在,则调 ?__set 函数

__isset: 检测?个对象的属性是否存在时被调?

__unset: unset ?个对象的属性时被调?

__clone: 克隆对象时被调?

__autoload: 实例化?个对象时,如果对应的类不存在,则该?法被调?

接?和抽象类的区别是什么?

抽象类是?种不能被实例化的类,只能作为其他类的?类来使?。抽象类是通过关 键字abstract 来声明的。

抽象类与普通类相似,都包含成员变量和成员?法,两者的区别在于,抽象类中? 少要包含?个抽象?法,抽象?法没有?法体,该?法天?就是要被?类重写的。 抽象?法的格式为:abstract function abstractMethod();

接?是通过 interface 关键字来声明的,接?中的成员常量和?法都是 public 的, ?法可以不写关键字 public,接?中的?法也是没有?法体。接?中的?法也天? 就是要被?类实现的。

抽象类和接?实现的功能?分相似,最?的不同是接?能实现多继承

在应?中选 择抽象类还是接?要看具体实现。 ?类继承抽象类使? extends,?类实现接?使? implements。

PHP数组处理常用函数(重点看函数的‘参数’和‘返回值’)

 ①array()创建数组;   

②count()返回数组中元素的数?;   

③array_push()将?个或多个元素插?数组的末尾(?栈);   

④array_column()返回输?数组中某个单?列的值;   

⑤array_combine()通过合并两个数组来创建?个新数组;   

⑥array_reverse()以相反的顺序返回数组;   

⑦array_unique()删除数组中的重复值;   

⑧in_array()检查数组中是否存在指定的值;

参考链接:PHP: 数组 函数 - Manual

PHP字符串处理常用函数

 ①trim()移除字符串两侧的空?字符和其他字符;   

②substr_replace()把字符串的?部分替换为另?个字符串;   

③substr_count()计算?串在字符串中出现的次数;   

④substr()返回字符串的?部分;   

⑤strtolower()把字符串转换为?写字?;   

⑥strtoupper()把字符串转换为?写字?;   

⑦strtr()转换字符串中特定的字符;   

⑧strrchr()查找字符串在另?个字符串中最后?次出现;   

⑨strstr()查找字符串在另?字符串中的第?次出现(对??写敏感);   

⑩strrev()反转字符串;   

?strlen()返回字符串的?度;   

?str_replace()替换字符串中的?些字符(对??写敏感);   

?print()输出?个或多个字符串;   

?explode()把字符串打散为数组;   

?is_string()检测变量是否是字符串;   

?strip_tags()从?个字符串中去除HTML标签;   

?mb_substr()?来截中?与英?的函数

参考链接:PHP: 字符串 函数 - Manual

传值和传引?、传地址的区别

1、传值,

是把实参的值赋值给?参 那么知对?参的修道改,不会影响实参的值

2、传地址

是传值的?种特殊?式,只是他传递的是地址,不是普通的如int 那么传地址以后,实参和?参都专指向同?个对象

3、传引?

真正的以地址的?式传递参数 传递以后,?参和实参都是同?个对象,只是他们名字不同?已 对?参的修改将影属响实参的值

常见的状态码

1xx (临时响应)表示临时响应并需要请求者继续执?操作的状态代码

????????100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的 第?部分,正在等待其余部分。

????????101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。

????????102 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执?。

2xx (成功)表示成功处理了请求的状态代码。

???????200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的? ?。

????????201 (已创建) 请求成功并且服务器创建了新的资源。

????????202 (已接受) 服务器已接受请求,但尚未处理。

????????203 (?授权信息) 服务器已成功处理了请求,但返回的信息可能来?另?来 源。

????????204 (?内容) 服务器成功处理了请求,但没有返回任何内容。

????????205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。

????????206 (部分内容) 服务器成功处理了部分 GET 请求。

????????207 由WebDAV(RFC 2518)扩展的状态码,代表之后的消息体将是?个XML消 息,并且可能依照之前?请求数量的不同,包含?系列独?的响应代码。

3xx (重定向) 表示要完成请求,需要进?步操作。 通常,这些状态代码?来 重定向。

300 (多种选择) 针对请求,服务器可执?多种操作。 服务器可根据请求者 (useragent)选择?项操作,或提供操作列表供请求者选择。

301 (永久移动) 请求的??已永久移动到新位置。 服务器返回此响应(对 GET 或HEAD请求的响应)时,会?动将请求者转到新位置。

302 (临时移动) 服务器?前从不同位置的??响应请求,但请求者应继续使 ?原有位置来进?以后的请求。

303 (查看其他位置) 请求者应当对不同的位置使?单独的 GET 请求来检索响 应时,服务器返回此代码。

304 (未修改) ?从上次请求后,请求的??未修改过。 服务器返回此响应 时,不会返回??内容。

305 (使?代理) 请求者只能使?代理访问请求的??。 如果服务器返回此响 应,还表示请求者应使?代理。

307 (临时重定向) 服务器?前从不同位置的??响应请求,但请求者应继续使 ?原有位置来进?以后的请求。

4xx (请求错误) 这些状态代码表示请求可能出错,妨碍了服务器的处理。

400 (错误请求) 服务器不理解请求的语法。

401 (未授权) 请求要求身份验证。 对于需要登录的??,服务器可能返回此 响应。

402 该状态码是为了将来可能的需求?预留的。

403 (禁?) 服务器拒绝请求。

404 (未找到) 服务器找不到请求的??。

405 (?法禁?) 禁?请求中指定的?法。

406 (不接受) ?法使?请求的内容特性响应请求的??。

407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授 权使?代理。

408 (请求超时)服务器等候请求时发?超时。

409 (冲突) 服务器在完成请求时发?冲突。 服务器必须在响应中包含有关冲 突的信息。

410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。

411 (需要有效?度) 服务器不接受不含有效内容?度标头字段的请求。

412 (未满?前提条件) 服务器未满?请求者在请求中设置的其中?个前提条 件。

413 (请求实体过?) 服务器?法处理请求,因为请求实体过?,超出服务器的 处理能?。

414 (请求的 URI 过?) 请求的 URI(通常为?址)过?,服务器?法处理。这 ?较少?,通常的情况包括:本应使?POST?法的表单提交变成了GET?法, 导致查询字符串(Query String)过?。

415 (不?持的媒体类型) 请求的格式不受请求??的?持。

416 (请求范围不符合要求) 如果???法提供请求的范围,则服务器会返回此 状态代码。

417 (未满?期望值) 服务器未满?”期望”请求标头字段的要求。

5xx (服务器错误)这些状态代码

500 (服务器内部错误) 服务器遇到错误,?法完成请求。

501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器?法识别请求 ?法时可能会返回此代码。

502 (错误?关) 服务器作为?关或代理,从上游服务器收到?效响应。

503 (服务不可?) 服务器?前?法使?(由于超载或停机维护)。 通常,这 只是暂时状态。

504 (?关超时) 服务器作为?关或代理,但是没有及时从上游服务器收到请 求。

505 (HTTP 版本不受?持)服务器不?持请求中所?的 HTTP 协议版本。表示服务器在尝试处理请求时发?内部错误。

include 和 require 有什么区别?

1、加载失败的处理方式不同 include与require除了在处理引入文件的方式不同外,最大的区别就是:

include在引入不存在的文件时,产生一个警告且脚本还会继续执行,

require则会导致一个致命性错误且脚本停止执行。

require则会导致一个致命性错误且脚本停止执行。
<?php
include 'hello.php';
echo 'world';
?>
如果hello.php不存在,echo ‘world’这句是可以继续执行的。
<?php
require 'hello.php';
echo 'world';
?>
如果hello.php不存在,echo ‘hello’这句是不会执行的,到require时就停止了。

2、include()是有条件包含函数,而 require()则是无条件包含函数。

if(FALSE){
include 'file.php'; //file.php不会被引入
}
if(FALSE){
require 'file.php'; //file.php将会被引入
}

3、文件引用方式不同

include有返回值,而require没有

$retVal = include(’somefile.php’);
if(!empty($retVal)){
echo "文件包含成功";
}else{
echo "文件包含失败";
}

可以用include_once,require_once代替,表示文件只引入一次,引入之后则不在引入,作为优化点

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:11:34  更:2021-11-10 12:11:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 14:26:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码