php面试题及答案

这篇具有很好参考价值的文章主要介绍了php面试题及答案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1

请输出下面代码执行结果

<?php 
echo count(strlen("http://php.net")); 
?>
答案:1

复制

讲解:count(var)是用来统计数组或对象的元素个数的。当var是null或者空数组时,结果为0。如果var是普通变量,则返回1。正常情况下返回var中的元素或属性个数。

2

请说明php.ini中的safe_mode开启之后影响了哪些函数

答案:Safe_mode是php的安全模式。开启之后,主要会对系统操作、文件、权限设置等方法产生 影响,主要用来应对webshell。以下是受到影响的一些函数:

ckdir,move_uploaded_file,chgrp,parse_ini_file,
chown,rmdir,copy,rename,fopen,require,highlight_file,
show_source,include,symlink,link,touch,mkdir,unlink,
exec,shell_exec,pasathru,system,popen

复制

需要注意的是:在php5.3以上版本,safe_mode被弃用,在php5.4以上版本,则将此特性完全去除了。

3

php5中魔术方法有哪几个?请举例说明各自的用法

  • __construct() :构造方法,当一个对象创建时调用此方法,使用此方法的好处是:可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么.这样你在改变类的名称时,就不需要改变构造方法的名称
  • __destruct() :析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法。默认情况下,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源。
  1. 析构函数允许你在使用一个对象之后执行任意代码来清除内存。
  2. 当PHP决定你的脚本不再与对象相关时,析构函数将被调用。
  3. 在一个函数的命名空间内,这会发生在函数return的时候。
  4. 对于全局变量,这发生于脚本结束的时候。
  5. 如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值。
  6. 通常将变量赋值勤为NULL或者调用unset
  • __call() :调用对象不存在得方法时执行此函数。包括没有权限访问的方法
  • __get() :当调用一个未定义的属性时访问此方法
  • __set( property,value ) :给一个未定义的属性赋值时调用
  • __isset() : 当在一个未定义的属性上调用isset()函数时调用此方法
  • __unset() :当在一个未定义的属性上调用unset()函数时调用此方法
  • __toString() :toString方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时   如果类没有实现此方法,则无法通过echo打印对象,否则会显示:Catchable fatal error: Object of class test could not be converted to string in   此方法必须返回一个字符串
  • __clone() :克隆对象时执行此函数。PHP5中的对象赋值是使用的引用赋值,如果想复制一个对象则需要使用clone方法,在调用此方法是对象会自动调用__clone魔术方法。如果在对象复制需要执行某些初始化操作,可以在__clone方法实现
  • __autoload() :它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。 注意: 在 __autoload 函数中抛出的异常不能被 catch 语句块捕获并导致致命错误。
  • __sleep() :serialize之前被调用,可以指定要序列化的对象属性。
  • __wakeup :unserialize之前被调用,可以执行对象的初始化工作。
  • __set_state() :调用var_export时,被调用。用__set_state的返回值做为var_export的返回值(自PHP 5.1.0起有效)。
  • __invoke() :将对象当作函数来使用时执行此方法,通常不推荐这样做。
  • __callStatic它的工作方式类似于 __call() 魔术方法,__callStatic() 是为了处理静态方法调用
  1. PHP5.3.0以上版本有效。
  2. 它必须是公共的,并且必须被声明为静态的。
  3. 同样,__call() 魔术方法必须被定义为公共的,所有其他魔术方法都必须如此。

4

说几个常用的超全局变量

  • $_GET ----->get传送方式
  • $_POST ----->post传送方式
  • $_REQUEST ----->可以接收到get和post两种方式的值
  • $GLOBALS ----->所有的变量都放在里面
  • $_FILES ----->上传文件使用
  • $_SERVER ----->系统环境变量
  • $_SESSION ----->会话控制的时候会用到
  • $_COOKIE ----->会话控制的时候会用到

5

