首页 > 编程语言 >PHP基础面试题大全(附带详细答案)

PHP基础面试题大全(附带详细答案)

时间:2024-03-24 23:03:58浏览次数:33  
标签:__ 面试题 调用 对象 fun catch PHP 方法 大全

1,require()和include区别?

include:如果文件不存在,导致致命错误,脚本停止;每次都要进行读取评估。

require:如果文件不存在,导致一个警告,脚本继续;只处理多次。

2,isset()和empty()区别?

isset:变量等于null或者没有初始化,返回false,否则返回true。

empty:变量未设置,或者等于0,null,空字符串返回true,否则返回false。

3,php中传值与传引用区别?

传值是将变量的值复制一份,函数内修改不影响外部。整数,浮点数,字符串,数组传递方式是传值。

传引用是将变量的引用传递过去,内存的数据只有一份,函数内修改影响外部。对象,资源是传引用。

4,魔术方法有哪些?

__construct():构造方法,在创建对象时自动调用。

__destruct():析构方法,在对象被销毁时自动调用,用于释放资源或执行清理操作。

__get($k) 和 __set($k,$v):用于获取和设置对象的属性自动调用。

__isset($k) 和 __unset($k):当对一个不可访问的属性进行isset()或unset()操作时自动调用。

__call($fun,$p) 和 __callStatic($fun,$p):调用了不存在的方法时调用,分别在实例方法和静态方法中自动调用。

__toString():将对象转换为字符串时自动调用,可以定义对象的字符串表示形式。

__clone():克隆方法,在对象被克隆时自动调用,用于执行对象的深拷贝操作。

__sleep() 和 __wakeup():用于序列化和反序列化对象时自动调用,分别在对象被序列化和反序列化时执行一些特定的操作。
__invoke   当尝试以调用函数的方式调用一个对象时,方法会被自动调用。

__set_state($p),调用var_export()导出类时,此静态方法会被调用

__serialize(),对象序列化的时候被调用(PHP7.4版本加入)

__unserialize($p),对象反序列化的时候被调用(PHP7.4版本加入)

5,array_merge和array+array的区别?

array_merge:数组key是相同且是数字,都会返回,索引会变;key相同是字符串,保留后面那个的key,value,前面的舍弃。

array+array:数组key是相同(不管什么类型)保留前一个的key,value,后面的舍弃。

6,接口,抽象类,具体类区别?

接口:关键字用interface;全部都是抽象方法,不能有具体方法;继承用implement,可以是多继承;接口不能实例化;

抽象类:用abstract修饰的类;可以有具体方法,也可以有抽象方法,可以没有抽象方法,也可以没有具体方法;继承用extends,只能单继承;抽象类不能实例化。

具体类:不能有抽象方法;可以被其他类继承,用extends;可以实例化。

7,$this和self、parent这三个关键词分别代表什么?在哪些场合下使用?

$this       当前对象,在当前类中使用,使用->调用属性和方法
self         当前类,需要使用::调用,调用静态变量或者静态方法
parent    当前对象的父类,调用父类的方法

8,单引号和双引号的区别?

双引号会解析变量、换行,而单引号不会,所以单引号的执行效率高。

9,magic_quotes_gpc()、magic_quotes_runtime()的意思是什么?

magic_quotes_gpc()是php配置文件中的,如果设置为on则会自动POST,GET,COOKIE中的字符串进行转义,在'之前加\

magic_quotes_runtime()是php中的函数,如果参数为true则会数据库中取出来的单引号、双引号、反斜线自动加上反斜杠进行转义。

10,简述 private、 protected、 public修饰符的访问权限。

private : 私有成员, 只能在类的内部才可以访问。

protected : 保护成员,该类内部和继承类中可以访问。

public : 公共成员,完全公开,没有访问限制。

11、类中如何定义常量、如何类中调用常量、如何在类外调用常量。

类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。

定义常量使用关键字const.

例如:const PI = 3.1415326;

无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,

访问常量的格式都是类名加作用域操作符号(双冒号)来调用。

即:类名 :: 类常量名;

12,在php中,函数和方法有什么区别和联系?

函数是单独存在的,是面向过程的部分;方法是依赖于类的,是面向对象的部分。

