PHP专业面试题汇总:涵盖基础、数据库、面向对象、ThinkPHP、smarty模板引擎及二次开发系统

PHP专业面试题汇总

PHP专业面试题汇总:涵盖基础、数据库、面向对象、ThinkPHP、smarty模板引擎及二次开发系统

1.PHP基础知识:

2.数据库部分

3. 面向对象a部分

4.ThinkPHP部分

5.smarty模板引擎

6.二次开发系统(DEDE、ecshop)

7.微信公众平台开发

4.ThinkPHP部分

1. 常用PHP框架

答案:thinkPHP;伊伊; Zend框架;蛋糕PHP;西;

2、如何理解TP中的单项文件?

答:ThinkPHP采用单入口模式进行项目部署和访问。一个项目无论完成什么功能,都有一个统一的(但不一定是唯一的)入口。应该说,所有的项目都是从一个入口文件开始的,而且所有项目的入口文件都是相似的。入口文件主要包括:

3. ThinkPHP中的MVC分层是什么? (理解)

答:MVC是一种分离应用程序的逻辑层和表示层的方法。 ThinkPHP也是基于MVC设计模式的。 MVC只是一个抽象的概念,没有特别明确的规定。 ThinkPHP中的MVC分层大致体现在:

模型(M):模型的定义由Model类完成。

控制器(C):应用程序控制器(核心控制器App类)和Action控制器都承担控制器的角色。动作控制器完成业务流程控制,应用控制器负责调度控制。

View(V):由View类和模板文件组成。模板100%分离,可独立预览和制作。

但事实上,ThinkPHP 并不依赖于 M 或 V,这意味着它可以在没有模型或视图的情况下工作。它甚至不依赖于C。这是因为ThinkPHP在Action之上还有一个主控制器,即App控制器,负责应用程序的整体调度。在没有C的情况下,视图V必须存在,否则就不再是一个完整的应用程序。

总而言之,ThinkPHP的MVC模式只是提供了一种敏捷开发的手段,而不是拘泥于MVC本身。

4.如何优化SQL?

回答:

(1)选择正确的存储引擎

以MySQL为例,它包括两个存储引擎:MyISAM和InnoDB。每个引擎都有优点和缺点。

MyISAM适合一些需要大量查询的应用,但是对于大量的写操作就不太好了。即使你只需要更新一个字段,整个表也会被锁定,其他进程,甚至读进程,在读操作完成之前都无法进行操作。此外,MyISAM 对于 SELECT COUNT(*) 等计算速度非常快。

InnoDB的趋势将是一个非常复杂的存储引擎,对于一些小型应用程序来说,它会比MyISAM慢。但它支持“行锁”,所以当写操作较多时会比较好。而且,它还支持更高级的应用,例如交易。

(2)优化字段的数据类型

请记住,作为一条规则,较小的列会更快。如果一个表只有几列(比如字典表、配置表),那么我们没有理由使用INT作为主键。使用 MEDIUMINT、SMALLINT 或更小的 TINYINT 会更经济。如果不需要记录时间,DATE比DATETIME要好得多。当然,还需要留有足够的扩展空间。

(3) 为搜索字段添加索引

索引不一定用于主键或唯一字段。如果表中有一个字段您将始终用于搜索,那么最好对其建立索引。除非您要搜索的字段是大型文本字段,否则您应该创建全文索引。

(4)避免使用Select *。从数据库读取的数据越多,查询就会变得越慢。而且,如果你的数据库服务器和WEB服务器是两个独立的服务器,这也会增加网络传输的负载。即使要查询数据表中的所有字段,也尽量不要使用*通配符。善用内置的字段排除定义可能会带来更多便利。

(5)使用ENUM代替VARCHAR

ENUM 类型非常快速且紧凑。事实上,它保存的是TINYINT,但它显示为字符串。这样一来,利用这个字段来做一些选择列表就变得相当完美了。例如,如果性别、种族、部门、身份等字段的值是有限且固定的,那么应该使用 ENUM 而不是 VARCHAR。

(6)尽可能使用NOT NULL

除非您有非常具体的原因要使用 NULL 值,否则您应该始终将字段保持为 NOT NULL。 NULL实际上需要额外的空间,并且当你进行比较时你的程序会更加复杂。当然,这并不意味着不能使用NULL。现实情况非常复杂,仍然会有需要使用NULL值的情况。

(7)定长表会更快

如果表中的所有字段都是“固定长度”,则整个表被视为“静态”或“固定长度”。例如,表中没有以下类型的字段:VARCHAR、TEXT、BLOB。只要包含其中一个字段,该表就不再是“定长静态表”,MySQL引擎将以另一种方式处理它。

固定长度的表将提高性能,因为 MySQL 的搜索速度更快。因为这些固定的长度可以很容易计算出下一个数据的偏移量,读取自然会更快。而如果该字段不是固定长度的,那么每次要查找下一个字段时,程序都需要查找主键。