说几个你知道的设计模式

  • 单例模式: 保证一个类仅有一个实例,并提供一个访问他的全局访问点例如框架中的数据库连接
  • 策略模式: 针对一组算法,将每一个算法封装到具有共同接口的独立的类中,例如进入个人主页时,根据浏览者的不同,给予不同的显示与操作。
  • 注册模式: 提供了在程序中有条理的存放并管理一组全局对象 (object),例如ZF框架中的Zend_Registry::set。
  • 适配器模式: 将不同接口适配成统一的API接口,例如数据操作有mysql、mysqli、pdo等,可利用适配器模式统一接口
    • 观察者模式: 一个对象通过添加一个方法使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。例如实现实现消息推送
  • 装饰器模式: 不修改原类代码和继承的情况下动态扩展类的功能,例如框架的每个Controller文件会提供before和after方法
  • 迭代器模式: 提供一个方法顺序访问一个聚合对象中各个元素,在PHP中将继承 Iterator 类

6

请写一个函数验证电子邮件的格式是否正确

<?php
    $str = "jianfeng@126.com";
    regex="([a−z0−9\.−]+)@([\da−z\.−]+)\.([a−z\.]2,6)" ; //正则
    return preg_match(regex,str);
?>

复制

7

isset、empty、is_null的区别

  • isset 判断变量是否定义或者是否为空
    1. 变量存在返回ture,否则返回false
    2. 变量定义不赋值返回false unset一个变量,返回false
    3. 变量赋值为null,返回false
  • empty:判断变量的值是否为空,能转换为false的都是空,为空返回true,反之返回false。
    1. "",0,"0",NULL,FALSE都认为为空,返回true
    2. 没有任何属性的对象都认为是空,返回true
  • is_null:检测传入的值(值、变量、表达式)是否为null
    1. 定义了,但是赋值为Null,返回true
    2. 定义了,但是没有赋值,返回reue
    3. 被unset一个变量,返回true

8

对于关系型数据库而言,索引是相当重要的概念,请回答有关索引的几个问题:

  • 索引的目的是什么?
    1. 快速访问数据表中的特定信息,提高检索速度
    2. 创建唯一性索引,保证数据库表中每一行数据的唯一性。
    3. 加速表和表之间的连接
    4. 使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间
  • 索引对数据库系统的负面影响是什么? 负面影响: 创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改、的时候索引也要动态维护,这样就降低了数据的维护速度。
  • 为数据表建立索引的原则有哪些?
    1. 在最频繁使用的、用以缩小查询范围的字段上建立索引。
    2. 在频繁使用的、需要排序的字段上建立索引
  • 什么情况下不宜建立索引?
    1. 对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引。
    2. 对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。

9

PHP网站的主要攻击方式有哪些? 1. 命令注入(Command Injection) 2. eval 注入(Eval Injection) 3. 客户端脚本攻击(Script Insertion) 4. 跨网站脚本攻击(Cross Site Scripting, XSS) 5. SQL 注入攻击(SQL injection) 6. 跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF) 7. Session 会话劫持(Session Hijacking) 8. Session 固定攻击(Session Fixation) 9. HTTP 响应拆分攻击(HTTP Response Splitting) 10. 文件上传漏洞(File Upload Attack) 11. 目录穿越漏洞(Directory Traversal) 12. 远程文件包含攻击(Remote Inclusion) 13. 动态函数注入攻击(Dynamic Variable Evaluation) 14. URL 攻击(URL attack) 15. 表单提交欺骗攻击(Spoofed Form Submissions) 16. HTTP 请求欺骗攻击(Spoofed HTTP Requests)

10

以下语句返回的结果中name列也许会出现 null 的情况,那么在name字段上使用什么函数可以将出现的 null 改为一个默认值。

SELECT a.id,b.name FROM tab1 AS a LEFT JOIN tab2 AS b ON(a.id = p.id) WHERE a.id > 10;

复制

答案:

SELECT a.id,IFNULL(b.name,'未定义') FROM tab1 AS a LEFT JOIN tab2 AS b ON(a.id = p.id) WHERE a.id > 10;

复制

来看官方手册的解释:IFNULL(expr1,expr2) 。如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。

不过经我测试,是有问题的,当 expr1=0而不是null时。他也返回了expr2;官方手册应改为当expr1为null或者0时,返回expr2。文章来源地址https://www.toymoban.com/news/detail-510759.html

