PHP笔试题和面试题

一、不用新变量直接交换现有两个变量的值javascript

(1)list($a,$b)=array($b,$a);
(2)a=a+b,b=a-b,a=a-b
二、PHP数字金额转大小格式,同时说明思路
function daxie($num){
      $da_num = array('零','一','二','三','四','五','六','七','八','九');
      $return = '';
      $len_num = strlen($num);
      if(!is_numeric($num) || $len_num < 0){
          return '';
      }
      for($i=0;$i<$len_num;$i++){
          $return .= $da_num[ substr($num,$i,1)];
      }
      return$return;
  }
3.SQL查询语句以下:
select * from table where (ID = 10) or (ID = 32) or (ID = 22) or (ID = 76) or (ID = 13) or (ID = 44)    让结果按10,32,22,76,13,44的顺序检索出来,请问如何书写?
select * from table
where id in (10,32,22,76,13,44)          
order by charindex(id,'10,32,22,76,13,44') desc

4.用PHP打印出前一天的时间,格式是2006-5-10 22:21:21php

(1)echo date('Y-m-d H:i:s',time()-60*60*24);
(2)echo date('Y-m-d H:i:s',strtotime('-1 day'))

5. echo(),print(),print_r()的区别css

echo是语言结构,无返回值;print功能和echo基本相同,不一样的是print是函数,有返回值;print_r是递归打印,用于输出数组或对象

6.可以使HTML和PHP分离开使用的模板html

PHP自己是一种模版引擎,我用过的是smarty,常见的还有PHPLib,FastTemplate,Savant

7.使用哪些工具进行版本控制?java

CVS和SVN,SVN号称下一代CVS,功能强大,不过CVS是老牌,市占率很高.CVS Server on Apache做服务端,WinCVS做客户端;<br>Subversion on Apache/DAV 作服务端,TortoiseSVN作客户端,或者Subclipse作客户端

8.如何实现字符串翻转?mysql

其实PHP自己就有字符串翻转的函数:strrev(),不过这种方法都不能解决中文字符串翻转的问题,会出错的。
<?php
function reverse($var){
$res="";
for($i=0,$j=strlen($var);$i<$j;$i++){
$res=$var[$i].$res;
}
return $res;
}
$tmpvar="wofang";
$res=reverse($tmpvar);
echo $res;
?>
9.优化MYSQL数据库的方法
(1).数据库设计方面,这是DBA和Architect的责任,设计结构良好的数据库,必要的时候,去正规化(英文是这个:denormalize),<br>    容许部分数据冗余,避免JOIN操做,以提升查询效率
(2).系统架构设计方面,表散列,把海量数据散列到几个不一样的表里面.快慢表,快表只留最新数据,慢表是历史存档.集群,主服务器Read & write,<br>    从服务器read only,或者N台服务器,各机器互为Master
(3).(1)和(2)超越PHP Programmer的要求了,会更好,不会不要紧.检查有没有少加索引
(4).写高效的SQL语句,看看有没有写低效的SQL语句,好比生成笛卡尔积的全链接啊,大量的Group By和order by,没有limit等等.<br>    必要的时候,把数据库逻辑封装到DBMS端的存储过程里面.缓存查询结果,explain每个sql语句
(5).所得皆必须,只从数据库取必需的数据,好比查询某篇文章的评论数,select count(*) … where article_id = ? <br>    就能够了,不要先select * … where article_id = ?而后msql_num_rows.
    只传送必须的SQL语句,好比修改文章的时候,若是用户只修改了标题,那就update … set title = ? where article_id = ?<br>    不要set content = ?(大文本)
(6).必要的时候用不一样的存储引擎.好比InnoDB能够减小死锁.HEAP能够提升一个数量级的查询速度

10.用PHP写出显示客户端IP与服务器IP的代码:jquery

echo '客户端IP:'.$_SERVER['REMOTE_ADDR'].'<br />';
echo '服务器端IP:'.gethostbyname($_SERVER['SERVER_NAME']);

11.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预约义变量(1)中;而连接到当前页面的URL记录在预约义变量(2)中。前执行脚本的绝对路径名(3),正在浏览当前页面用户的 IP 地址(4),查询(query)的字符串(URL 中第一个问号 ? 以后的内容):id=1&bi=2(5),当前运行脚本所在的文档根目录(6)。程序员

(1)$_SERVER['SCRIPT_FILENAME'];或者$_SERVER['PHP_SELF']<br>(2)$_SERVER['HTTP_REFERER']
(3)$_SERVER['SCRIPT_FILENAME'];<br>(4)$_SERVER['REMOTE_ADDR'];<br>(5)$_SERVER['QUERY_STRING'];<br>(6)$_server['DOCUMENT_ROOT'];

12.执行程序段 将输出__。web

(1)echo 8%(-2)。输出:0
(2)echo (-8)%3 .输出:-2
(3)echo 8%(-3).输出:2

13.数组函数 arsort 的做用是____;语句 error_reporting(2047)的做用是____。ajax

arsort:对数组进行逆向排序并保持索引关系
error_reporting(2047)的做用是:report All errors and warnings
14.写出一个正则表达式,过虑网页上的全部JS/VBS脚本(即把script标记及其内容都去掉):
$a="<script type='text/javascript'>XXXXXXXXXXXXXXX</script>";<br>echo preg_replace('/\<script[^>]*?>.*<\/script\>/is','',$a);
15.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句____动态装载PHP模块,

