2.      什么是ajax?ajax的原理是什么?ajax的核心技术是什么?ajax的优缺点是什么?
ajax是(asynchronous)异步的 javascript and xml的缩写,
是javascript、xml、css、DOM等多个技术的组合。
'$'是jQuery的别名.

页面中用户的请求通过ajax引擎异步地与服务器进行通信,
服务器将请求的结果返回给这个ajax引擎,最后由这个ajax引擎
来决定将返回的数据显示到页面中的指定位置。
Ajax最终实现了在一个页面的指定位置可以加载另一个页面所有的输出内容。
这样就实现了一个静态页面也能获取到数据库中的返回数据信息了。
所以ajax技术实现了一个静态网页在不刷新整个页面的情况下与服务器通信,
减少了用户等待时间,同时也从而降低了网络流量,增强了客户体验的友好
程度。

Ajax的优点是:
1.  减轻了服务器端负担,将一部分以前由服务器负担的工作转移到客户端执行,利用客户端闲置的资源进行处理;
2.  在只局部刷新的情况下更新页面,增加了页面反应速度,使用户体验更友好。
Ajax的缺点是不利于seo推广优化,因为搜索引擎无法直接访问到ajax请求的内容。
ajax的核心技术是XMLHttpRequest,它是javascript中的一个对象。

3.      ** jQuery是什么?jQuery简化ajax后的方法有哪些?
jQuery是Javascript的一种框架。
jQuery简化ajax后的方法有
$.get(),$.post(),$.ajax()。$是jQuery对象的别名。

代码如下:
<script>
var loadUrl = 'translate.php';
var input_val = $('#words').val();
//方法1:
$.post(loadUrl,{'words' : input_val},function(msg){
$("#result").html(msg);
});

//方法2:
$.get(loadUrl,{'words': input_val},function(msg){
$("#result").html(msg);
});

//方法3:
jQuery.ajax({
type: "post",
url: loadUrl,
cache:false,
data: "words=" + input_val,
success: function(msg) {
$("#result").html(msg);
}
});
</script>

4.      什么是会话控制?
简单地说会话控制就是跟踪和识别用户信息的机制。
会话控制的思想就是能够在网站中跟踪一个变量,通过这个变量,
系统能识别出相应的用户信息,根据这个用户信息可以得知用户权限,
从而展示给用户适合于其相应权限的页面内容。
目前最主要的会话跟踪方式有cookie,session。

5.      *** Session的原理是什么?
当用户向服务器端发送了一个开启了session的url请求,
服务器会因为该请求开启了session,而为这次请求随机分配一个sessionid。
同时服务器端的指定路径下,会记录该sessionid,以及该用户的登录信息
(例如用户名和密码)。同时会将这个sessionid传回发送请求的客户端,
而这个sessionid会被保存在客户端一个生命周期为0的cookie中。
因此session的正常使用要依赖于cookie的开启。

因为cookie是通过客户端浏览器来保存的,在ie浏览器中,
如果浏览器的隐私设置为阻止所有cookie,那么cookie则被禁用,
而session也不能正常使用。
如果想让session正常发挥作用,浏览器隐私需要设置为高或者以下。

6.    *** session和cookie的概念是什么,两者的区别是什么?
cookie是保存在客户端机器的,对于未设置过期时间的cookie,cookie值会保存在机器的内存中,只要关闭浏览器则
cookie自动消失。如果设置了cookie的过期时间,那么浏览器会把cookie以文本文件的形式保存到硬盘中,
当再次打开浏览器时cookie值依然有效。
session是把用户需要存储的信息保存在服务器端。每个用户的session信息就像是键值对一样存储在服务器端,
其中的键就是sessionid,而值就是用户需要存储信息。服务器就是通过sessionid来区分存储的session信息是
哪个用户的。
session在web开发中具有非常重要的份量。它可以将用户正确登录后的信息记录到服务器的内存中,当用户以此身份
访问网站的管理后台时,无需再次登录即可得到身份确认。而没有正确登录的用户则不分配session空间,即便输入了
管理后台的访问地址也不能看到页面内容。通过session确定了用户对页面的操作权限。

Session和Cookie的区别:
cookie是保存在客户端机器的,对于未设置过期时间的cookie,
cookie值会保存在机器的内存中,只要关闭浏览器则cookie自动消失。
如果设置了cookie的过期时间,那么浏览器会把cookie以文本文件的形式
保存到硬盘中,当再次打开浏览器时cookie值依然有效。
session是把用户需要存储的信息保存在服务器端。每个用户的session信息
就像是键值对一样存储在服务器端,其中的键就是sessionid,而值就是用户
需要存储信息。服务器就是通过sessionid来区分存储的session信息是哪个
用户的。
Session和Cookie两者最大的区别就是session存储在服务器端,
而cookie是在客户端。session安全性更高,而cookie安全性弱。