此外,固定长度的表更容易缓存和重建。然而,唯一的副作用是固定长度字段浪费了一些空间,因为无论您是否使用它们,固定长度字段都需要很大的空间。

5.如何理解ThinkPHP 3.0架构三层(核心+行为+驱动)中的行为?

答案:核心+行为+驱动

TP的官方缩写是:CBD

Core:是框架的核心代码,不可或缺的东西。 TP本身是一个基于MVC思想开发的框架。

行为:行为在ThinkPHP新版本的架构中起着决定性的作用。在系统的核心上,有很多标签扩展位,每个标签位都可以轮流执行自己独立的行为。行为扩展就是这样诞生的,很多系统功能也是通过内置的行为扩展来完成的。所有的行为扩展都是可替换和可添加的,从而形成了底层框架组装的基础。

驱动:数据库驱动、缓存驱动、标签库驱动、模板引擎驱动、外部类扩展。

框架,即框架。其实它是某个应用的半成品,是一组组件供你选择和使用来完成你自己的系统。简单来说,就是利用别人搭建的舞台,你来表演。而且框架一般都是成熟的、不断升级的软件。

6、常规配置是怎样的?

答:约定配置 上一页 下一页 约定比配置更重要。这是该系统遵循的一个重要思想。系统内置约定配置文件(位于系统目录下的Conf\convention.php)。根据大多数用途,常用参数均进行默认配置。因此,对于应用项目的配置文件,往往只需要配置与常规配置不同的或者新的配置参数即可。如果完全采用默认配置,甚至不需要定义任何配置文件。

常规的配置文件会被系统自动加载,不需要在工程中加载。

7.什么是SQL注入? (理解)

答:SQL注入攻击是黑客攻击数据库的常用手段之一。有些程序员在编写代码时不会判断用户输入数据的合法性。注入者可以在表单中输入数据库查询代码并提交。程序会将提交的信息拼凑起来生成完整的SQL语句,服务器就会被欺骗。执行恶意SQL命令。注入器根据程序返回的结果成功获取一些敏感数据,甚至控制整个服务器。这就是SQL注入。

8、ThinkPHP如何防止SQL注入? (理解)

答:(1)查询条件尽量使用数组方法,这是比较安全的方法;

(2) 如果万不得已必须使用字符串查询条件,则使用预处理机制;

(3)开启数据字段类型验证,可以强制转换数值数据类型; (从3.1版本开始强制进行字段类型验证)

(4) 使用自动验证和自动完成机制来定制特定于应用程序的过滤;

(5)利用字段类型检查、自动验证和自动补全机制,避免恶意数据的录入。

9. 如何开启调试模式?调试模式有什么好处?

答:打开调试模式非常简单。只需要在入口文件中添加一行常量定义代码即可:

,bv    //开启调试模式    define('APP\_DEBUG', true);    //加载框架入口文件    require './ThinkPHP/ThinkPHP.php';

完成开发阶段并部署到生产环境后,只需删除调试模式定义代码即可切换到部署模式。打开调试模式后,系统会首先加载系统默认的调试配置文件,然后加载项目的调试配置文件。调试模式的优点是:

10. TP支持哪些配置方式?优先事项?

答:ThinkPHP在项目配置上独创了自己独特的分层配置模式。其配置级别体现在:常规配置->项目配置->调试配置->分组配置->扩展配置->动态配置

以上是配置文件的加载顺序。因为后续的配置会覆盖之前的同名配置(如果不生效),所以优先级是从右到左。

11. TP中的URL模式是什么?哪个是默认值?

答:ThinkPHP支持四种URL模式,可以通过设置URL_MODEL参数来定义,包括普通模式、PATHINFO、REWRITE和兼容模式。

默认模式为:PATHINFO模式,设置URL_MODEL为1

12. TP中有哪些系统变量?如何获取系统变量?

答:如何获取系统变量:

只需在Action中调用以下方法即可:

$this->方法名("变量名",["过滤方法"],["默认值"])

13. ThinkPHP框架中D函数和M函数有什么区别?

答:M方法不需要用户在实例化模型时为每个数据表定义一个模型类。 D方法可以自动检测模型类。如果存在自定义模型类,则将实例化自定义模型类。如果不存在,则会自动调用。 M方法实例化Model基类。同时,已经实例化的模型不会重复实例化(单例模式)。

5.smarty模板引擎

1. 编译和缓存有什么区别?

smarty的编译过程就是取出模板,将里面的标签替换成对应的PHP代码。这是smarty的汇编。其实就是PHP和HTML混合的过程。

Smarty的缓存需要手动开启。 Smarty的缓存是执行编译后的文件,同时生成静态html页面。当你再次访问的时候,就会访问到html文件,所以从效率上来说,肯定是高一些的