函数没有权限的概念,在程序的任何地方都可以调用;成员方法调用前需要实例化类,静态方法需要明确哪个类,有权限的概念,比如private只能在类内调用。

13,在PHP中,如何进行错误处理?

对于可能出现异常的代码块,可以使用try-catch进行捕获,也可以通过set_error_handle函数捕获全局的异常并进行处理,为了安全,也会通过配置或者设置(例如display_errors,error_reporting等)屏蔽一些异常。

14,请谈谈异常处理(try-catch)机制。

可以使用trycatchfinally块来捕获和处理在代码执行过程中抛出的异常,使程序更健壮。

try块:在try块中,你编写可能抛出异常的代码。如果try块中的代码抛出了异常,那么程序的控制流将立即跳出try块,并查找匹配的catch块。

catch块:catch块用于捕获并处理特定的异常。你可以定义多个catch块来捕获不同类型的异常。当异常被抛出时,PHP将查找与异常类型匹配的catch块,并执行相应的代码。catch块可以有多个。

finally块(可选):finally块包含无论是否发生异常都需要执行的代码。无论是否抛出异常或是否找到匹配的catch块,finally块中的代码都会被执行。这通常用于清理资源或执行必要的后续操作。

15,PHP中的继承、封装和多态是如何实现的?

继承,封装,多态是面对对象编程的三大核心特征。

继承允许子类继承父类的属性和方法(php只支持单继承),通过继承重用父类的代码,并且何以添加和覆盖父类的方法。

封装是将属性和方法隐藏在内部,隐藏内部的状态和实现细节,从而提供数据的安全性和完整性。

多态是允许使用统一的接口来处理不同的类型。多态主要是通过重写实现的。

16,解释一下PHP中的构造函数和析构函数。

构造函数是在创建类的实例的时候自动调用。他的作用是初始化对象的属性或者其他的设置操作。构造函数与类名称完全相同或者是__construct()。

析构函数是在对象销毁时,自动调用的,用于执行清理操作。是__destruct()形式。

17、什么是 CSRF 攻击?XSS 攻击?如何防范?

CSRF:跨站请求伪造,用户通过跨站请求,以合法身份做非法得事情。防范的方法包括token验证,Refer验证,验证码,输入密码等方式。
XSS:它会通过合法的操作(比如在 url 中输入、在评论框中输入),向你的页面注入脚本(可能是 JS、html 代码块)。防范的方法有数据检查,数据内容过滤,数据内容转义。

18,Trait是什么?

Trait 为了减少单继承语言的限制而准备的一种代码复用机制。

如果存在同名方法,本类同名方法会覆盖Trait中方法,Trait中方法会覆盖父类的同名方法。

引用的多个Trait都有同名方法,可以通过起别名解决,例如

class TClass {
    use ATrait, BTrait { //类中引用了两个Trait,他们都有fun方法
        ATrait::fun as afun;  // Atrait中的fun方法起名叫afun,afun调用的就是ATrait的fun方法
        BTrait::fun as bfun;  // Btrait中的fun方法起名叫bfun,bfun调用的就是BTrait的fun方法
    }
}

19,php-fpm的进程管理方式?

php-fpm的进程管理方式主要有三种,分别是ondemand、static、dynamic。

ondemand:有请求过来了,就拉起worker进程,如果worker在单位时间内没有请求可执行,就结束掉,这种由于请求来了才拉起worker进程,请求效率会比较低,系统资源不存在浪费的情况。

static:无论是否有请求,worker进程数总是固定的,在请求很少的情况下,worker进程也全部都在,一直占用系统资源。

dynamic:如果请求少,worker进程数会相应的减少,但是要比请求数多些,如果请求多,worker进程数会增加,但是不会超过设置的最大进程数,兼顾了系统资源利用和请求效率,比较常用的配置。

------------------------------------------推荐阅读----------------------------------------------------------------

http,tcp,nginx相关的面试题

PHP高级面试题大全(附带详细答案)

标签:__,面试题,调用,对象,fun,catch,PHP,方法,大全
From: https://blog.csdn.net/geegtb/article/details/136716567