7 .     ** session和cookie的使用步骤分别是什么?
使用session的步骤:
1. 启动session:
使用session_start()函数来启动。session_start()前面不能有任何输出,包括空行。
2. 注册会话:
直接给$_SESSION数组添加元素即可。
3. 使用会话:
判断session是否为空或者是否已经注册,如果已经存在则像普通数组使用即可。
4. 删除会话:
1.可以使用unset删除单个session;
2.使用$_SESSION=array()的方式,一次注销所有的会话变量;
3.使用session_destroy()函数来彻底销毁session。

cookie怎么使用?
1. 记录用户访问的部分信息
2. 在页面间传递变量
3. 将所查看的internet页存储在cookies临时文件夹中,可以提高以后的浏览速度。
创建cookie:
setcookie(string cookiename , string value , int expire);
读取cookie:
通过超级全局数组$_COOKIE来读取浏览器端的cookie的值。
删除cookie:有两种方法
1.手工删除方法:
右击浏览器属性,可以看到删除cookies,执行操作即可将所有cookie文件删除。
2.setcookie()方法:
跟设置cookie的方法一样,不过此时将cookie的值设置为空,有效时间为0或小于当前时间戳。

8.      $this和self、parent这三个关键词分别代表什么?在哪些场合下使用?
$this 当前对象
self  当前类
parent  当前类的父类
$this在当前类中使用,使用->调用属性和方法。
self也在当前类中使用,不过需要使用::调用。
parent在类中使用。

9.      OOP的三大特性是什么?
1. 封装性:
也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。
于是开发人员只需要关注这个类如何使用,而不用去关心其具体的实现过程,这样就能实现MVC分工合作,也能有效避免程序间相互依赖,
实现代码模块间松藕合。

2. 继承性:
就是子类自动继承其父级类中的属性和方法,并可以可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。
php只支持单继承,也就是说一个子类只能有一个父类。

3. 多态性:
子类继承了来自父级类中的属性和方法,并对其中部分方法进行重写。
于是多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,这种技术就是多态性。
多态性增强了软件的灵活性。

10.     常用魔术方法的触发时机?
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()方法,
程序希望通过这个魔术方法实现:不仅仅单纯地克隆对象,
还需要克隆出来的对象拥有原来对象的所有属性和方法。

11.    ** smarty配置主要有哪几项?
smarty模板技术的用途是为了php与html分开,
美工和程序员各司其职,互不干扰。
Smarty配置信息包括:
1. 引入Smarty.class.php;
2. 实例化smarty对象;
3. 重新修改默认的模板路径;
4. 重新修改默认的编译后文件的路径;
5. 重新修改默认的配置文件的路径;
6. 重新修改默认的cache的路径;
7. 可以设置是否开启cache;
8. 可以设置左侧和右侧定界符。
优点 : 访问速度快  编译型的 编译后

12.     *** smarty的概念以及如何应用?
Smarty是基于MVC思想的一种模板引擎,
它将一个页面程序分成了两部分来实现:
即视图层和控制层,也就是说smarty技术将html与php代码分离开。
这样程序员和美工各司其职,互不干扰。

smarty的使用过程:
1.正确配置smarty。
主要要实例化smarty对象,配置smarty模板文件的路径;
2.php页面中使用assign赋值 和 display显示页面;
3.smarty模板文件中不允许出现php代码段,
所有的注释,变量,函数都要包含在定界符内。
Smarty模板语言主要包括:
A. smarty基本语法
B. Smarty模板调用各种变量
C. Smarty模板内建函数:include,literal,foreach, if else,config_load
D. Smarty缓存技术的应用
E. Smarty常用变量调节器:
default,{$title|default:'???'}
date_format {$smarty.now|data_format:'%Y-%m-%D'},
truncate {$title|truncate:10}
count_characters  {$title|count_characters}
strip_tags {$title|strip_tags}

13.    ** MVC的概念是什么?
MVC(即模型-视图-控制器)是一种软件设计模式或者说编程思想。
M指模型层,V是指视图层(显示层或者用户界面),C是指控制层。
使用mvc的目的是实现M和V分离,从而使得一个程序可以轻松使用不同的用户界面。
C存在的目的则是在M和V之间起到调节作用,确保M和V的同步,一旦M改变,V应该能同步更新。
将M和V分离,就可以做到同一个网页,在不同节日到来的时候能显示不同的页面风格,这只需要提前制作多个视图层模板页面,
而无需更改M层程序。
MVC做到了编程中的分工合作,代码的可重用性得到最大化体现,
程序逻辑更加清晰而富有条理,便于后期维护管理。

14、    访问权限修饰符有哪几种,对比解释
答:1、public 表示公共的,在本类中和子类中以及类外,可以对其调用
2、protected表示受保护的,可以在本类中和子类中调用
3、private表示私有的,只能在本类中调用
4、var,效果等同于public

15、    作用域操作符在哪些场合下使用?
答:作用于操作符的使用场合
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)