2、什么是聪明?聪明的优势是什么?

Smarty 是一个用 PHP 编写的 PHP 模板引擎。目的是将PHP程序与美工分离,这样当程序员改变程序的逻辑内容时,不会影响美工的页面设计,而当美工重新修改页面时,也不会影响页面设计。程序的程序逻辑在多人合作项目中尤为重要。 (也很容易开发多风格的程序)

聪明的优势

1. 快速:与其他模板引擎相比。

2、编译型:使用smarty编写的程序在运行时必须编译成非模板技术的PHP文件。

3 缓存技术:可以将用户最终看到的HTML文件缓存成静态HTML页面

4.插件技术:smarty可以定制插件。

smarty 不适合的地方

1.需要实时更新的内容。比如像库存展示,需要频繁的数据更新。 2.小​​项目。一个小项目,由于其简单性而需要美工和程序员。

3.使用{$smarty}保留模板中的变量

{$smarty.get.page} //类似于php脚本中访问$_GET[page]

{聪明.cookies。}

{聪明的帖子。}

{聪明.会话。}

{聪明.服务器。}

4.在模板中访问php中的变量

PHP 脚本中有两种类型的常量:系统常量和自定义常量。这两个常量也可以在Smarty模板中访问,不需要从PHP中分配。只要通过{$smarty}保留变量,就可以直接输出常量。价值。在模板中输出常量的示例:

{$smarty.const._MY_CONST_VAL}{$smarty.const.__FILE__}

5.变量中介

{$var|修饰符1|修饰符2|...........}

6、php查询mysql数据库时,查询中文结果出现乱码。怎么解决呢? ? ? ?

1.文件属性(另存为)

2.文件元(设置浏览器解析时)

3、连接数据库时的编码设置

4.利用PHP文件中的头函数确定编码

7.缓存机制

如果启用缓存,smarty会同时生成静态html页面。如果在设定的时间内没有过期,那么当你再次访问的时候,就会访问到html文件,这样就减少了读取数据库的需要,所以从效率上来说,要高一些。

8.Smarty赋值和加载模板

$Smarty->分配(名称,值)

$Smarty->display('index.html')

9.marty模板技术有什么用?

为了将PHP和HTML分开,美术人员和程序员应该各司其职,互不干扰。

10. smarty的主要配置有哪些?

1、引入smarty.class.php;

2.实例化smarty对象;

3.重新修改默认模板路径;

4.重新修改默认编译文件路径;

5、重新修改默认配置文件的路径;

6.重新修改默认缓存路径。

7.可以设置是否启用缓存。

8. 可以设置左右分隔符。

11、使用smarty时需要注意哪些细节?

Smarty是一个基于MVC概念的模板引擎。它将页面程序分为两部分来实现:视图层和控制层。换句话说,smarty 技术将用户 UI 与 PHP 代码分开。这样程序员和美工各司其职,互不干扰。

12、使用smarty时要注意以下问题:

1. 正确配置smarty。主要需要实例化smarty对象并配置smarty模板文件的路径;

2、在php页面中使用assign赋值和display来显示页面;

3. smarty 模板文件中不允许包含 PHP 代码片段。所有注释、变量和函数都必须包含在分隔符中。

一个。{}

B.foreach

C、如果是其他情况

D、包括

直译

6.二次开发系统(DEDE、ecshop):

1.二次开发的理解

二次开发,简单来说就是对现有的软件进行定制、修改,扩展功能,实现自己想要的功能。一般来说,原有系统的核心不会改变。

2.MVC

MVC的概念是什么?各个级别的主要任务是什么?

MVC(模型-视图-控制器)是一种软件设计模式或编程思想。

M指的是Model层,V是View层(显示层或用户界面),C是Controller层。使用mvc的目的是为了将M和V分开,以便一个程序可以方便地使用不同的用户界面。

在网站开发中,模型层一般负责增删改查数据库表信息。视图层负责显示页面内容。控制器层在M和V之间起到调节作用。控制器层决定调用哪个模型类的哪个方法。 ,执行完成后,controller层决定将结果分配给哪个view层。

3.安装后访问二次开发程序时出现一些警告和错误。

根据错误,修改服务器配置参数并百度

4. 功能、模板替换、功能添加和修改

其实就是用于面向对象的应用,模板替换和smarty的使用类似。

5、您使用过哪些二次开发工具?

dedecms、phpcms、ecshop,如果你基础好的话,学好这些基础的东西是没有问题的。

6、像PHP一样做一次开发好还是二次开发好?

一般中小企业使用CMS系统进行二次开发,都是为了效率。当然,如果你想一次性开发出来也是可以的,只要你懂得框架的使用方法,并且有足够的时间。大公司都是团队开发,以避免版权问题。

7、二次开发过程中,多个类之间的方法访问是如何转移的?