到了这里,关于php面试题及答案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 运维常用面试题及答案

    介绍一下你的运维经验和技能。 答案:在回答这个问题时,可以简要概述你的运维经验和技能,包括你的工作经历、参与的项目、使用的工具和技术等。重点突出你在系统监控、故障排除、自动化部署、容量规划和安全性等方面的经验和技能。 你在日常工作中使用过哪些自

    2024年02月15日
    浏览(29)
  • 28道Zookeeper面试题及答案

    JAVA面试宝典,搞定JAVA面试,不再是难题,系列文章传送地址,请点击本链接。 目录 1、说说 Zookeeper 是什么? 2、ZooKeeper 有哪些应用场景? 3、说说Zookeeper的工作原理? 4、请描述一下 Zookeeper 的通知机制是什么? 5、Zookeeper 对节点的 watch 监听通知是永久的吗? 6、 Zookeeper 集

    2024年01月21日
    浏览(44)
  • java面试题及答案(基础篇)

    如今IT仍是热门行业,面试程序员的人也非常多,那么,怎样才能顺利通过面试呢?2021最新java面试题及答案(基础篇),为你的面试助攻! 1、Java中的内存溢出是如何造成的? OutOfMemoryError: (1)PerGern Space 程序中使用了大量jar或class,使Java虚拟机装载类空间不够。 解决方

    2024年02月12日
    浏览(29)
  • 前端开发面试题及答案整理(合集)

      前端开发面试题及答案 1、对Web标准以及W3C的理解与认识? 答:标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外链CSS和JS脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组

    2024年02月17日
    浏览(32)
  • 常见的Webpack面试题及答案

    Webpack是目前比较物流的前端构建工具,它基于入口,用不同的Loader来处理不同的文件。我们来看一下常见的Webpack面试题及答案吧,希望对你有帮助。 Webpack的核心概念 Entry :入口,Webpack执行构建的第一步将从Entry开始,可抽象成输入。告诉Webpack要使用哪个模块作为构建项目

    2024年01月16日
    浏览(49)
  • 头歌实践教学平台答案(消息队列面试题及答案)

    头歌实践教学平台消息队列 面试题及答案,消息队列⾯试题及答案。 1、为什么使用消息队列? 消息队列使用的场景和中间件有很多,但解决的核心问题主要是:异步、解耦、消峰填谷。 异步、解耦、消峰填谷这是消息队列最大的优点,除了这些消息队列还可以会解决一些

    2024年02月11日
    浏览(50)
  • 2023最新前端高频面试题及答案(轻松拿捏面试官)

    废话就不多说了直接上题 set和map的区别?    set:     (1)成员是不可以重复的     (2)只有键值没有键名,类似数组     (3)可以遍历,方法有add,delete,has   map:     (1)本质上是键值对的集合,类似集合     (2)可以遍历,可以跟各种数据格式转换 for in,for of,

    2024年02月15日
    浏览(35)
  • 深信服 网络相关面试题及部分答案

    直接开始 A: 在具备自协商能力的端口没有Link的情况下,端口一直发送FLP,在FLP中包含着自己的连接能力信息,包括支持的速率能力、双工能力、流控能力等。这个连接能力是从自协商能力寄存器中得到的(Auto-Negotiation Advertisement Register ,PHY标准寄存器地址4 )。依靠脉冲位

    2024年02月16日
    浏览(24)
  • 前端200道面试题及答案(更新中)

    目录 html相关 1)说一下对cookie和Storage(localStorage和sessionStorage) 的认识和区别? 2)link和@import的区别 3)浏览器如何实现不同标签页的通信? 4)iframe的优缺点 5)canvas 6)做项目用到哪些h5新特性和css3新特性? 7)用localstorage和sessionStorage写过什么? 8)如何解决页面内容加载缓

    2024年03月14日
    浏览(41)
  • 最全java面试题及答案(208道)

    本文分为十九个模块,分别是: 「Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM」 ,如下图所示: 共包含 208 道面试题,本文的宗旨是为读者朋友们整

    2024年02月03日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包