而后再用语句____使得Apache把全部扩展名为php的文件都做为PHP脚本处理。

LoadModule php5_module "c:/php/php5apache2.dll";
AddType application/x-httpd-php .php
16.类的属性能够序列化后保存到 session 中,从而之后能够恢复整个类,这要用到的函数是 
serialize() /unserialize()
17.MySQL数据库,怎么优化?

(1) 配置优化(服务器配置) (2)建表优化(表、字段设置) (3)查询优化(sql语句) 答: 一、选取最适用的字段属性,尽量减小定义字段长度,尽可能把字段设置NOT NULL,例如’省份,性别’,最好设置为ENUM 二、使用链接(JOIN)来代替子查询: 三、使用联合(UNION)来代替手动建立的临时表 四、事务处理: 五、锁定表,优化事务处理: 六、使用外键,优化锁定表 七、创建索引: 八、优化查询语句

18.数据库中的事务是什么? 

事务(transaction)是做为一个单元的一组有序的数据库操做。若是组中的全部操做都成功,则认为事务成功,即便只有一个操做失败,事务也不成功。若是全部操做完成,  事务则提交,其修改将做用于全部其余数据库进程。若是一个操做失败,则事务将回滚,该事务全部操做的影响都将取消。

19.如何修改SESSION的生存时间

方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache    

方法2:$savePath = "./session_save_dir/";          $lifeTime = 小时 * 秒; 

         session_save_path($savePath); 

         session_set_cookie_params($lifeTime);          session_start(); 

方法3:setcookie() and session_set_cookie_params($lifeTime); 

20.有一个网页地址, 好比PHP开发资源网主页: http://www.phpres.com/index.html,如何获得它的内容?

方法1(对于PHP5及更高版本): 
$readcontents = fopen("http://www.phpres.com/index.html", "rb");    $contents = stream_get_contents($readcontents);    fclose($readcontents);    echo $contents;    
方法2: echo file_get_contents("http://www.phpres.com/index.html"); 
21.谈谈asp,php,jsp的优缺点
ASP全名Active Server Pages,是一个WEB服务器端的开发环境, 利用它能够产生和运行动态的、交互的、高性能的WEB服务应用程序。ASP采用脚本语言VB Script(Java script )做为本身的开发语言。  
PHP是一种跨平台的服务器端的嵌入式脚本语言. 它大量地借用C,Java和Perl语言的语法 , 并耦合PHP本身的特性,使WEB开发者可以快速地写出动态生成页面.它支持目前绝大多数数据库。还有一点,PHP是彻底免费的,不用花钱,并且你能够不受限制地得到源码,甚至能够从中加进你本身须要的特点。  
JSP 是Sun公司推出的新一代站点开发语言,他彻底解决了目前ASP,PHP的一个通病-- 脚本级执行,Jsp 能够在Serverlet和JavaBean的支持下,功能强大。
三者都提供在 HTML 代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。 但JSP代码被编译成 Servlet 并由 Java 虚拟机解释执行,这种编译操做仅在对 JSP 页面的 第一次请求时发生。在 ASP 、PHP、JSP 环境下, HTML 代码主要负责描述信息的显示样式 ,而程序代码则用来描述处理逻辑。普通的 HTML 页面只依赖于 Web 服务器,而 ASP 、PH P、JSP 页面须要附加的语言引擎分析和执行程序代码。程序代码的执行结果被从新嵌入到  HTML 代码中,而后一块儿发送给浏览器。 ASP 、PHP、 JSP三者都是面向 Web 服务器的技术 ,客户端浏览器不须要任何附加的软件支持。
22.请说明php中传值与传引用的区别。何时传值何时传引用?
按值传递:函数范围内对值的任何改变在函数外部都会被忽略 
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改 
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来讲,这将会是一个代价很大的操做。 
按引用传递则不须要复制值,对于性能提升颇有好处。
23.JS的转向函数是?怎么引入一个外部JS文件?
window.location.href,<script type="text/javascript" src="js/js_function.js"></script>
24.GD库是作什么用的? 
gd库提供了一系列用来处理图片的API,使用GD库能够处理图片,或者生成图片。     在网站上GD库一般用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
=================================================================================================
  1. 咱们在使用哪一个版本的 PHP
  2. PHP 标签有那些?
  3. 在一个纯 PHP 文件(例如,仅包含一个类定义的文件)中包含一个关闭?>标签时,确保其后不会跟着任何换行。 说说你的理解。
  4. 自动加载类,有那些方法?
  5. 单引号和双引号有什么异同?
  6. define() vs. Const ?
  7. 有多种方式来配置一个 web 服务器以提供 PHP 服务。你知道哪几种?
  8. 净化 HTML 输入和输出,如何处理?
  9. PHP 中的UTF-8,你有什么认识?
  10. php处理日期和时间方式?
