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 = 36006;
}
$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~!@#$%^&(){}])$/