PHP面试题,面试必看!


  

请你介绍下PHP?

答:PHP 是服务器端开源脚本语言,外文名:PHP: Hypertext Preprocessor。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。

PHP和JAVA各有什么优势?

答:java是纯面向对象开发,功能强大,分支众多,没有java不能做的软件。C/S也好B/S也好。从功能上讲,没有语言可以和java相比。PHP属于后起之秀,吸收了java和c以及perl等语言优点,专注互联网领域。WEB领域PHP拥有得天独厚的优势,WEB领域没有语言可以和他比。
两者相比,基本上java完胜。但是其实并没有太大的可比性,专注领域不同。单纯拿两者都可以做的WEB来说,PHP完胜。

你常用哪些PHP框架,开发后台接口?

答:ThinkPHP5.X版本

ThinkPHP3.X版本到ThinkPHP5.X版本的发展能介绍下呢?

答:
==1、URL的变动==
    首先对3.X的不严谨给开发者们带来的不正确的引导表示歉意,在5.0版本正式废除类似/id/1方式 可以通过‘get’获取到‘id’的方法,严格来讲这样的url是不属于$_GET的,现在可以通过‘param’获取,具体使用可以通过请求部分查询。
==2、模型的变动==
    新版的模型查询返回默认‘对象’,系统默认增加了’toArray’方法,许多开发者在’all’或’select’尝试使用’toArray’来 转换为数组,在此希望开发者能理解‘对象’的概念,尝试使用‘对象’进行数据的使用,或者使用’db’方法进行数据库的操作,也提醒一下部分‘滥 用’’toArray’的开发者,’all’或’select’结果是对象的数组集合,是无法使用’toArray’进行转换的。
==新版变化==
命名规范
  目录和文件名采用‘小写+下划线’,并且以小写字母开头;
  类库、函数文件统一以.php为后缀;
  类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致(包括大小写);
  类名和类文件名保持一致,并统一采用驼峰法命名(首字母大写)
函数
  系统已经不依赖任何函数,只是对常用的操作封装提供了助手函数;
  单字母函数废弃,默认系统加载助手函数,具体参考上一个章节‘助手函数’;
路由
  5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规则(正则定义)的方式,具体这里不再赘述。
控制器
控制器的命名空间有所调整,并且可以无需继承任何的控制器类。
  应用类库的命名空间统一为app(可修改)而不是模块名;
  控制器的类名默认不带Controller后缀,可以配置开启controller_suffix参数启用控制器类后缀;
  控制器操作方法采用return方式返回数据,而非直接输出;
  废除原来的操作前后置方法;

你还知道哪些PHP开发框架呢?

答:YII、Lavarel

你熟知的PHP开发框架,都有哪些优缺点呢?

答:
1、==thinkPHP简单介绍==:ThinkPHP(FCS)是一个轻量级的中型框架,是从Java的Struts结构移植过来的中文PHP开发框架。它使用面向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库,各方面都比较人性化,熟悉J2EE的开发人员相对比较容易上手,适合php框架初学者。 ThinkPHP的宗旨是简化开发、提高效率、易于扩展,其在对数据库的支持方面已经包括MySQL、MSSQL、Sqlite、PgSQL、 Oracle,以及PDO的支持。ThinkPHP有着丰富的文档和示例,框架的兼容性较强,但是其功能有限,因此更适合用于中小项目的开发。
   ==thinkPHP优点==:
      1.易于上手,有丰富的中文文档;
      2.框架的兼容性较强,PHP4和PHP5完全兼容、完全支持UTF8等。
      3. 适合用于中小项目的开发
   ==thinkPHP缺点==:
      1.对Ajax的支持不是很好;
      2.目录结构混乱,需要花时间整理;
      3.上手容易,但是深入学习较难。
2、==Yii简单介绍==:Yii 是一个基于组件的高性能php框架,用于开发大型Web应用。Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从 MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主题化,I18N和L10N,Yii提供了 今日Web 2.0应用开发所需要的几乎一切功能。事实上,Yii是最有效率的PHP框架之一。
   ==Yii优点==:
      1.纯OOP
      2.用于大规模Web应用
      3.模型使用方便
      4.开发速度快,运行速度也快。性能优异且功能丰富
      5.使用命令行工具。
   ==Yii缺点==:
      1.对Model层的指导和考虑较少
      2.文档实例较少
      3.英文太多
      4.要求PHP技术精通,OOP编程要熟练!
      5.View并不是理想view,理想中的view可能只是html代码,不会涉及PHP代码。
3、==Lavarel简单介绍==:Laravel是一套简洁,优雅的PHP WEB开发框架。集合了PHP比较新的特性,以及各种的设计模式,是一个适合学习的框架,但要求PHP基础扎实熟练。适合大中型项目的开发。
   ==Lavarel优点==:
      1.支持Composer
      2.框架结构比较清晰,注重代码的模块化(抽象了中间件,任务,服务等)和可扩展性,路由系统快速高效
      3.支持处理跨站请求伪造,在进行form表单post提交时,必须传入{{ csrf_field() }}
      4.Laravel 的社区很强大,具有丰富的扩展包及工具
      5.具有缓存、身份验证、任务自动化、hash加密、事务等功能
      6.独特的 .env环境文件,方便了系统的配置和不同平台的开发
   ==Lavarel缺点==:
      1.基于组件式的框架,所以比较臃肿
