php综合复习题大全(下)——提升篇

66.  什么是 OOP? 什么是类和对象?什么是类属性?
OOP(object oriented programming) ,即面向对象编程,其中两个最重要的概念就是类和对象。
世间万物都具有自身的属性和方法,通过这些属性和方法可以区分出不同的物质。
属性和方法的集合就形成了类,类是面向对象编程的核心和基础,
通过类就将零散的用于实现某个功能的代码有效地管理起来了。

类只是具备了某些功能和属性的抽象模型,而实际应用中需要一个一个实体,也就是需要对类进行实例化,
类在实例化之后就是对象。★ 类是对象的抽象概念,对象是类的实例化。
OOP 具有三大特点: 1.  封装性(又叫做隐藏性); 2.  继承性;  3.  多态性。
OOP 的优点: 1 、代码重用性高(省代码)  2 、使程序的可维护性高(扩展性)  3 、灵活性
67.  常用的属性的访问修饰符有哪些?分别代表什么含义?
private protected public

类外: public ,var
子类中: public protected ,var
本类中: private protected public ,var
如果不使用这三个关键词,也可以使用 var 关键字。但是 var 不可以跟权限修饰词一起使用。 var 定义的变量 , 子类中可以访问到,类外也可以访问到,相当于 public
类前面:只能加 final abstract
属性前面:必须有访问修饰符( private protected public var
方法前面: static final private protected public  abstract

68. $this self parent 这三个关键词分别代表什么?在哪些场合下使用?
$this  当前对象
self  当前类
parent  当前类的父类

$this 在当前类中使用 , 使用 -> 调用属性和方法。
self 也在当前类中使用,不过需要使用 :: 调用。
parent 在类中使用。

69. 类中如何定义常量、如何类中调用常量、如何在类外调用常量。
类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。
定义常量使用关键字 const.
例如: const PI = 3.1415326;
无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,
访问常量的格式都是类名加作用域操作符号(双冒号)来调用。
即:类名  ::  类常量名 ;

70.  作用域操作符 :: 如何使用?都在哪些场合下使用?
调用类常量
调用静态方法

71.  什么是魔术方法?常用的魔术方法有哪几个?
__ 开头的系统自定义的方法。
__construct()
__destruct()
__autoload()
__call()
__tostring()

72.  什么是构造方法和析构方法?
构造方法就是在实例化一个对象的同时自动执行的成员方法,作用就是初始化对象。
php5 之前,一个跟类名完全相同的方法是构造方法, php5 之后魔术方法 __construct() 就是构造方法。
如果类中没有定义构造方法,那么 php 会自动生成一个,这个自动生成的构造方法没有任何参数,
没有任何操作。
构造方法的格式如下:
function __construct(){}
或者: function  类名 (){}
构造方法可以没有参数,也可以有多个参数。
析构方法的作用和构造方法正好相反,是对象被销毁时被自动调用的,作用是释放内存。
析构方法的定义方法为: __destruct();
因为 php 具有垃圾回收机制,能自动清除不再使用的对象,释放内存,一般情况下可以不手动创建析构方法。
73. __autoload() 方法的工作原理是什么?
使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行 __autoload() 函数。
这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后
就执行 include 或者 require 来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。
使用自动载入的魔术函数可以不必要写很多个 include 或者 require 函数。

74.  什么是抽象类和接口?抽象类和接口有什么不同和相似的地方?
抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。
抽象类是通过关键字  abstract  来声明的。
抽象类与普通类相似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少要包含一个抽象方法,
抽象方法没有方法体,该方法天生就是要被子类重写的。
抽象方法的格式为: abstract function abstractMethod();

因为 php 中只支持单继承,如果想实现多重继承,就要使用接口。也就是说子类可以实现多个接口。
接口类是通过 interface 关键字来声明的,接口类中的成员变量和方法都是 public 的,方法可以不写关键字 public
接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。
抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽象类还是接口要看具体实现。
子类继承抽象类使用 extends ,子类实现接口使用 implements

抽象类至少有一个抽象方法吗??????
答:如果一个类声明成抽象类,里面可以没有抽象方法
如果一个类中有抽象方法,这个类必须是抽象类

75. __call 的参数有几个,类型是什么,意义是什么?
魔术方法 __call() 的作用是当程序调用一个不存在或不可见的成员方法时, php 会先调用 __call() 方法,
将那个不存在的方法的方法名和参数都存储下来。
__call() 包含两个参数,   第一个参数是那个不存在的方法的方法名,是个字符串类型;
第二个参数是那个不存在的方法的所有参数,是个数组类型。
本人认为 __call() 方法的意义更多在于调试,可以定位到错误。同时可以捕捉异常,如果某个方法不存在,
则执行其它可替代方法。

76. smarty 模板技术的用途是什么?
为了 php html 分开,美工和程序员各司其职,互不干扰。
77. smarty 配置主要有哪几项?
1.  引入 smarty.class.php;
2.  实例化 smarty 对象;
3.  重新修改默认的模板路径;
4.  重新修改默认的编译后文件的路径;
5.  重新修改默认的配置文件的路径;
6.  重新修改默认的 cache 的路径。
7.  可以设置是否开启 cache
8.  可以设置左侧和右侧定界符。

78. smarty 在使用过程中需要注意哪些细节?
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. oop 中的多态性跟方法重写有什么关系?
答:
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 一个对象会出现 “Catchable fatal error: Object of class t2 could not be converted to string in G:\php2\t2.php on line 33”
print 一个数组时也只是输出 “Array” print 一个对象出现 “Catchable fatal error: Object of class t2 could not be converted to string in G:\php2\t2.php ”
▲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.  如果一个类是抽象类,而类中的方法都是非抽象的方法,会报错吗?
答:不会报错,如果一个类是抽象类,其中可以没有抽象方法,但是一个类中有个方法是抽象方法,那么这个类一定是一个抽象类

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() 。程序希望通过该方法,自动引入这个类文件。该方法有一个参数,即就是那个忘记引入的类的名称。 __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. MVC 的概念是什么?
MVC (即模型 - 视图 - 控制器)是 80 年代发明的一种软件设计模式或者说编程思想。
M 指模型层, V 是指视图层(显示层或者用户界面), C 是指控制层。
使用 mvc 的目的是实现 M V 分离,从而使得一个程序可以轻松使用不同的用户界面。
C 存在的目的则是在 M V 之间起到调节作用,确保 M V 的同步,一旦 M 改变, V 应该能同步更新。
M V 分离,就可以做到同一个网页,在不同节日到来的时候能显示不同的页面风格,这只需要提前制作多个视图层模板页面,
而无需更改 M 层程序。
MVC 做到了编程中的分工合作,代码的可重用性得到最大化体现,程序逻辑更加清晰而富有条理,便于后期维护管理。

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.  文件上传需要注意哪些细节?怎么把文件保存到指定目录?怎么避免上传文件重名问题?
1).  首现要在 php.ini 中开启文件上传;
2).  php.ini 中有一个允许上传的最大值,默认是 2MB 。必要的时候可以更改;
3).  上传表单一定要记住在 form 标签中写上 enctype="multipart/form-data"
4).  提交方式  method  必须是  post
5).  设定  type="file"  的表单控件,并且必须具有 name 属性值;
6).  为了上传成功,必须保证上传文件的大小是否超标、文件类型是否符合要求,上传后存放的路径是否存在;
7).  表单提交到接收页面,接收页面使用 $_FILES 来接收上传的文件。
$_FILES 是个多维数组。第一维下标是上传控件的 name ,二维下标分别为 name/type/tmp_name/size/error 。分别代表
文件名、文件类型、上传到临时目录下的临时文件名、文件大小、是否有错误。
如果是批量上传,那么二维下标就是数组,而并非是字符串。
8).  文件上传后是被放置在服务器端临时路径下,需要使用 move_uploaded_file () 函数,才可以将上传后的
文件保存到指定目录。
9).  为了避免上传文件重名,可以通过上传的文件名获取到文件后缀,然后使用时间戳 + 文件后缀的方式为文件重新命名。
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.  模拟 SESSION 机制实现数据库存放会话数据有什么作用?【备用】
如果使用默认的 SESSION 机制,大家都知道默认的 SESSION_ID 是存放在 COOKIE 中,用户的身份是靠 SESSION_ID 来识别的,
COOKIE 文件是存放在用户浏览器的客户端,这样就会带来一个问题,当用户在办公室选择一些商品到购物车,
在准备下订单付款的时候,用户选择了支付宝在线的支付方式,恰巧办公室的电脑上面没有安装支付宝的数字证书,
而在用户家里的电脑安装过数字证书,所以呢,用户就需要回家去支付。但是回家登录商城之后,
发现购物车中精心挑选的商品都不存在了。这是为什么呢 ? 问题就在家里电脑上的并没有存放 SESSION_ID cookie 文件,
因而就无法正确的读取服务器上对应 session 文件中的数据,所以无法将原来的选择的商品息读取过来。
这样的购物车功能给用户的用户体验式非常糟糕的,所以我们就需要采取模拟 SESSION 机制使用数据库来存放会话数据。
121.  什么是无限极分类?
要实现无限极分类,数据库建表是关键。
表结构中至少需要三个字段,如果想避免递归循环,那么需要四个字段。
1. id  ,当前数据的唯一标识;
2. typename  ,类型名称;
3. parentid  , 当前类型的上一层父类型的 id
4. path  , 其中存储当前类型的 id 和它所有父级类型的 id
这些 id 之间采用 “-” 隔开。
5.  当通过以下 sql 语句就可以实现 , 相同顶级类下的信息都在一起集中显示。
select * from  表名  where  条件  order by path;
122.  分页原理是什么?
数据分页需要以下几个条件:
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;

