推广 热搜: 公司  快速  上海  中国    未来  企业  政策  教师  系统 

PHP笔试题和面试题

   日期:2024-12-01     作者:caijiyuan    caijiyuan   评论:0    移动:http://keair.bhha.com.cn/mobile/news/3430.html
核心提示:PHP笔试题和面试题面试题PHP笔试题和面试题Smarty是基于MVC概念的一种模板引擎,它将一个页面程序分成了两部分来实现:即视图层
PHP笔试题和面试题

PHP笔试题和面试题

面试题 PHP笔试题和面试题
 
Smarty是基于MVC概念的一种模板引擎,它将一个页面程序分成了两部分来实现:即视图层和控制层, 也就是说smarty技术将用户UI与php代码分离开。 这样程序员和美工各司其职,互不干扰。 smarty运用过程中要注意以下几个问题: 1.正确配置smarty。主要要实例化smarty对象,配置smarty模板文件的路径; 2.php页面中使用assign赋值 和 display显示页面; 3.smarty模板文件中不允许出现php代码段,所有的注释,变量,函数都要包含在定界符内。 A.{} B. foreach C. if else D. include E. literal
79. MVC的概念是什么?各层主要做什么工作?
MVC(即模型-视图-控制器)是一种软件设计模式或者说编程思想。 M指Model模型层,V是View视图层(显示层或者用户界面),C是Controller控制器层。 使用mvc的目的是实现M和V分离,从而使得一个程序可以轻松使用不同的用户界面。 在网站开发中, 模型层一般负责对数据库表信息进行增删改查, 视图层负责显示页面内容, 控制器层在M和V之间起到调节作用,控制器层决定调用哪个model类的哪个方法, 执行完毕后由控制器层决定将结果assign到哪个view层。
80. 略
81. java语言中方法重写和重载分别代表什么意思?准确说php支持方法的重载吗?很多参考书中提到的php重载实际上该如何正确理解?
php不支持方法的重载,很多书里提到的PHP‘重载’应该是‘重写’
82. final关键字能定义类中的成员属性吗?
不能,类的成员属性只能由public ,private , protected ,var 来定义
83. final关键字定义的类能够被继承吗?
final定义的类不能被继承
84. 说说static关键字的使用场合?static能用在class前吗?static可以跟public,protected,private一起使用吗?构造方法可以是static的吗?
static可以在属性和方法前面使用,调用static属性或者方法时,只要将类载入就可用,不用实例化,static不能用在class的前面。static可以跟public,protected,private一起使用,在方法的前面; 构造方法不能是static
85. 接口可以实例化吗?抽象类能实例化吗?
答:接口和抽象类都不能被实例化
86. class前面能加访问修饰符吗?如果能加,只能是哪几个访问修饰符?可以是权限访问修饰符public,protected,private吗? 
class前面可以加final,static; class前面不能加public,protected,private
87. 类中属性前可以不加访问修饰符吗?成员变量前的修饰符只能是public,protected,private吗?还可以是哪几个?
类中的属性必须加修饰符,除了那3个以外,还可以加var
88. 如果echo一个数组,页面输出什么?echo一个对象呢?print一个数组或者对象呢?
页面只能输出“Array”;echo一个对象会出现错误提示。print一个数组时也只是输出“Array”,print一个对象出现错误提示,     print和echo是一样的 
89. __tostring()魔术方法在什么时候被自动执行? __tostring()魔术方法必须要return返回值吗?
当echo或者print一个对象时,就是自动触发。而且__tostring()必须要返回一个值
90. 什么是抽象方法?
在方法前面有abstract,而且方法没有方法体,连“{ }”也不能有
91. 如果一个类中有一个方法是抽象方法,而这个类没有定义成抽象类,会报错吗?
会,"Fatal error: Class t2 contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (t2::ee) in"
92. 如果一个类是抽象类,而类中的方法都是非抽象的方法,会报错吗?
不会,如果一个类是抽象类,其中可以没有抽象方法,但是一个类中有个方法是抽象方法,那么这个类一定是一个抽象类
93.略
94. final 关键字的应用应注意的问题?
使用final关键字定义的类,禁止继承。 使用final关键字定义的方法,禁止重写。
95. 如果一个类既要继承一个父类,又要实现多个接口,该如何写?
书写格式例如: class MaleHuman extends Human implements Animal,Life { ... }
=================================================================================================
96. 什么是单点入口呢?        
所谓单点入口就是整个应用程序只有一个入口,所有的实现都通过这个入口来转发,比如说在上面我们就使用index.php作为程序的单点入口,当然这个是可以由你自己任意控制的。 单点入口有几大好处:第一、一些系统全局处理的变量,类,方法都可以在这里进行处理。比如说你要对数据进行初步的过滤,你要模拟session处理,你要定义一些全局变量,甚至你要注册一些对象或者变量到注册器里面。第二、程序的架构更加清晰明了。
97. PHP提供了2套正则表达式函数库,分别是哪两套?
(1) PCRE   Perl兼容正则表达式:preg_   为前缀 (2) POSIX  便携式的操作系统接口:ereg_   为前缀
98. 正则表达式的组成?    
由原子(普通字符,如英文字符),元字符(有特殊功用的字符),模式修正字符,一个正则表达式中,至少包含一个原子
99. 不常用魔术方法的触发时机?
__isset()  __unset()的触发时机 __sleep()、 __wakeup()  在对对象进行串行化的时候调用,如果序列化对象的时候,不写__sleep()方法,则所有的成员属性都会被序列化,而定义了__sleep()方法,则只序列化指定数组中的变量。 因此,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。  使用 __sleep 的目的是关闭对象可能具有的任何数据库连接,提交等待中的数据或进行类似的清除任务。此外,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。 使用 __wakeup 的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。
100. OOP的三大特性是什么?
1. 封装性:也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。于是开发人员只需要关注这个类如何使用,而不用去关心其具体的实现过程,这样就能实现MVC分工合作,也能有效避免程序间相互依赖,实现代码模块间松藕合。 2. 继承性:就是子类自动继承其父级类中的属性和方法,并可以可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。php只支持单继承,也就是说一个子类只能有一个父类。 3. 多态性:子类继承了来自父级类中的属性和方法,并对其中部分方法进行重写。于是多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,这种技术就是多态性。多态性增强了软件的灵活性。
101. 常见框架
thinkPHP yii Zendframework CakePhp sy
102. 常用魔术方法的触发时机?
1)__autoload() :当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后,就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。使用自动载入的魔术函数可以不必要写很多个include或者require函数。 
2)__construct()  :构造方法是实例化对象的时候自动执行的方法,作用就是初始化对象。该方法可以没有参数,也可以有多个参数。如果有参数,那么new这个对象的时候要记得写上相应的参数。在php5以前,没有魔术构造方法,普通构造方法是一个跟类名同名的方法来实现构造的。如果一个类中既写了魔术构造方法,又定义了普通构造方法。那么php5以上版本中,魔术方法起作用,普通构造方法不起作用。反之,在php5以前版本中,不认识魔术构造方法,只是把该方法当做普通的方法。 
3)__destruct()  :析构方法作用和构造方法正好相反,是对象被销毁时被自动调用的,作用是释放内存。析构方法没有参数。
4)__call() :当程序调用一个不存在或不可见的成员方法时,自动触发执行__call()。它有两个参数,分别是未访问到的方法名称和方法的参数。而第二个参数是数组类型。 
5)__get() :当程序调用一个未定义或不可见的成员属性时,自动触发执行__get()。它有一个参数,表示要调用的属性的名称。 6)__set():当程序试图写入一个不存在或不可见的成员属性时,PHP就会自动执行__set()。它包含两个参数,分别表示属性名称和属性值。 
7)__tostring()  :当程序使用echo或print输出对象时,会自动调用该方法。目的是希望通过该方法将对象转化为字符串,再输出。__tostring() 无参数,但是该方法必须有返回值。 
8)__clone()  :当程序clone一个对象的时候,能触发__clone()方法,程序希望通过这个魔术方法实现:不仅仅单纯地克隆对象,还需要克隆出来的对象拥有原来对象的所有属性和方法。
103. 略
104、访问权限修饰符有哪几种,对比解释
1、public 表示公共的,在本类中和子类中以及类外,可以对其调用;  2、protected表示受保护的,可以在本类中和子类中调用;  3、private表示私有的,只能在本类中调用;  4、var,效果等同于public
105、Class关键词前可以有哪些修饰词
a) Final修饰,表示该类是最终的,无法继承;  b) Abstract修饰,表示该类是抽象类
106、作用域操作符在那些场合下使用
作用于操作符的使用场合 a) 本类中: i. self::类常量 ii. self::静态属性 iii. self::方法()   parent::方法() b) 子类中: i. parent::类常量 ii. parent::静态属性(public或者protected) iii. parent::方法()(public或者protected) c) 类外: i. 类名::类常量 ii. 类名::静态属性(public) iii. 类名::静态方法(public)
107、$this,self, parent分别代表什么?哪些场合下使用
答:$this代表的是当前对象 self代表的是当前的类 parent代表的是当前类的父类 使用场合: $this只能使用在当前类中,通过$this->可以调用当前类中的属性和方法; self只能在当前类中使用,通过作用域操作符::访问当前类中的类常量、当前类中的静态属性、当前类中的方法; parent只能使用在有父类的当前类中,通过作用域操作符::访问父类中的类常量、父类中的静态属性、父类中的方法。
108、说明是接口、抽象类二者有何相同和不同的地方?
1、接口是帮助php实现功能意义上的多继承的,用interface来声明,其方法没有方法体,使用implemens关键词来实现接口。 接口中只能包含抽象方法和类常量,不可以包含成员属性。 
2、抽象类是一种不能被实例化的类,只能作父类,用abstract class来定义,抽象类和普通类可以没有区别,类中可以包含成员属性、类常量、方法。 子类得用extends来继承,而且只能是单继承。 两者相同点是都不可以被实例化,都是需要被继承才可以使用。 两者的最大区别是接口可以实现多继承,而抽象类只能是单继承。 接口中不能包含成员属性,而抽象类中可以有成员属性。 接口中的抽象方法必须是public或者无访问修饰词,接口中的抽象方法不能用abstract来修饰。 抽象类中的方法可以是普通方法,也可以是抽象方法,如果是抽象方法,一定需要使用abstract来修饰。
109、解释PHP中单例模式?
又叫做单态模式、单元素模式、singleton pattern。 单例模式指在PHP的应用程序的范围内只对指定的类创建一个实例。使用单例模式的类称为单例类。 在php中单例类必须要有一个私有的构造方法,还要有一个私有的魔术克隆方法(该方法体中为空) 和一个私有的静态的成员属性$_instance. 私有构造方法防止除自身以外的类来实例化它。私有的方法体为空的克隆方法防止该类被克隆。 $_instance用来存储被自身实例化后的对象。 还必须要有一个公共的静态的方法getInstance()。该方法返回已经存储了实例对象的$_instance。
110、什么是SQL注入?
SQL注入攻击是黑客对数据库进行攻击的常用手段之一。一部分程序员在编写代码的时候, 没有对用户输入数据的合法性进行判断,注入者可以在表单中输入一段数据库查询代码并提交, 程序将提交的信息拼凑生成一个完整sql语句,服务器被欺骗而执行该条恶意的SQL命令。注入者根据程序返回的结果, 成功获取一些敏感数据,甚至控制整个服务器,这就是SQL注入。
111、如何防止SQL注入?
要对提交的信息进行过滤,对单引号进行转义。 首先可以在php.ini中设置,让所有的单引号在提交后都进行转义。或者使用addslashes().
112、FCKEditor自动过滤的解决办法?
如果您需要编辑模板页,默认的FCK设置是会去掉<HTML></HTML><BODY></BODY>标签,而且会给你加上<P></P>标签的,如果需要保留的话,只要更改下设置可以了。 在fckconfig.js里面有:FCKConfig.FullPage = false ; 改为:FCKConfig.FullPage = true; 如果想去掉自动添加<P>的代码就可以在这里设置 默认是 FCKConfig.EnterMode = 'p' ;    // p | div | br FCKConfig.ShiftEnterMode = 'br' ; // p | div | br 改成 FCKConfig.EnterMode = 'br' ;    // p | div | br FCKConfig.ShiftEnterMode = 'p' ; // p | div | br 
113、$_REQUEST、$_GET、$_POST、$_cookie 的关系和区别:
1.关系:$_REQUEST包含了$_GET、$_POST、$_cookie等的所有内容,是它们的集合体。 2.通过$_REQUEST获取变量值,PHP页面因为不确定它是哪种传值方式, 因此会根据php.ini中的配置来接收值。 php.ini里可以设置,variables_order = “GPC”。其含义是GET,POST,cookie. 所以PHP页面会先从$_GET中获取,再从$_POST中获取,然后从$_cookie中获取。 新获得的值会覆盖之前获取到的值。 因此从表现形式上看,$_REQUEST最后是获取$_cookie中的值,如果$_cookie中没有值, 会获取$_POST中的值,如果$_POST没有获取到 ,就去$_GET中获取。 如果$_GET中也没有该值,那么$_REQUEST就返回null。
114、什么是多条件查询(复合查询),如何实现多条件查询? 如何实现万能查询呢?
查询的时候要填写查询条件,这些条件会通过表单进行提交。 首先需要检查提交的条件是否为空。如果不为空,就认为这个值是要被当作条件, 我们就可以使用字符串连接的方式来组合一个sql查询语句。 当执行后获取查询结果。
115. 略
116. 使用GD2库创建图像的步骤?
1). 创建一个画布: imagecreate(); 2). 设置画布背景颜色,使用RGB设置颜色: imagecolorallocate(); 3). 设置文字颜色: imagecolorallocate(); 4). 在画布上书写文字: imagestring(); 5).  以 JPEG 格式将图像输出到浏览器或文件:根据图片格式不同,函数还可以是imagepng()、imagegif() imagejpeg(); 6). 清除图像资源: imagedestroy();
117. GD2库生成缩略图的步骤是什么?
1). 读取希望生成缩略图的源图像,创建图像对象:根据图片格式不同,函数也相应不同 $src_image = imagecreatefromjpeg(); 2). 获取原图像的宽度和高度$srcW,$srcH,根据缩放比例计算出新图像的宽度和高度$dstW、$dstH: 3). 创建一个真色彩的图像对象,宽度和高度设置成刚才计算出的宽度和高度: $dst_image = imagecreatetruecolor($dstW,$dstH); 4). 拷贝图像并调整大小: imagecopyresized(); 5). 将图像输出:根据图片格式不同,函数也相应不同 imagejpeg(); 6). 清除图像资源(将源图像资源和目标图像资源都清除) imagedestroy();
118. GD2库给图片增加水印如何做?
1. 添加简单的文本水印: 利用imagestring()函数就可以在图片上写文本水印。 2. 增加一个图形水印: 1). 读取希望增加水印的源图片,创建图像对象:根据图片格式不同,函数也相应不同 $image = imagecreatefromjpeg(); 2). 创建一个水印图片的图像对象: $watermark = imagecreatefrompng(); 3). 拷贝并合并图像: imagecopymerge(); 4). 将图像输出:根据图片格式不同,函数也相应不同 imagejpeg(); 5). 清除图像资源(将源图像资源和水印图像资源都清除) imagedestroy();
119. 什么是事务?什么是回滚?事务的作用是什么?
事务就是组合起来的几个独立的sql操作。如果其中一项失败,那么就让这几个组合起来的sql操作都 回退到未执行状态。这就是事务的回滚。 mysql中MyISAM存储引擎的表不支持事务,只有InnoDB 存储引擎的表才支持事务,为了让事务正常执行, 就需要让参与事务的所有数据表都设置成innoDB类型。 事务被包装在了 BEGIN 和 COMMIT 语句之间。在没有使用 COMMIT 语句的情况下,对数据库的操作不是永久的, 一旦运行了 ROLLBACK,就会被回退。只有执行了COMMIT,数据表中的信息才被改动。 事务的目的就是为了保证数据的完整性。
120. 分页原理是什么?
数据分页需要以下几个条件: 1. 参与分页的总条数 【$msg_count】 ,该值通过数据库查询可以获取到; 2. 每页显示的条数【$pagesize】 ,这个数值由自己定义; 3. 当前页的页码数 【$page】,该数值通过地址栏传递和接收; 4. 可以通过以上资料计算出总页数 【$pagecount】 ,此处需要借助ceil(); 【$pagecount = ceil($msg_count/$pagesize);】 5. 数据库查询借助sql语句中的【limit】来实现数据的变化: 例如: select * from 表名 where 条件 limit $startnum , $pagesize; 而$startnum = ($page-1)*$pagesize;
121、如何在smarty模板语言中使用php代码?
借助于两个smarty内建函数。 1. inluce_php 函数用于在模板中包含 php 脚本。例如: {include_php file="test.php"} 2. php 标签允许在模板中直接嵌入 php 脚本。例如: {php} echo "这个是php内建函数的作用"; {/php}
122、请列出至少五个smarty中的变量调节符并说明功能?
default  例如:{$arr|default:’xxxx’} ,默认变量调节器,当变量为空时显示给定的默认值; truncate   例如:{$articleTitle|truncate:10} , 切割字符串长度为指定的长度; count_characters   例如:{$articleTitle|count_characters} ,获取字符串长度; strip_tags   例如:  {$articleTitle|strip_tags} ,去除字符串中的所有html标签; date_format  例如:{$smarty.now|date_format(‘’)} ,格式化时间戳。
123、写程序实现如下功能:
a.如何判断一个字符串中是否存在一个字符? echo strstr('abcdefgcd'  , 'cd'); echo strpos('ab0defgcd'  , 'cd'); b.如何判断一个字符串中一个字符出现的次数? echo substr_count('abcdefgcd'  , 'cd'); c.如何去掉一个字符串的最后一个字符 echo substr('abcdefgcd'  , 0 ,  -1);
124、请说明smarty中fetch方法的功能?
Fetch方法可以获取到页面所有的内容,并且赋值到一个变量中。 如果第四个参数为true,则等同于display,直接输出到浏览器中。 如果第四个参数为false,则不输出。 Display方法就是第四个参数为true的fetch方法。 Display = Fetch() + echo() 
125、常用的正则表达式写法:
中文:/^[一-龥]+$/ 
 手机号码:/^(86)?0?1d{10}$/ EMAIL: /^[w-]+[w-.]?@[w-]+.{1}[A-Za-z]{2,5}$/ 
 密码(安全级别中): /^(d+[A-Za-z]w*|[A-Za-z]+dw*)$/ 
 密码(安全级别高): /^(d+[a-zA-Z~!@#$%^&(){}][w~!@#$%^&(){}]*|[a-zA-Z~!@#$%^&(){}]+d[w~!@#$%^&(){}]*)$/
本文地址:http://keair.bhha.com.cn/news/3430.html    康宝晨 http://keair.bhha.com.cn/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类最新资讯
0相关评论

文章列表
相关文章
最新动态
推荐图文
最新资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备2023022329号