=================================================================================================
1.写一个function实现数组内每一个元素之间加法的迭代运算,注意:数组元素所有为天然数。例子:$data=array(1.2.3);程序要求打印出数组每一个数组元素相互之间各类可能性加法(包括元素本身自己加法)1+1=2,1+2=3,1+3=4,2+2=4,2+3=5,3+3=6
2.一个小孩买了价值小于1美圆的糖,并将1美圆的钱交给售货员。售货员但愿用数目最少的硬币个数找给小孩。假设提供的数目不限的面值为25美分,10美分,5美分,1美分的硬币,写一个算法让售货员用最少的硬币个数找给小孩。
3.有10名新员工,按其应聘成绩排名1到10,并用10个连续四位天然数依次做为他们的工号。其每一个人的工号都能被他们的成绩排名整除,问他们的工号分别是什么?
=================================================================================================
1. 变量如何定义?如何检查变量是否认义?如何删除一个变量?判断一个变量是否为空的函数?
isset() unset() empty()
2. 什么是可变变量?
 一个变量的变量名能够动态的设置和使用。 $a = 'hello' , $$a = 'world', ${$a}=hello world
3. 变量赋值方式有哪几种?
1)直接赋值 2)变量间赋值 3)引用赋值
4. 引用和拷贝有什么区别?
拷贝是将原来的变量内容复制下来,拷贝后的变量与原来的变量使用各自的内存,互不干扰。 引用至关因而变量的别名,其实就是用不一样的名字访问同一个变量内容。当改变其中一个变量的值时,另外一个也跟着发生变化。
5. php中变量有哪些基本数据类型?
php支持8种原始数据类型。 包括: 四种标量类型(布尔型boolean,整型interger,浮点型float/double , 字符串string) 两种复合类型(数组array , 对象object) 两种特殊类型(资源resource,NULL)
6. 其它类型转换为boolean类型时,哪些被认为是false?
 布尔值false,整型值0, 浮点型值0.0, 空白字符串, 字符串'0', 空数组,特殊数据类型NULL, 没有设定的变量。
empty()函数在哪些状况下返回true?  
布尔值false, 整型值0, 浮点型值0.0, 空白字符串, 字符串'0', array()空数组, 特殊数据类型NULL, 没有任何属性的对象, 没有赋值的变量。
7. 若是定义了一个变量$a ,可是没有赋初始值 那么$a==0吗? $a==false吗? $a==''吗? $a==NULL吗? $a===NULL吗?
 答:echo=>什么都没有 , var_dump=>NULL empty($b)==true吗?———————————— echo=>1 , var_dump=>bool(true) 此时若是输出$a++是多少?——————— echo=>什么都没有 , var_dump=>NULL 若是输出++$a又是多少?————————— echo=>1  , var_dump=>int(1)
8. 字符串怎么转成整数,有几种方法?怎么实现?
 强制类型转换: (整型)字符串变量名; 直接转换:settype(字符串变量,整型); intval(字符串变量);
9. 标量数据和数组的最大区别是什么?
一个标量只能存放一个数据,而数组能够存放多个数据。
10. 常量如何定义? 如何检测一个常量是否被定义?常量的值只能是哪些数据类型?
define()//定义常量 , defined()//检查常量是否认义 常量的值只能是标量类型的数据。
11. 常量分为系统内置常量和自定义常量。请说出最多见的几个系统内置常量?
__FILE__ , __LINE__ , PHP_OS , PHP_VERSION
12. 若是定义了两个相同的常量,前者和后者哪一个起做用?
前者起做用,由于常量一旦定义就不能被从新定义或者取消定义。
13. 常量和变量有哪些区别?
1)常量前没有$符号; 2)常量只能经过define()定义,而不能经过赋值语句定义; 3)常量能够在任何地方定义和访问,而变量有全局和局部之分; 4)常量一旦定义就不能被从新定义或者取消定义,而变量而经过赋值方式从新定义; 5)常量的值只能是标量数据,而变量的数据库类型有8种原始数据类型。
14. PHP中经常使用的几个预约义的全局数组变量是哪些?
有9大预约义的内置数组变量: $_POST, $_GET, $_REQUEST, $_SESSION, $_COOKIE, $_FILES,$_SERVER, $_ENV, $GLOBALS
15. 在实际开发中,常量最经常使用于哪些地方?
 1)链接数据库的信息定义成常量,如数据库服务器的用户名、密码、数据库名、主机名; 2)将站点的部分路径定义成常量,如web绝对路径,smarty的安装路径,model、view或者controller的文件夹路径; 3)网站的公共信息,如网站名称,网站关键词等信息。