123   如何在 smarty 模板语言中使用 php 代码?
借助于两个 smarty 内建函数。
1. inluce_php  函数用于在模板中包含  php  脚本。例如:
{include_php file="test.php"}
2. php  标签允许在模板中直接嵌入  php  脚本。例如:
{php}
echo " 这个是 php 内建函数的作用 ";
{/php}
124   请列出至少五个 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(‘’)}  ,格式化时间戳。

125   写程序实现如下功能:
a. 如何判断一个字符串中是否存在一个字符?
echo strstr('abcdefgcd' , 'cd');
echo strpos('ab0defgcd' , 'cd');
b. 如何判断一个字符串中一个字符出现的次数?
echo substr_count('abcdefgcd' , 'cd');
c. 如何去掉一个字符串的最后一个字符
echo substr('abcdefgcd' , 0 , -1);
126   如何使用 smarty 的缓存、步骤?什么叫单模板多缓存?
如果给整个网站开启缓存,那么 $smarty->caching=1, 此时缓存的时间为 smarty.class.php 中默认的时间,也就是 3600 秒。
如果对每一个页面独立设置缓存,那么 $smarty->caching=2  ,缓存时间就会跟 display 的参数模板页相挂钩,也就是可以实现对每个模板页设置不同的缓存时间。
用法例如:
if(!$smarty->is_cached('index.html')) {
// 此处可以执行数据库操作
$smarty->cache_lifetime = 3600*6;
}
$smarty->display('index.html');