相关文章

  • PHP高级面试题大全(附带详细答案)
    1,zval详解(php5时期的)/*这个是zval的实际结构,zval就是php中定义变量的容器,你申请一个变量就是创建一个zval对于数组,数组本身是一个zval,数组中的每个值也是一个zval*value;是值或者是地址,内容是值还是地址,要看type的值是什么*refcount__gc;计数,用于垃圾回收,......
  • PHP代码审计
    杂phps,可能可查看该php文件源码index.php.bak:index.php文件备份名php7.1+:类型不敏感,反序列化public属性可以直接赋给private_GET$_GET看成一个键值对数组(关联数组)$_GET==array(‘id’=>1,‘name’=>‘xiao’)函数引用&可以修改_GET....的值,不能修改_Request的值在url传......
  • macbook使用php的fastadmin框架验证码不显示解决办法
    macbook使用php的fastadmin框架验证码不显示解决办法给php安装freetype插件freetype下载链接解压插件进入命令行工具,然后进到刚才解压的文件目录中然后执行该命令./configure--enable-static--enable-shared(没有指定prefix,.h文件默认安装到/usr/local/includ......
  • macbook(M1芯片)搭建php+nginx运行环境
    macbook(M1芯片)搭建php+nginx运行环境php安装phpbrewinstallphp//低版本php需要这样安装brewinstallshivammathur/php/[email protected]配置环境变量(低版本的php才需要)echo'exportPATH="/usr/local/opt/[email protected]/bin:$PATH"'>>~/.zshrcecho'exportPATH=&quo......
  • PhpStrom启动报错, java.net.BindException: Address already in use: bind
    问题描述:今天启动phpstromIDE时,突然报错,报错信息如下图:问题分析1.不正确关闭应用(强制关闭):可能是之前启动了一个本地web服务占了端口,在没有停掉服务,直接关闭IDE导致的(尝试了重启电脑也没解决)2.其他应用占用端口:安装了Hyper-V导致端口被占用?显然我的是第一种情况问题解决......
  • 金三银四面试题(二):数据库缓存的数据一致性
    这也是一道非常经典的面试题。可以查到它在很多面经中都出现过。还有一个比较的具体问法其实是:如何保证MySQL和Redis的数据一致性?什么是数据一致性例如将Redis用作MySQL数据的缓存时,由于数据在MySQL中的变更,导致Redis中的缓存数据与实际数据不一致的情况。这种不一致可能......
  • Java面试题:用Java并发工具类,实现一个线程安全的单例模式;使用Java并发工具包和并发框架
    面试题一:设计一个Java并发工具类,实现一个线程安全的单例模式,并说明其工作原理。题目描述:请设计一个Java并发工具类,实现一个线程安全的单例模式。要求使用Java内存模型、原子操作、以及Java并发工具包中的相关工具。考察重点:对Java内存模型的理解。对Java并发工具包的了......
  • mysql中的数据类型大全纯干货------------时间日期类型
    简介(类型预览):在mysql8.0版本中支持的类型主要有:YEAR类型表示年DATE类型表示年,月,日TIME类型表示时,分,秒DATETIME类型表示年,月,日,时,分,秒TIMESTAMP类型通常表示带时区的年,月,日,时,分,秒数据类型单位占用字节格式下限上限YEAR年1YYY或YY19012155TIME时间3H......
  • 在线客服系统php网站源码 支持消息预知
    新增消息预知,消息撤回,消息已读未读,修复需要刷新才能收到消息修复客户来源地址修复消息提示音修复桌面推送提醒下载地址:消息预知在线客服系统php网站源码-麦田吧要求服务器环境:宝塔面板,Nginx1.16-1.18,7.2.23<php<7.3,Mysql5.6-Mysql5.7站点设置点击伪静态选择thin......
  • 2024年C语言最新经典面试题汇总(1-10)
    C语言文章更新目录C语言学习资源汇总,史上最全面总结,没有之一C/C++学习资源(百度云盘链接)计算机二级资料(过级专用)C语言学习路线(从入门到实战)编写C语言程序的7个步骤和编程机制C语言基础-第一个C程序C语言基础-简单程序分析VS2019编写简单的C程序示例简单示例,VS2019调......