16. 函数的优越性有哪些?
提升程序的可维护性        提升软件的可靠性        提升程序的可重用性        提升程序的开发效率
17. 如何定义一个函数?函数名区分大小写吗?
1)使用 function 关键字; 2)函数命名规则和变量同样,以字母或者下划线开头,而不能以数字开头; 3)函数名不区分大小写; 4)函数名不可使用已经声明过的或者系统自建的函数名称。
18. 什么是变量的能见度 或者 说是变量做用域?
就是变量在程序中的可做用范围。根据变量的能见度,变量分为局部变量和全局变量。
19. 什么是局部变量和全局变量?函数内是否能够直接调用全局变量?
局部变量是函数内部定义的变量,其做用域是所在的函数。若是函数外还有一个跟局部变量名字同样的变量, 程序会认为它们两个是彻底不一样的两个变量。当退出函数的时候,其中的局部变量就同时被清除。 全局变量是定义在全部函数之外的变量,其做用域是整个php文件,可是在用户自定义的函数内部是没法使用的。 若是必定要在用户自定义的函数内部使用全局变量,那么就须要使用global关键字声明。 也就是说若是在函数内的变量前加上golbal来修饰,那么函数内部就能够访问到这个全局变量, 不只能够利用这个全局变量进行运算并且能够对这个全局变量进行从新赋值。 全局变量还可使用 $GLOBALS['var'] 来调用。
20. global关键词如何使用?预约义的全局变量数组$GLOBALS如何使用?
Global的做用是定义全局变量,可是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的全部文件。 
在 $GLOBALS 数组中,每个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS 之因此在全局范围内存在,是由于 $GLOBALS 是一个超全局变量。global 也就是说在一个文件里 只要你声明为global $db 那么在声明的下面 你就能够引用这个$db了。 
21. 什么是静态变量?
若是一个函数内定义的变量前使用关键字static来声明,那么该变量就是静态变量。 通常函数内的变量在函数调用结束后,其存储的数据将被清除,所占的内存空间也被释放。而使用静态变量时, 该变量会在函数第一次被调用时被初始化,初始化后该变量也不会被清除,当再次调用该函数时,这个静态变量 再也不被初始化,而能保存上次函数执行完后的值。能够说静态变量在全部对该函数的调用之间共享。
22. php中函数传递参数的方式有哪些?二者有什么区别?
按值传递和按地址传递(或按引用传递) (1)按值传递:  待传递的变量,与传递给函数以后的变量是存储在不一样的空间中。因此函数体内对 该变量值作的修改,不影响本来的变量值。   (2)按地址传递: 使用 & 符号,代表该参数是以地址的方式传递值。并不会将主程序中的指定数值或目标变量传递给函数,而是把该数值或变量的内存储存区块地址导入函数之中,因此函数体内的该变量和主程序中的该变量在内存 中是同一个。函数体作的修改,直接影响到函数体外部的该变量的值。
23. 什么是递归函数?如何进行递归调用?
递归函数其实就是调用自身的函数,可是必须知足如下两个条件: 1)在每一次调用自身时,必须是更接近于最终结果; 2)必须有一个肯定的递归终止条件,不会形成死循环。  
24. 判断一个函数是否存在?   
 function_exists( string $function_name )  若是存在,返回true, 不存在则返回 false。
25. func()和@func()之间有什么区别?
第二个函数调用失败不会报错,第一个会报错
26. include()和require()函数的用法和区别是什么?include_once()和require_once()呢?
 include和require出现错误后的错误级别不同 include_once()和require_once()在加载以前要判断是否已经导入
27. 说出前置++和后置++的区别?
前置++是先将变量增长1,而后在将值赋值给原来的变量; 后置++是先返回变量的当前值,而后再将变量的当前值增长1.
28. 字符串运算符“.”与算术运算符“+”有什么区别?
 当“a”“b”之间使用.时认为是连字符。若是二者间是+的时候php会认为是一次运算。 1)若是+号两边的字符串是数字组成的,那么会将字符串自动转为整型; 2)若是+号两边是纯粹的字母,那么会输出0; 3)若是+号两边的字符串是以数字开头的,那么会截取字符串开头的数字,而后进行运算。
29. 什么是三目(或三元)运算符?
根据一个表达式的结果在另两个表达式中选择一个。 例如: ($a==true) ? 'good':'bad';
30. 控制流程语句有哪些?
1:三种程序结构    顺序结构、分支结构、循环结构 2:分支: if/esle/esleif/     switch/case/default 3: switch 须要注意的: case子句中的常量能够是整型、字符串型常量、 或者常量表达式,不容许是变量。   同一个switch子句中,case的值不能相同,不然只能取到首次出现case中的值。 4: 循环  for while   do...while  do...while 后面必须加入分号结尾。  while 和 do...while 的区别 5:break 和 continue 的区别。 break能够终止循环。 continue没有break强大,只能终止本次循环而进入到下一次循环中。
31. 数组的概念是什么?数组根据索引分为哪两种,如何区分?数组的赋值方式有哪两种?
数组是一个能够存储一组或一系列数值的变量(复合型变量) 索引数组(索引值为数字,以0开始)和关联数组(以字符串做为索引值) 数组的赋值方式有哪两种? 数组的声明方式主要有两种。 1.经过array()函数声明数组; 能够经过key=>value的方式分别定义索引和值,也能够不定义数组的索引下标,只给出数组的元素值。 2.直接为数组元素赋值,不须要调用array()函数。例如: $arr[0] = 1; $arr[1] = 2; 特别注意: 数组的下标若是是等价于整数的字符串值(但不能以0开头),则会被看成整数对待。   例如: $array[3] 与  $array['3'] 引用的是相同的一个元素,而 $array['03'] 引用的则就是另外的一个元素了。
32.数组如何遍历?
①for循环 ②foreach循环 用法以下:foreach($arr as $key=>$value){} ③list each 和while 配合起来循环
33. foeach数组的时候指针是如何指向的?list()/each()/while()循环数组的时候指针如何指向的呢?
当foreach开始执行的时候,数组内部的指针会自动指向第一个单元。由于foreach所操做的是指定数组的拷贝,而不是该数组自己。 而each()一个数组后,数组指针将停留在数组中的下一个单元或者碰到数组结尾时停留在最后一个单元。若是要再次使用each()遍历数组,必需要使用reset(). reset()将数组的内部指针倒回到第一个单元并返回第一个数组单元的值。
34. 如何计算数组长度(或者说计算数组中全部元素的个数)?字符串怎么取长度?
count() -- 计算数组中的元素个数。 可使用count(数组名)或者count(数组名,1),若是有第二个参数,而且是数字1,则表示递归统计数组元素的个数。 若是第二个参数是数字0,则等同于只有一个参数的count()函数。 sizeof() -- count() 的别名 字符串:strlen()、mb_strlen();
35. 数组中相关的经常使用函数有哪些?
 1) count --(sizeof别名)— 计算数组中的单元数目或对象中的属性个数   例如:int count ( mixed $var [, int $mode ] )  $var 一般都是数组类型,任何其它类型都只有一个单元。  $mode 默认值为0. 1为开启递归地对数组计数 2) in_array ( mixed $needle , array $haystack [, bool $strict ] ) — 检查数组中是否存在某个值。 若是 needle 是字符串,则比较是区分大小写的。 若是第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同。 3) array_merge(array $array1 [, array $array2 [, array $... ]] ) 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回做为结果的数组。 特别注意:若是输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,若是数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。 若是只给了一个数组而且该数组是数字索引的,则键名会以连续方式从新索引 4) 数组与字符串之间的转换 (1)explode ( string $separator , string $string [, int $limit ] )  使用一个分隔字符来分隔一个字符串。 (2)implode ( string $glue , array $arr )  使用一个链接符将数组中的每一个单元链接为一个字符串。 join 为 implode 的别名 5) sort(array &$array [, int $sort_flags ]) — 对数组按照值排序,当本函数结束时数组单元将被从最低到最高从新安排。