对于例如新闻单条这样的页面,新闻的模板都是一个,如果开启缓存,那么所有的新闻单页的缓存都是一个,根本不会随着 id 的变化而变换内容。所以为了区分不同的页面缓存,需要使用单模板多缓存技术。具体做法是以 id 作为 display 的第二个参数来实现。此外对于具有分页的列表页,也必须在 display 中使用第二个参数,可以使用新闻类型 id 和当前页面合并成第二个参数。

127   写一个递归函数完成以下功能:向函数中传一个多维数组,对数组中所有的值做判断
,如果值是 ’number’ 则设置该值为 0 ( 提示:该题考的是递归的应用,因为传入的数组不确定是多少维的,所以需要递归判断 )
function recursive_array($arr) {
if(is_array($arr)) {
foreach($arr as $key=>$value) {
if(is_array($value)) {
$arr[$key] = recursive_array($value);
} else {
if($value=='number') {
$arr[$key] = '0'; }
}
}
}
return $arr;
}

128   使用 jquery 写一个全选的例子?
// 全选与取消全选
function selectAll(flag) {
for(var i=0; i<$("#fonds input").size(); i++) {
$("#fonds input").get(i).checked=flag;
}
}
// 判断复选框已经被勾选了多少个?
function checkFonds() {
var count=0;
for(var i=0; i<$("#fonds input").size(); i++) {
if($("#fonds input").get(i).checked==true) {
count++;
}
}
alert(count);
}
// 利用后代选择器和 get() 来获取指定的控件
$(“div a”).get(2)

129   请说明 smarty fetch 方法的功能?
Fetch 方法可以获取到页面所有的内容,并且赋值到一个变量中。
如果第四个参数为 true ,则等同于 display ,直接输出到浏览器中。
如果第四个参数为 false ,则不输出。
Display 方法就是第四个参数为 true fetch 方法。
Display = Fetch() + echo()
130   写出关于文件上传的相关函数?  
strrchr($filename , '.');
explode('.' , $filename);
end($arr);
strrpos($filename , '.');
substr($filename , $pos+1);
pathinfo($filename , PATHINFO_EXTENSION);
date(‘YmdHis’)
time()
rand();
mt_rand()
move_uploaded_file()
131   如何将 SESSION 存放在数据库中 , 可以结合数据表设计说明 .
默认情况下 php.ini session.save_handler = files ,也就是 session 是以文件形 式存储的。
如果想更改为数据库或其它存储方式,那么需要更改设置,让  session.save_handler = user
除了在 php.ini 中配置外,还可以在 PHP 页面中单独配置,用
ini_set ('session.save_handler, 'user') 来设置 session 的存储方式,设置为用户自定义存储方式。
设置好存储方式后,需要使用 session_set_save_handler() 函数。
该函数是设置用户级别的 session 保存过程的函数。该函数有 6 个参数,这 6 个参数其实是 6 个自定义函数的名称,分别代表对 session 的开启,关闭,读,写 ,销毁, gc (垃圾回收)。
示例代码如下:
function open () { }
function close() { }
function read () { }
function write () {}
function destroy () {}
function gc () {}
session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");
session_start();
现在你就可以象往常一样地使用 session 了。
数据库结构如下:
Session_id  ,  session_value ,expire_time ,  分别存储 sessionid id 和值以及失效时间。
132 、 常用的正则表达式写法:
中文: /^[\u4E00-\u9FA5]+$/
手机号码: /^(86)?0?1\d{10}$/
EMAIL
/^[\w-]+[\w-.]?@[\w-]+\.{1}[A-Za-z]{2,5}$/
密码(安全级别中):
/^(\d+[A-Za-z]\w*|[A-Za-z]+\d\w*)$/
密码(安全级别高):
/^(\d+[a-zA-Z~!@#$%^&(){}][\w~!@#$%^&(){}]*|[a-zA-Z~!@#$%^&(){}]+\d[\w~!@#$%^&(){}]*)$/
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值