16、    $this,self, parent分别代表什么?哪些场合下使用
答:$this代表的是当前对象
self代表的是当前的类
parent代表的是当前类的父类
使用场合:
$this只能使用在当前类中,通过$this->可以调用当前类中的属性和方法;
self只能在当前类中使用,通过作用域操作符::访问当前类中的类常量、当前类中的静态属性、当前类中的方法;
parent只能使用在有父类的当前类中,通过作用域操作符::访问父类中的类常量、父类中的静态属性、父类中的方法。

17、    说明是接口、抽象类二者有何相同和不同的地方?
1、接口是帮助php实现功能意义上的多继承的,用interface来声明,其方法没有方法体,使用implemens关键词来实现接口。
接口中只能包含抽象方法和类常量,不可以包含成员属性。
2、抽象类是一种不能被实例化的类,只能作父类,用abstract class来定义,抽象类和普通类可以没有区别,类中可以包含成员属性、类常量、方法。
子类得用extends来继承,而且只能是单继承。
两者相同点是都不可以被实例化,都是需要被继承才可以使用。
两者的最大区别是接口可以实现多继承,而抽象类只能是单继承。
接口中不能包含成员属性,而抽象类中可以有成员属性。
接口中的抽象方法必须是public或者无访问修饰词,接口中的抽象方法不能用abstract来修饰。
抽象类中的方法可以是普通方法,也可以是抽象方法,如果是抽象方法,一定需要使用abstract来修饰。

18. 什么是构造方法和析构方法?
构造方法就是在实例化一个对象的同时自动执行的成员方法,作用就是初始化对象。
php5之前,一个跟类名完全相同的方法是构造方法,php5之后魔术方法__construct()就是构造方法。
如果类中没有定义构造方法,那么php会自动生成一个,这个自动生成的构造方法没有任何参数,
没有任何操作。
构造方法的格式如下:
function __construct(){}
或者:function 类名(){}
构造方法可以没有参数,也可以有多个参数。

析构方法的作用和构造方法正好相反,是对象被销毁时被自动调用的,作用是释放内存。
析构方法的定义方法为:__destruct();
因为php具有垃圾回收机制,能自动清除不再使用的对象,释放内存,一般情况下可以不手动创建析构方法。

19、    ** 解释PHP中单例模式?
又叫做单态模式、单元素模式、singleton pattern。
单例模式指在PHP的应用程序的范围内只对指定的类创建一个实例。
使用单例模式的类称为单例类。
在php中单例类必须要有一个私有的构造方法,
还要有一个私有的魔术克隆方法(该方法体中为空)
和一个私有的静态的成员属性$_instance.
私有构造方法防止除自身以外的类来实例化它。私有的方法体为空的克隆方法防止该类被克隆。
$_instance用来存储被自身实例化后的对象。
还必须要有一个公共的静态的方法getInstance()。
该方法必须返回$_instance。

20.    * 什么是单一入口(单点入口)呢?
所谓单一入口就是整个应用程序只有一个入口,所有的实现都通过这个入口来转发,
比如说在上面我们就使用index.php作为程序的单点入口,
当然这个入口文件的名字是可以由自己任意定义的。

单点入口有几大好处:
第一、一些系统全局变量,都可以在这里定义。
比如说你要对数据进行初步的过滤,你要模拟session处理,
你要定义一些全局变量,甚至你要注册一些对象或者变量到注册器里面
第二、程序的架构更加清晰明了。

21.   *** 分页原理是什么?
数据分页需要以下几个条件:
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;

22.   *** 无限极分类的原理是什么?
要实现无限极分类,数据库表结构是关键。
表结构中至少需要三个字段,如果想避免递归循环,那么需要四个字段。
1. id ,当前数据的唯一标识;
2. typename ,类型名称;
3. parentid , 当前类型的上一层父类型的id;
4. path , 其中存储当前类型的id和它所有父级类型的id。
这些id之间采用“-”隔开。
5. 当通过以下sql语句就可以实现,相同顶级类下的信息都在一起集中显示。
select * from 表名 where 条件 order by path;

23. * 常用的正则表达式写法:
中文:/^[\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~!@#$%^&(){}]*)$/

24.    *****Smarty缓存机制是什么?
Smarty缓存技术,可以将用户最终看到的页面缓存成一个静态的HTML页。
如果页面中开启了缓存,也就是smarty对象的caching属性为1或2,那么在smarty对象设定的            cache_lifetime期内,用户的WEB请求会被直接转到这个静态的HTML文件中来,这如同调用了一个静态HTML页面。
Apache访问一个html静态页面要比访问php页快2-10倍。引入了缓存技术,页面访问能提升25-100%的        性能。

Smarty的特点:
1.速度快;
2.采用编译方式,生成一个编译后文件。如果页面内容没有变动,无需再次编译,仅仅对有修改的模板        文件进行重新编译;
3.内建了高效的缓存技术。大大提高了页面的访问速度,减轻了服务器负担。
4.模板中可以使用if ... else 逻辑判断,页面处理很灵活。
5.可以自定义插件。例如可以通过自定义插件实现局部不缓存。