36. 数组合并函数array_merge()和数组加法运算$arr + $arr2 的区别是什么?
array_merge()->使用array_merge(),若是是关联数组合并,若是数组的键名相同,那么后面的值将覆盖前者;若是是数字索引数组合并,则不覆盖,而是 后者附加到前者后面。 "+"->使用数组加法运算,与array_merge()不一样,加法运算无论是关联数组仍是数字索引数组,都是将相同键名的的值舍弃, 也就是只保留首次出现该键名的元素,后来的具备相同键名的元素都不会被加进来。
37. 字符串定义的时候单引号和双引号有什么区别?
” ” 双引号里面的字段会通过编译器解释,而后再看成HTML代码输出。
‘ ‘ 单引号里面的不进行解释,直接输出。
38. echo(),print(),print_r()的区别?
(1)echo 是语法,Output one or more strings,没有返回值; (2)print 是函数,不能输出数组和对象,Output a string,print有返回值; (3)print_r 是函数,能够输出数组。print_r是个比较有意思的函数,能够输出stirng、int、float、 array、object等,输出array时会用结构表示,print_r输出成功时返回true;并且print_r能够经过print_r($str,true)来,使print_r不输出而返回print_r处理后的值。此外,对于echo和print,基本以使用echo居多,由于其效率比print要高。
=================================================================================================
39. 按照功能分类说说都有哪些字符串处理函数?这些函数的做用是什么?
A. 字符串输出函数 (1)echo $a,$b,$c......;  是一个语言结构,而不是一个真正的函数。 (2)print($a)    本函数输出字符串。若成功则返回 1,失败返回 0 (3)print_r($a) (4)var_dump($a); 能输出类型、长度、值 B. 去除字符串首尾空格的函数: trim  ltrim  rtrim(别名:chop)   使用第二个参数,还能够去除指定的字符。 C. 转义字符串函数:addslashes() D. 获取字符串长度的函数:strlen() E. 截取字符串长度的的函数:substr() F. 检索字符串函数: strstr() , strpos() G. 替换字符串函数:str_replace()
40. 请给出如下问题的正确答案? 
 1).$arr = array('james', 'tom', 'symfony');请将$arr数组的值用’,’分割并合并成字符串输出? echo implode(‘,’,$arr); 2).$str = ‘jack,james,tom,symfony’; 请将$str用’,’分割,并把分割后的值放到$arr数组中? $arr = explode(‘,’,$str); 3).$arr = array(3,7,2,1,’d’,’abc’); 请将$arr按照从大到小的顺序排序,并保持其键值不变? arsort($arr); print_r($arr); 4).$mail = “gaofei@163.com”; 请将此邮箱的域(163.com)取出来并打印,看最多能写出几种方法? echo strstr($mail,'163'); echo substr($mail,7); $arr = explode("@",$mail); echo $arr[1]; 5). 若是有一个字符串,该字符串是“123,234,345,”。请问如何切割掉这个字符串最后一个逗号? 6). 获取随机数的函数有哪几个?mt_rand() 和 rand()哪一个执行速度快?
41.页面字符出现乱码,怎么解决?
1.首先考虑当前文件是否是设置了字符集。查看是否是meta标签中写了charset,若是是php页面还能够看看是否是 在header()函数中指定了charset; 例如: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> header(“content-type:text/html;charset=utf-8”); 2.若是设置了字符集(也就是charset),那么判断当前文件保存的编码格式是否跟页面设置的字符集保持一致, 二者必须保持统一; 3.若是涉及到从数据库提取数据,那么判断数据库查询时的字符集是否跟当前页面设置的字符集一致,二者必须统一, 例如:mysql_query(“set names utf8”)。
42. 正则表达式是什么?php中有哪些经常使用的跟正则相关的函数?请写出一个email的正则,中国手机号码和座机号码的正则表达式?
正则表达式是用于描述字符排列模式的一种语法规则。正则表达式也叫作模式表达式。 网站开发中正则表达式最经常使用于表单提交信息前的客户端验证。 好比验证用户名是否输入正确,密码输入是否符合要求,email、手机号码等信息的输入是否合法。 在php中正则表达式主要用于字符串的分割、匹配、查找和替换操做。 preg系列函数能够处理。具体有如下几个: string preg_quote ( string str [, string delimiter] ) 转义正则表达式字符 正则表达式的特殊字符包括:. \\ + * ? [ ^ ] $ ( ) { } = ! < > | :。 preg_replace -- 执行正则表达式的搜索和替换 mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] ) preg_replace_callback -- 用回调函数执行正则表达式的搜索和替换 mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit] ) preg_split -用正则表达式分割字符串 array preg_split ( string pattern, string subject [, int limit [, int flags]] )
43. 若是想过滤掉某个字符串中全部的html标记使用哪一个函数?
好像是用strip_tags函数吧
 