==CodeIgniter简单介绍==:CodeIgniter 是一套小巧但功能强大的、给 PHP 网站开发者使用的 Web 应用程序开发框架和工具包。能为开发者带来快速的快捷的工作。
   ==CodeIgniter优点==:
      1.Code Igniter推崇“简单就是美”这一原则。没有花哨的设计模式、没有华丽的对象结构,一切都是那么简单。几行代码就能开始运行,再加几 行代码就可以进行输出。可谓是“大道至简”的典范。
      2.配置简单,全部的配置使用PHP脚本来配置,执行效率高;
      3.具有基本的路由功能,能够进行一定程度的路由;
      4.具有初步的Layout功能,能够制作一定程度的界面外观;
      5.数据库层封装的不错,具有基本的MVC功能.
      6.快速简洁,代码不多,执行性能高,
      7.框架简单,容易上手,学习成本低,文档详细;
      8.自带了很多简单好用的library,框架适合小型应用.
   ==CodeIgniter缺点==:
      1.本身的实现不太理想。
      2.内部结构过于混乱,虽然简单易用,但缺乏扩展能力。
      3.把Model层简单的理解为数据库操作.
      4.框架略显简单,只能够满足小型应用,略微不太能够满足中型应用需要.

你常用那些数据库系统存储网站或软件的数据呢?

答:MySQL、Redis。

MySQL语句小测试单元:

假设有一张”user”表,表存放于”db_data”数据库中,主机地址为localhost,用户名为root,密码为123456,表结构如下:
| 字段名称 | 字段属性 | 解释 |
|:——–:|:——:|:——:|
| id | int(11) | 索引 |
| name | varchar(255) | 名字 |
| age | int(11) | 年龄 |
| sex | varchar(10) | 性别 |
表默认数据如下:

id name age sex
1 张三 18
2 李芳 22
3 王五 35

请在下面写出创建此表结构Mysql代码:

create table `user`(
    `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '索引',
    `name` VARCHAR(50) DEFAULT NULL COMMENT '名字',
    `age` INT(11) DEFAULT NULL COMMENT '年龄',
    `sex` VARCHAR(50) DEFAULT NULL COMMENT '性别',
    PRIMARY key(`id`)
)

现在需要录入一个新数据到表中,name是老王,age是22,性别是男,请在下面写出MySQL代码:

INSERT INTO `user` (
    `id`,
    `name`,
    `age`,
    `sex`
) VALUES(
    4,
    '老王',
    22,
    '男'
)

删除user表中,name是李芳的数据,请在下面写出MySQL代码:

DELETE FROM `user` WHERE `name`='李芳'

修改id是3的数据,将条件达成的数据列中的age字段列的字段值修改为70,请在下面写出MySQL代码:

UPDATE `user` SET `age`=70 WHERE `id`=3

查找name是张三的表数据,请在下面写出MySQL代码:

SELECT * FROM `user` WHERE `name`='张三'

请使用PHP连接MySQL,选择出”user”表里age > 22的所有记录打印结果,并统计出查询出的结果总数

$con = mysql_connect('localhost','root','123456') or die('数据库连接失败');//连接
mysql_select_db('db_data',$con) or die('选择数据库失败');//选择数据库
$sql = 'SELECT * FROM `user` WHERE `age` > 20';
$res = mysql_query($sql);//执行sql语句
$count = mysql_num_rows($res);//获取结果总数
while($row = mysql_fetch_assoc($res)){
    echo $row['id'].'-'.$row['name'].'-'.$row['age'].'-'.$row['sex'];
}

你知道什么是NoSQL?

答:NoSQL = Not Only SQL ,反SQL运动,不仅仅只有SQL才能存储数据,NoSQL运用非关系型的数据存储的。他不是谁开发的,而是一种存储模式,一个革命。在分布式和以及大型文件存储方面具有传统关系型数据库无法比拟的优势。

什么是Cookie,什么是Session?

答:Session是存储在服务器端的,Cookie是存储在客户端的

简单介绍下PHP中的include和require?

答:require与include最主要的区别,a、require出错时,脚本将停止运行,而include出错的情况下,脚本将继续执行。b、无论require的位置如何,制定文件都将包含到出现require的脚本中。例如,即使require放在计算结果为假的if语句中,依然会包含指定文件。

介绍下GET和POST?

答:
1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
建议:
1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;

如何获取指定网址里的HTML内容,请写出PHP的操作代码?

$str=file_get_contents('https://www.baidu.com/');
echo $str;

请介绍下public、private、protected?

答:
==public: 公有类型:== 在子类中可以通过self::var调用public方法或属性,parent::method调用父类方法,在实例中可以能过$obj->var 来调用 public类型的方法或属性。

==protected: 受保护类型:== 在子类中可以通过self::var调用protected方法或属性,parent::method调用父类方法在实例中不能通过$obj->var 来调用 protected类型的方法或属性
==private: 私有类型:== 该类型的属性或方法只能在该类中使用,在该类的实例、子类中、子类的实例中都不能调用私有类型的属性和方法

写出获取当前时间戳的函数,及打印前一天的时间的方法(格式:年-月-日 时:分:秒)?

echo time();//获取当前时间戳函数
echo Date("Y-m-d H:i:s",strtotime("-1 day"));//打印前一天时间

写出php进行编码转换的函数

iconv(‘utf-8’,’gb2312’,$str);

简单介绍serialize() /unserialize()函数的作用

答:serialize()和unserialize()在php手册上的解释是:
serialize — 产生一个可存储的值的表示,返回值为字符串,此字符串包含了表示 value 的字节流,不丢失其类型和结构,可以存储于任何地方。
unserialize — 从已存储的表示中创建 PHP 的值

发表评论