不是类继承而是对象组合,实例化的对象是通过global传入的

8、如果dedecms改变目录,后台某一项就无法进入。如何解决这个问题呢?

将后台核心设置更改为当前项目目录名

9、dedecms中自定义模型的理解是什么?

DreamWeaver系统中有内容模型的概念。不同的内容模型可以用来构建不同内容形式的网站。系统提供普通文章、相册、软件、产品、分类信息、专题等模型。通过系统自带的模型,我们可以用它来构建不同类型的网站。例如,可以使用图集构建图片站点,使用软件模型构建软件下载站点。

当然,以上系统自带的模型就称为系统模型。用户可以自己定义一些模型,比如书籍、音乐专辑等,只有自定义这些模型,才能构建出更多内容形式的网站。

这相当于我们自动添加一个表结构来适应当前需求的变化。

10、要理解dede中模板的概念、设计和使用,必须理解以下概念

1. 章节(封面)模板:

指网站首页或者比较重要的栏目封面频道使用的模板,一般以“index_identification ID.htm”命名。此外,单页或用户定义的自定义标签也可以选择支持部分模板标签。如果支持,系统在输出内容或生成特定文件之前,会使用section模板标签引擎进行解析。

2. 列表模板:

指网站某一栏目的所有文章列表的模板,一般以“list_identification ID.htm”命名。

3. 文件模板:

表示文档查看页面的模板,例如文章模板,通常以“article_identification ID.htm”命名。

4.其他模板:

一般系统一般包括模板:首页模板、搜索模板、RSS、JS编译功能模板等。此外,用户还可以自定义模板来创建任意文件。

11.dede中使用了哪些类型的标签?

例如列表内容标签只能在其范围内使用,列表标签只能在列表中使用,内容标签只能在内容标签中使用。

全局标签可以在所有页面上使用

12.熟悉常用类库

(例如:dedesql.class.php);熟悉系统函数库(common.func.php);熟悉自定义函数库(extend.func.php);熟悉前端入口文件(common.inc.php)

7.微信公众平台开发

1.微信运营机制

公众号与php通信用什么语言:Xml

如何在Weixin.php中接收公众账号数据:

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//接收数据  XML数据

2. 消息类型

微信目前提供7种基本消息类型,分别是:

(1) 短信(text);

(二)图片信息(图像);

(3) 语音

(4) 视频

(5) 地点;

(6)链接消息(link);

(7)事件推送(event)

类型。掌握发送不同消息类型时的数据传输格式

3、将整个文件读入字符串的函数是

文件获取内容

4. 常用功能

将xml数据解析成对象的函数是

simplexml_load_string( )

将字符串转换为数组的函数是____explode_________,将数组转换为字符串的函数是____implode________。

对 URL 字符串进行编码的字符串是 ____urlencode________。

5.Sprintf函数的作用

您可以在手册中检查这一点。

6、为什么微信公众号无法提供服务?

1.网络原因、数据接口原因

2. 代码错误,如何猜测原因?

检查一下哪里修改了,代码是否正确

您可以导出数据并查看。使用 php 操作文件

$myfile = fopen("newfile.txt", "w");$txt ="aaaaaaaaaa";fwrite($myfile, $txt);fclose($myfile);

7.自定义菜单事件推送

点击

点击跳转链接

扫码推送活动

扫码推送、弹出

系统拍照、发图的弹窗事件

弹出微信相册发送器的事件

弹出位置选择器的事件

八、代币的作用

安全机制验证,用于微信服务器与PHP服务器之间的安全验证

9.Appid和secret的作用

请求API接口时(如菜单操作),需要传递appid和secret值来获取应用授权码。

以上是程序员在面试过程中会遇到的问题。如果你经常参加面试,你会发现上面的面试问题都很熟悉。俗话说“知己知彼,百战不败”。只有丰富自己的技能,才能顺利前进。经过三四次几家公司的面试,终于拿到了百度的offer。现在我将与您分享更多面试问题。 PDF目录如下:

说实话,我不是那种别人一看就很喜欢的工程师。因为我一直在小公司做小型架构,所以适合我的职位范围比较窄。

但没关系。我觉得走出自己的舒适区,去看看其他的风景,对我来说是件好事。

我是这条街上最帅的男孩! ! !

你可能想看:
« 上一篇
下一篇 »

相关推荐

php实时推送,php实地培训

2026年10月05日

53阅读

php乱码出现问号的原因,php乱码出现问号的原因有哪些

2026年10月05日

44阅读

php一句话木马,一句话木马ctf

2026年10月05日

48阅读

php获取数组长度,php中如何获取数组的长度

2026年10月05日

50阅读

php面试题库及答案,php程序员面试真题库

2026年10月05日

47阅读

phpcontent-type修改,php源码二次修改需要多少钱

2026年10月05日

42阅读