44. preg_replace()和 str_ireplace()两个函数在使用上有什么不一样?preg_split()和split()函数如何使用?
str_replace:这个应该做为字符串替换的首选方法,不过有一点须要注意,就是把最但愿匹配的元素放在前面。
strtr: strtr在短字符串替换的时候也是挺高效的,不过search数组的下标长度的差异也对效率产生比较大的影响,还有就是没事最好不要使用strtr(string, string, string)这种形式(对于非单字节字符很容易产生乱码)。
preg_replace:这个不用说,可使用正则匹配,功能绝对是最强的,不过也是要牺牲一点效率的。

45. 获取当前时间戳的函数主要有哪些?用PHP打印出今天的时间,格式是2010-12-10 22:21:21? 用PHP打印出前一天的时间格式是2010-12-10 22:21:21?如何把2010-12-25 10:30:25变成unix时间戳?
echo date ("Y-m-d H:i:s" ,strtotime(‘-1,days’)); date('Y-m-d H:i:s',time()); $unix_time = strtotime("2009-9-2 10:30:25");//变成unix时间戳 echo date("Y-m-d H:i:s",$unix_time);//格式化为正常时间格式
46. 在url中用get传值的时候,若中文出现乱码,应该用哪一个函数对中文进行编码? 用户在网站表单提交数据的时候,为了防止脚本攻击(好比用户输入<script>alert(111);</script>),php端接收数据的时候,应该如何处理?
使用urlencode()对中文进行编码,使用urldecode()来解码。 使用htmlspecialchars($_POST[‘title’])来过滤表单传参就能够避免脚本攻击。
47. 链接数据库操做的步骤是什么?每一步的返回值是什么数据类型?尤为是mysql_query()返回什么数据类型?
 

$conn=mysql_pconnect("localhost","root","123456");//打开链接
mysql_select_db("数据库名",$conn);//链接到指定的数据库
mysql_query("set names utf8");//设置字符编码
$sql="";
$R=mysql_query($sql);//执行SQL语句返回结果集
while($v=mysql_fetch_array($R)){
echo "字段名".$v['title'];
}

mysql_query()若是里面放的是查询之类的语句,那返回的是资源,说白了就是你要查的数据结果集;若是里面放的是增删改之类的语句,那返回的是true或者false了。
 
48. 说说mysql_fetch_row() 和mysql_fetch_assoc()和mysql_fetch_array之间有什么区别?
第一个是返回结果集中的一行做为索引数组,第二个是返回关联数组,而第三个既能够返回索引数组也能够返回关联数组,取决于它的第二个参数 MYSQL_BOTH MYSQL_NUM  MYSQL_ASSOC 默认为MYSQL_BOTH $sql =”select * from table1”; $result = mysql_query($sql); mysql_fetch_array($result, MYSQL_NUM);
49. 请说出目前学过的返回是资源的函数?
答: mysql_connect(); mysql_query();只有这执行select的时候成功,才返回资源,失败返回FALSE fopen();
50. 略
51. 文件上传须要注意哪些细节?怎么把文件保存到指定目录?怎么避免上传文件重名问题?
1.首现要在php.ini中开启文件上传; 2.在php.ini中有一个容许上传的最大值,默认是2MB。必要的时候能够更改; 3.上传表单必定要记住在form标签中写上enctype="multipart/form-data"; 4. 提交方式 method 必须是 post; 5. 设定 type="file" 的表单控件; 6.要注意上传文件的大小MAX_FILE_SIZE、文件类型是否符合要求,上传后存放的路径是否存在。 能够经过上传的文件名获取到文件后缀,而后使用时间戳+文件后缀的方式为文件从新命名,这样就避免了重名。 能够本身设置上传文件的保存目录,与文件名拼凑造成一个文件路径,使用move_uploaded_file(),就能够完成 将文件保存到指定目录。
52. $_FILES是几维数组?第一维和第二维的索引下标分别是什么?批量上传文件的时候须要注意什么?
二维数组。第一维是上传控件的name,二维下标分别为name/type/tmp_name/size/error.
53. header()函数主要的功能有哪些?使用过程当中注意什么?
使用header函数进行跳转页面,header(‘Location:’.$url);使用header声明content-type,header(‘content-type:text/HTML;charset=utf-8′);使用header返回response 状态码,例如:header(‘HTTP/1.1 404 Not Found’);使用header在某个时间后执行跳转,header(“Refresh: {$delay}; url={$url}”),其中$delay就是推迟跳转的时间,$url为须要跳转的url;使用header控制浏览器缓存;执行http验证,header(‘HTTP/1.1 401 Unauthorized’),header(‘WWW-Authenticate: Basic realm=”Top Secret”‘);使用header进行下载操做;
54. 文件下载的时候如何使用header()函数?
header("content-type: application/octet-stream;charset=UTF-8"); //在这里加utf-8和在上面定义有什么区别?
   header("accept-ranges: bytes");            header("accept-length: ".filesize($filedir.$filename));            header("content-disposition: attachment; filename=".$filedir.$filename);
55. 什么是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中的一个对象。
56. jquery是什么?jquery简化ajax后的方法有哪些?
jQuery是Javascript的一种框架。 $.get(),$.post(),$.ajax()。$是jQuery对象的别名。
 代码以下: $.post(异步访问的url地址 , {'参数名' : 参数值} , function(msg){ $("#result").html(msg); }); $.get(异步访问的url地址 , {'参数名' : 参数值} , function(msg){ $("#result").html(msg); }); $.ajax({ type: "post", url: loadUrl, cache:false, data: "参数名=" + 参数值, success: function(msg) { $("#result").html(msg); } });
57. 什么是会话控制?
简单地说会话控制就是跟踪和识别用户信息的机制。会话控制的思想就是可以在网站中跟踪一个变量,经过这个变量, 系统能识别出相应的用户信息,根据这个用户信息能够得知用户权限,从而展现给用户适合于其相应权限的页面内容。 目前最主要的会话跟踪方式有cookie,session。
58. 会话跟踪的基本步骤
1).访问与当前请求相关的会话对象 2).查找与会话相关的信息 3).存储会话信息 4).废弃会话数据
59. 使用cookie的注意事项有哪些?
1) setcookie()以前不能够有任何页面输出,就是空格,空白行也不能够; 2) setcookie()后,在当前页面调用$_COOKIE['cookiename']不会有输出,必须刷新或到下一个页面才能够看到cookie值; 3) 不一样的浏览器对cookie处理不一样,客户端能够禁用cookie,浏览器也能够闲置cookie的数量,一个浏览器能建立的cookie数量最多300个,而且每一个不能够超过4kb, 每一个web站点能设置的cookie总数不能超过20个。 4) cookie是保存在客户端的,用户禁用了cookie,那么setcookie就不会起做用了。因此不能够过分依赖cookie。
60. 使用session的时候,经过什么来表示当前用户,从而与其余用户进行区分?
sessionid,经过session_id()函数能够取得当前的session_id。
61. session和cookie的使用步骤分别是什么?什么是sesssion和cookie的生命周期?session和cookie的区别是什么?
cookie是保存在客户端机器的,对于未设置过时时间的cookie,cookie值会保存在机器的内存中,只要关闭浏览器则 cookie自动消失。若是设置了cookie的过时时间,那么浏览器会把cookie以文本文件的形式保存到硬盘中, 当再次打开浏览器时cookie值依然有效。 session是把用户须要存储的信息保存在服务器端。每一个用户的session信息就像是键值对同样存储在服务器端, 其中的键就是sessionid,而值就是用户须要存储信息。服务器就是经过sessionid来区分存储的session信息是 哪一个用户的。 二者最大的区别就是session存储在服务器端,而cookie是在客户端。session安全性更高,而cookie安全性弱。 session在web开发中具备很是重要的分量。它能够将用户正确登陆后的信息记录到服务器的内存中,当用户以此身份 访问网站的管理后台时,无需再次登陆便可获得身份确认。而没有正确登陆的用户则不分配session空间,即使输入了 管理后台的访问地址也不能看到页面内容。经过session肯定了用户对页面的操做权限。
使用session的步骤: 1. 启动session: 使用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或小于当前时间戳。
=================================================================================================
62. 如何设置一个cookie的名字为username,值为jack,而且让此cookie一周后失效? 一个浏览器最多能够产生多少个cookie,每一个cookie文件最大不能超过多少?
setcookie(‘username’,’jack’,time()+7*24*3600); 最多能够产生20个cookie,每一个最多不超过4K
63. 设置或读取session以前,须要作什么?
能够直接在php.ini中开启session.auto_start = 1或者在页面头部用session_start(); 开启session,session_start()前面不能有任何输出,包括空行。
64. 在实际开发中,session在哪些场合使用?
session用来存储用户登陆信息和用在跨页面传值。 1)经常使用在用户登陆成功后,将用户登陆信息赋值给session; 2)用在验证码图片生成,当随机码生成后赋值给session。
65. 注销session会话的形式有几种?
unset() $_SESSION=array(); session_destroy();
66. 什么是OOP?什么是类和对象?什么是类属性?
OOP(object oriented programming),即面向对象编程,其中两个最重要的概念就是类和对象。属性和方法的集合就造成了类,类是面向对象编程的核心和基础, 经过类就将零散的用于实现某个功能的代码有效地管理起来了。 类只是具有了某些功能和属性的抽象模型,而实际应用中须要一个一个实体,也就是须要对类进行实例化, 类在实例化以后就是对象。类是对象的抽象概念,对象是类的实例化。 OOP具备三大特色:1. 封装性(又叫作隐藏性);2. 继承性; 3. 多态性。 OOP的优势:一、代码重用性高(省代码) 二、使程序的可维护性高(扩展性) 三、灵活性
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会自动生成一个,这个自动生成的构造方法没有任何参数, 没有任何操做。析构方法的做用和构造方法正好相反,是对象被销毁时被自动调用的,做用是释放内存。 析构方法的定义方法为:__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. 略
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做为程序的单点入口,固然这个是能够由你本身任意控制的。 单点入口有几大好处:第1、一些系统全局处理的变量,类,方法均可以在这里进行处理。好比说你要对数据进行初步的过滤,你要模拟session处理,你要定义一些全局变量,甚至你要注册一些对象或者变量到注册器里面。第2、程序的架构更加清晰明了。
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. 略
10四、访问权限修饰符有哪几种,对比解释
一、public 表示公共的,在本类中和子类中以及类外,能够对其调用;  二、protected表示受保护的,能够在本类中和子类中调用;  三、private表示私有的,只能在本类中调用;  四、var,效果等同于public
10五、Class关键词前能够有哪些修饰词
a) Final修饰,表示该类是最终的,没法继承;  b) Abstract修饰,表示该类是抽象类
10六、做用域操做符在那些场合下使用
做用于操做符的使用场合 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)
10七、$this,self, parent分别表明什么?哪些场合下使用
答:$this表明的是当前对象 self表明的是当前的类 parent表明的是当前类的父类 使用场合: $this只能使用在当前类中,经过$this->能够调用当前类中的属性和方法; self只能在当前类中使用,经过做用域操做符::访问当前类中的类常量、当前类中的静态属性、当前类中的方法; parent只能使用在有父类的当前类中,经过做用域操做符::访问父类中的类常量、父类中的静态属性、父类中的方法。
10八、说明是接口、抽象类两者有何相同和不一样的地方?
一、接口是帮助php实现功能意义上的多继承的,用interface来声明,其方法没有方法体,使用implemens关键词来实现接口。 接口中只能包含抽象方法和类常量,不能够包含成员属性。 
二、抽象类是一种不能被实例化的类,只能做父类,用abstract class来定义,抽象类和普通类能够没有区别,类中能够包含成员属性、类常量、方法。 子类得用extends来继承,并且只能是单继承。 二者相同点是都不能够被实例化,都是须要被继承才可使用。 二者的最大区别是接口能够实现多继承,而抽象类只能是单继承。 接口中不能包含成员属性,而抽象类中能够有成员属性。 接口中的抽象方法必须是public或者无访问修饰词,接口中的抽象方法不能用abstract来修饰。 抽象类中的方法能够是普通方法,也能够是抽象方法,若是是抽象方法,必定须要使用abstract来修饰。
10九、解释PHP中单例模式?
又叫作单态模式、单元素模式、singleton pattern。 单例模式指在PHP的应用程序的范围内只对指定的类建立一个实例。使用单例模式的类称为单例类。 在php中单例类必需要有一个私有的构造方法,还要有一个私有的魔术克隆方法(该方法体中为空) 和一个私有的静态的成员属性$_instance. 私有构造方法防止除自身之外的类来实例化它。私有的方法体为空的克隆方法防止该类被克隆。 $_instance用来存储被自身实例化后的对象。 还必需要有一个公共的静态的方法getInstance()。该方法返回已经存储了实例对象的$_instance。
1十、什么是SQL注入?
SQL注入攻击是黑客对数据库进行攻击的经常使用手段之一。一部分程序员在编写代码的时候, 没有对用户输入数据的合法性进行判断,注入者能够在表单中输入一段数据库查询代码并提交, 程序将提交的信息拼凑生成一个完整sql语句,服务器被欺骗而执行该条恶意的SQL命令。注入者根据程序返回的结果, 成功获取一些敏感数据,甚至控制整个服务器,这就是SQL注入。
1十一、如何防止SQL注入?
要对提交的信息进行过滤,对单引号进行转义。 首先能够在php.ini中设置,让全部的单引号在提交后都进行转义。或者使用addslashes().
1十二、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 
11三、$_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。
11四、什么是多条件查询(复合查询),如何实现多条件查询? 如何实现万能查询呢?
查询的时候要填写查询条件,这些条件会经过表单进行提交。 首先须要检查提交的条件是否为空。若是不为空,就认为这个值是要被看成条件, 咱们就可使用字符串链接的方式来组合一个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;
12一、如何在smarty模板语言中使用php代码?
借助于两个smarty内建函数。 1. inluce_php 函数用于在模板中包含 php 脚本。例如: {include_php file="test.php"} 2. php 标签容许在模板中直接嵌入 php 脚本。例如: {php} echo "这个是php内建函数的做用"; {/php}
12二、请列出至少五个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(‘’)} ,格式化时间戳。
12三、写程序实现以下功能:
a.如何判断一个字符串中是否存在一个字符? echo strstr('abcdefgcd'  , 'cd'); echo strpos('ab0defgcd'  , 'cd'); b.如何判断一个字符串中一个字符出现的次数? echo substr_count('abcdefgcd'  , 'cd'); c.如何去掉一个字符串的最后一个字符 echo substr('abcdefgcd'  , 0 ,  -1);
12四、请说明smarty中fetch方法的功能?
Fetch方法能够获取到页面全部的内容,而且赋值到一个变量中。 若是第四个参数为true,则等同于display,直接输出到浏览器中。 若是第四个参数为false,则不输出。 Display方法就是第四个参数为true的fetch方法。 Display = Fetch() + echo() 
12五、经常使用的正则表达式写法:
中文:/^[\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~!@#$%^&(){}]*)$/
=================================================================================================
相关文章
相关标签/搜索