当前位置:Gxlcms > PHP教程 > php面试题(高级部分)

php面试题(高级部分)

时间:2021-07-01 10:21:17 帮助过:24人阅读

一、HTML + CSS部分

1. 请说明 HTML 文档中 DTD 的意义和作用(酷讯)

DTD,文档类型定义,是一种保证 html 文档格式正确的有效方法,在解析网页时,浏
览器将使用 DTD 来检查页面的有效性(是否符合规范,元素和标签使用是否正确)并且采
取相应的措施。同时它还会影响浏览器的渲染模式(工作模式)。

2. 准确的指出以下代码的显示结果(酷讯)
        

显示效果

3. 指出以下代码的显示结果(酷讯)
a d
b
c

显示效果

4. 如何产生带有数字列表符号的列表?( )

A.


    B.

    C.

      D.
      答案:C

      5. 如何显示没有下划线的超链接?()

      A. a {text-decoration:none}
      B. a {text-decoration:no underline}
      C. a {underline:none}
      D. a {decoration:no underline}
      答案:A

      6. 以下一段 XHTML 代码片段,它不符合 W3C 规范,请问出现了几处错误?
          
      • 印度总理辛格访华专题
        • 专访辛格:早日解决边界问题是战略目标
        • 辛格称北京奥运将为印度举办赛事提供灵感
        • 印度总理辛格访华参观北京奥运场馆建设

      有两处,div 和 ul 有一个相同的 id 属性 newsmore,img 标签没有关闭。

      7. 请描述出两点以上 XHTML 和 HTML 最显著的区别

      (1).XHTML 必须强制指定文档类型 DocType,HTML 不需要
      (2).XHTML 所有标签必须闭合,HTML 比较随意
      (3).XHTML 严格区分大小写,所有标签的元素和属性的名字都必须使用小写
      (4).XHTML 要求所有的标记都必须要有一个相应的结束标记
      (5).XHTML 规定所有属性都必须有一个值,没有值的就重复本身

      8. 请问,div 和 span,p 标签三者间的区别(YG)

      从语义化的角度来讲:div和span标签对于它们包含的元素是没有意义的,所以div 和 span 一般是用来布局。;而p标签则是一个语义化标签,表示一个段落。
      从显示的角度来讲:span 是内联的,用在一小块的内联 HTML 中,前后不断行;div 元
      素是块级的,等同于其前后有断行;p 元素是块级的,前后断行,而且还要再隔一行,相当
      于断两行。

      9. CSS 中 class 和 id 的区别(YG)

      id:每个页 ID 是唯一的不能重复。
      class:可以设置多个 class 为同一个值。

      10. 请列举几个 meta 元素(YG)
       //向搜索引擎说明你的网页的关键词 //告诉搜索引擎你的站点的主要内容 //告诉搜索引擎你的站点的制作的作者 //指定字符集 //定时让网页在指定的时间 n 内跳转 //可以用于设定网页的到期时间,一旦过期则必须到服务器上重新调用。需要注意的是必须使用 GMT 时间格式 //禁用缓存 //cookie 设定,如果网页过期,存盘的 cookie 将被删除。需要注意的也是必须使用 GMT 时间格式
      11. 怪异模式和 XHTML 模式下 IE 的宽的区别(YG)

      所谓的标准模式是指,浏览器按 W3C 标准解析执行代码;怪异模式则是使用浏览器自己的方式解析执行代码,因为不同浏览器解析执行的方式不一样,所以我们称之为怪异模式。
      浏览器解析时到底使用标准模式还是怪异模式,与你网页中的 DTD 声明直接相关,DTD声明定义了标准文档的类型(标准模式解析)文档类型,会使浏览器使用相应的方式加载网页并显示,忽略 DTD 声明,将使网页进入怪异模式(quirks mode)。
      在 XHTML 模式下,声明一个元素的宽度,仅仅指的是在 css 中设置的 width,而在怪异模式下,元素的宽度包括 width 和 padding。

      12. 实现框架的标签,使用举例(YG)
                  
      13. 请写出以下 html 标签的含义:input form script style table b img (小米)

      标签用于搜集用户信息。根据不同的 type 属性值,输入字段拥有很多种形式。
      输入字段可以是文本字段、复选框、掩码后的文本控件、单选按钮、按钮等等。
      4. 有下面语句:编写代码,当鼠标划过文本框,自动选中文本框中的内容。(百度)

      5. 设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口关闭,而输入的信息却在主网页中显示。(新浪)

      主窗口:

      新窗口

      弹出窗口:



      6. 可以使用哪些方法使用 JavaScript 向服务器发出请求且不离开当前页面,简单对比各自的特点(如果存在)(酷讯)

      使用 XMLHttpRequest 对象异步请求

      7. 判断以下代码是否正确,如果有错,请指出错误,如果正确,请指出运行结果 (酷讯)
      var arr = new Array(    new Array(1,2,3,4),    new Array("abc", "def", "xyz"),);for(i = 0; i < arr.length; i++) {	document.write(arr[0]);}

      怀疑这个代码写错了,第二个 new array 后面的逗号是多余的,如果此处没问题,则代码是正确的,输出的结果是 1,2,3,4 1,2,3,4
      注:arr 是一个二维数组,该数组有两个元素,第一个元素是数组[1,2,3,4],第二个元素也是一个数组为["abc", "def", "xyz"],for 循环语句执行了两次,但都是输出第一个元素,即数组[1,2,3,4]。

      [E]8. 用 JavaScript 写一个函数,其功能是可以删除数组中重复的元素。
       9. 以下哪条 JavaScript 语句会产生运行错误:( )   

      A. var obj = ( );
      B. var obj = [ ];
      C. var obj = { };
      D. var obj = //;
      答案:A

      10. 请选择结果为真的表达式:( )

      A. null instanceof Object
      B. null === undefined
      C. null == undefined
      D. NaN == NaN
      答案:C

      11. foo 对象有 att 属性,那么获取 att 属性的值,以下哪些做法是可以的:( )

      A. foo.att
      B. foo("att")
      C. foo["att"]
      D. foo{"att"}
      E. foo["a"+"t"+"t"]
      答案:ACE

      12. 如何添加 html 元素的事件,有几种方法,举例

      (1).直接作为元素的属性,如
      (2).使用 DOM 0 级事件,简单,兼容性好,如 img.onclick = function(){}
      (3).使用 DOM 2 级事件,功能更强大,在非 IE 等标准浏览其中,使用 addEventListener,在IE 浏览器中则使用 attachEvent 来实现。

      13. JavaScript 能否定义二维数组,如果不能你如何解决?

      JavaScript 不支持二维数组定义,可以用 arr[0] = new array()来解决。

      14. 假设 a.html 和 b.html 在同一个文件夹下面,用 JavaScript 实现当打开 a.html 五秒钟后,自动跳转到 b.html。
       15. 请使用 JavaScript 写出三种产生一个 image 标签的方法(提示:从方法、对象、HTML角度考虑)   

      (1). var img = new Image();
      (2).var img = document.createElement("image")
      (3). img.innerHTML = ""

      16. js 中网页前进和后退的代码

      前进: history.forward();或者 history.go(1);
      后退: history.back ();或者history.go(-1);

      17. 请写出一条至少 3 个节点的 DOM 树 (YG)
         

      结果 HTML:
      百度

      18. 实现点击按钮弹出窗口的代码 (YG)
      document.getElementById( 'button' ).onclick = function(){window.open ('page.html');}

      其中,button 是按钮的 id,page.html 是要弹出的窗口页面。

      19. JavaScript 包括那些基本数据类型?(小米)

      JavaScript 中包括 5 种基本数据类型,分别是 Number,String,Boolean,Null 和 Undefined。

      三、PHP语言基础

      1. strlen( )与 mb_strlen( )的作用分别是什么(新浪网技术部)

      strlen和mb_strlen都是用于获取字符串长度。
      strlen只针对单字节编码字符,也就是说它计算的是字符串的总字节数。如果是多字节编码,如 gbk 和 utf-8,使用 strlen 得到是该字符的总字节数;
      可以使用mb_strlen获取其字符个数,使用mb_strlen 要注意两点,一是要开启 mbstring 扩展,二是要指定字符集。

      总结:

    1. strlen函数不管是字符串是单字节编码还是多字节编码,函数返回的结果都是字符串的总字节数。
    2. mb_strlen函数当字符串是单字节编码时,函数返回的结果是字符串的总字节数。当字符串是多字节编码时,函数返回的结果是字符串的个数。
      mb_strlen函数在没有指定字符编码时,表示使用默认字符编码,即单字节编码,函数返回的是字符串的总字节数。
    3. PHP默认是单字节编码(内部字符编码),多字节编码方式有gbk、utf-8等。
    4. 示例

      ";	echo mb_strlen($str1);//总字节数为6,内部字符编码	echo "
      "; echo mb_strlen($str1,'utf-8');//总字节数或字符长度为6,指定字符编码(utf-8),多字节编码 echo "
      "; // (2)中文字符串 $str2 = "你是我的小苹果"; echo strlen($str2);//总字节数为21,内部字符编码,单字节编码 echo "
      "; echo mb_strlen($str2);//总字节数为21,内部字符编码 echo "
      "; echo mb_strlen($str2,'utf-8');//字符长度为7,指定字符编码(utf-8),多字节编码?>
      相关题目 1:实现中文字串截取无乱码的方法。

      方法一,使用 php 内置函数 mb_substr()
      方法二,自定义函数,以 utf-8 为例,如下:

      输出 我的温暖	// ================方法二=======================	/**	 * utf8编码字符串截取无乱码	 * @param $str string 要处理的字符串	 * @param $start int 从哪个位置开始截取	 * @param $length int 要截取字符的个数	 * @return string 截取后得到的字符串	*/	function substr_utf8($str,$start,$length = null)	{		$sep = "";		$arr = array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length);		return join($sep,$arr);	}	// 示例	$str = "你是我的温暖阳光";	echo substr_utf8($str,2,4);//
      输出 我的温暖?> 相关题目2:如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北”

      方法一,使用php内置函数,确保配置中已打开mbstring扩展
      方法二,自定义函数实现求其长度,截取使用上面定义的substr_utf8

      输出字符数 8	echo mb_substr($str, 3,1,'utf-8');//
      输出 北 // ================方法二======================= /** * utf8编码字符串截取无乱码 * @param $str string 要处理的字符串 * @param $start int 从哪个位置开始截取 * @param $length int 要截取字符的个数 * @return string 截取后得到的字符串 */ function substr_utf8($str,$start,$length = null) { $sep = ""; $arr = array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length); return join($sep,$arr); } /** * utf8编码字符串计算长度 * @param $str string 要处理的字符串 * @return int 字符串的长度或字符个数 */ function strlen_utf8($str) { return count(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY)); } // 示例 $str = "中国2北333京"; echo strlen_utf8($str);//输出字符数 8 echo substr_utf8($str,3,1);//输出 北?> 2. 下列哪个函数是用正则表达式将字符串分割到数组中 ( )

      A. split
      B. implode
      C. explode
      D. join
      答案:A

      3. 写出下列程序的输出结果(新浪网技术部)
      输出结果(新浪网技术部)	*/	$x = 87;	$y = ($x % 7) * 16;	$z = $x > $y ? 1 : 0;	echo $z;?>

      答案:1

      4. 写出下列几个预定义全局变量的作用 (新浪网技术部)
      $_SERVER['DOCUMENT_ROOT']//当前运行脚本所在的文档根目录$_SERVER['HTTP_HOST ']//当前请求的 Host: 头部的内容$_SERVER['REMOTE_ADDR']//正在浏览当前页面用户的 IP 地址$_SERVER['HTTP_REFERER']//链接到当前页面的前一页面的 URL 地址$_SERVER['SERVER_NAME']//当前运行脚本所在服务器主机的名称$_FILES //包含有所有上传的文件信息S_FILES['userfile']['name']//客户端机器文件的原名称$_FILES['userfile']['type']//文件 MIME 类型,如果浏览器提供此信息的话,如“image/gif”。$_FILES['userfile']['size']//已上传文件的大小,单位为字节$_FILES['userfile']['tmp_name']//文件被上传后在服务端储存的临时文件名$_FILES['userfile']['error']//和该文件上传相关的错误代码
      5. include 和 require 都能把另外一个文件包含到当前文件中,他们有什么区别?Include 和include_once 又有什么区别?(新浪网技术部)

      二者区别只有一个,那就是对包含文件的需求程度。include 就是包含,如果被包含的文件不存在的话,那么则会提示一个错误,但是程序会继续执行下去。而 require 意思是需要,如果被包含文件不存在或者无法打开的时候,则会提示错误,并且会终止程序的执行。
      这两种结构除了在如何处理失败之外完全一样。
      once 的意思是一次,那么 include_once 和 require_once 表示只包含一次,避免重复包含。

      相关题目 1:What is the difference between include & include_once? include & require?(Yahoo) 相关题目 2:语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区

      别是_;为了避免多次包含同一文件,可以用语句来代替它们。
      在如何处理失败时,include()产生一个警告而require()则导致一个致命错误;requireonce()/include_once()

      相关题目 3:What functions can you use to add library code to the currently running script?(Yahoo)

      include、require

      6. 用最少的代码写一个求 3 值最大值的函数. (51.com 笔试题)
       $b ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c);	}	// 调用实例	echo maxnum(24,15,8);?>
      7. 简述 POST 和 GET 传输的最大容量分别是多少? (51.com 笔试题)

      POST 根据你 php.ini 文件配置(默认是 8M)
      GET 的话大小限制在 2KB

      相关题目:表单中 get 与 post 提交方法的区别?

      get 是发送请求 HTTP 协议通过 url 参数传递进行接收,而 post 是实体数据,可以通过表单提交大量信息。

      8. 有三个 php 文件位于同一目录下,内容如下所示。使用浏览器访问 c.php,请问是否存在问题。如果存在问题,请指出修正方法并写出浏览器查看效果 ,如果不存在问题,请写出浏览器查看效果(酷讯 PHP 工程师笔试题)

      A.php:

      B.php:

      C.php:

      答案:存在问题,a.php 被包含了两次,导致 fa()函数重复定义,使用 include_once 避免重复包含。

      9. echo(),print(),print_r()的区别?(新浪)

      echo, print是PHP语句print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
      print只能打印出简单类型变量的值(如int,string)
      print_r可以打印出复杂类型变量的值(如数组,对象)

      echo -- 输出一个或者多个字符串
      print --输出一个字符串
      print_r -- 打印关于变量的易于理解的信息。

      在实际使用中, print 和 echo 两者的功能几乎是完全一样。
      可以这么说,凡是有一个可以使用的地方,另一个也可以使用。但是,两者之间也还是一个非常重要的区别:
      在 echo 函数中,可以同时输出多个字符串,而在 print 函数中则只可以同时输出一个字符串。同时,echo函数并不需要圆括号,所以echo函数更像是语句而不像是函数。
      echo 和 print 都不是函数,而是语言结构,所以圆括号都不是必需的。他们的区别在于:

      (1) echo可以输出多个字符串,像下面这样:
      echo 'a','b','c';
      如果你非要加上圆括号,注意写成echo ('a','b','c');是错误的,应该写成:
      echo ('a'),('b'),('c');
      它没有像函数的行为,所以不能用于函数的上下文

      (2) print只能输出一个字符串,它可以表现得像一个函数,比如你可以如下使用:
      $ret = print 'Hello World';
      (有返回值所以能够用在更复杂的表达式中,可以判断是否输出成功等表达式)所以它能用在更复杂的表达式中。

      另外,echo的效率相对比较快~

      如下代码:

      ';//echo 可以用逗号分隔字符串变量来显示    print $a.$b.'
      ';//而print不能使用逗号,只能用点号分隔 print $a,$b.'
      ';//使用逗号时报错。?>

      说明:

      1. ,是 echo 本身支持的一种语法,而.则是字符串连接操作符,使用,的效率要高一些。(少了连接运算)
      2. echo可以使用,来分隔字符串变量,也可以使用,来分隔字符串变量;print只能使用.来分隔字符串变量。
      3. echo效率比print高

      总结
      echo命令和print命令相同,没有区别
      echo()和print()有区别:
      echo()没有返回值,与echo命令相同
      print()有返回值,总是返回1

      补充:
      printf()和sprintf()类似,均为格式化输出,不同的是前者输出到标准输出,后者输出到变量

      相关题目:What is the difference between "print()" and "echo( )"? (腾讯)

      answer: print is a function,echo is a language construct

      10. 用 PHP 打印出前一天的时间格式是 2006-5-10 22:21:21。
      ";	// ================方法二==================	echo date("Y-m-d H:i:s",strtotime("-1 day"));	echo "
      "; // 将表单中提交的时间字符串"2015-6-23"转成时间戳 $date = strtotime("2015-6-23"); echo $date;?>

      说明:

    5. 使用strtotime可以将任何字符串的时间表示(now,seconds,day,week等)转换成时间戳,仅针对英文。
    6. 在实际开发的时候,strtotime非常有用,因为对于表单来说,提交的数据都是字符串。比如,“2013-4-27”需要将其转换成时间戳然后存到数据库中。
    7. 相关题目:求两个日期的差数,例如 2009-3-1 ~ 2009-4-4 的日期差数

      (strtotime("2009-4-4")-strtotime("2009-3-1"))/3600*24

      11. 不使用第三个变量交换两个变量的值
      ';	echo '$b='.$b.'
      '; list($a,$b) = array($b,$a); echo '$a='.$a.'
      '; echo '$b='.$b.'
      '; echo "
      "; // ================方法二================== $a = "PHP"; $b = "MySQL"; echo '$a='.$a.'
      '; echo '$b='.$b.'
      '; $a = $a.'&'.$b;//使用&连接两个字符串 // 根据&进行字符串分割 $b = explode('&', $a); $a = $b[1]; $b = $b[0]; echo '$a='.$a.'
      '; echo '$b='.$b.'
      ';?>
      1. 请说明 php 中传值与传引用的区别。什么时候传值什么时候传引用?
        变量默认总是传值赋值。
        那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。
        PHP 也提供了另外一种方式给变量赋值:引用赋值。
        这意味着新的变量简单的引用(换言之,“成为其别名” 或者 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个&符号加到将要赋值的变量前(源变量)。
        对象默认是传引用。
        对于较大的数据,传引用比较好,这样可以节省内存的开销。
      相关题目 1:What would the following code print to the browser? Why?

      输出 10

      相关题目 2:What is the difference between a reference and a regular variable? How do you pass by reference & why would you want to?(Yahoo)

      reference 传送的是变量的地址而非它的值,所以在函数中改变一个变量的值时,整个应用都见到这个变量的新值。
      一个 regular variable 传送给函数的是它的值,当函数改变这个变量的值时,只有这个函数才见到新值,应用的其他部分仍然见到旧值。

      13. 将 1234567890 转换成 1,234,567,890 每 3 位用逗号隔开的形式。(百度)
      相关题目 1:如何实现字符串翻转?

      strrev(),不过这种方法都不能解决中文字符串翻转的问题,会出错的。

      相关题目 2:假设现在有一个字符串 www.baidu.com 如何使用 PHP 对它进行操作使字符串以 moc.udiab.输出? (亿邮)
      14. 用 PHP 写出显示客户端 IP 与服务器 IP 的代码。

      客户端 IP:$_SERVER["REMOTE_ADDR"]
      服务器端 IP:$_SERVER["SERVER_ADDR"]

      15. 简述如何得到当前执行脚本路径,包括所得到参数。

      获取当前执行脚本路径使用$_SERVER["SCRIPT_FILENAME"]或__FILE__
      获取参数,使用$_SERVER["QUERY_STRING"]

      16. What is the difference between foo() & @foo()?(Yahoo)

      foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。
      @foo() 在执行这个函式时,会隐藏所有上述的错误讯息。
      很多应用程序都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的错误信息,这是不对的,因为错误不该被隐藏,你必须妥善处理它们,可能的话解决它们。

      17. 下面哪个选项没有将 john 添加到 users 数组中? ( 百度 )

      A. $users[ ] = "john";
      B. array_add($users, "john");
      C. array_push($users, "john");
      D. $users ||= "john" ;
      答案:BD

      18. 检测一个变量是否有设置的函数?是否为空的函数是?

      isset 检测一个变量是否设置
      empty 检测是否为空
      注意二者的区别,如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array() 以及没有任何属性的对象都将被认为是空的。
      isset是检测变量是否设置/定义,empty是检测已定义的变量的值是否为空。

      19. 在 PHP 中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量______中;而链接到当前页面的的前一页面 URL 记录在预定义变量______中。

      当前脚本名称:$SERVER["PHP_SELF"]或者 $SERVER["SCRIPT_NAME"];
      链接到当前页面的前一页面的 URL 地址:$_SERVER["HTTP_REFERER"]。

      20. sort()、assort()、和 ksort() 有什么分别?它们分别在什么情况下使用?

      sort(),根据数组中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主要是当数组索引键的值无关紧要时用来把数组排序。
      assort(),PHP 没有 assort() 函式,所以可能是 asort() 的笔误。
      asort(),对数组进行排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。
      ksort(),根据数组中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的关联数组。

      21. 在 PHP 中 error_reporting 这个函数有什么作用?

      打开或者关闭错误报告,如:
      error_reporting(0);
      error_reporting(E_ALL & ~ E_NOTICE);
      error_reporting(E_ALL);

      相关题目:error_reporting(2047) 什么作用?(新浪)

      2047 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 + 512 + 1024
      其中:
      1 对应 E_ERROR,2 对应 E_WARNING,4 对应 E_PARSE,
      8 对应 E_NOTICE,16 对应 E_CORE_ERROR,32 对应 E_CORE_WARNING
      ,64 对应 E_COMPILE_ERROR,128对应 E_COMPILE_WARNING,256 对应 E_USER_ERROR,
      512 对应 E_USER_WARNING,1024 对应 E_USER_NOTICE。
      error_reporting(2047)意味着上述错误都会显示出来。

      1. 写出以下程序的输出结果 (CBSI)

        hotdogok

      相关题目:什么是可变变量?

      获取一个普通变量的值作为这个可变变量的变量名。

      23. 常量如何定义? 如何检测一个常量是否被定义?

      定义常量:define()
      检测常量是否定义:defined()
      如:

      define("TEST","happy new year!");if( defined("TEST")){	echo TEST;}
      1. 执行程序段将输出
        %为取模运算,输出 0
        $a % $b其结果的正负取决于 $a 的符号。

      echo ((-8)%3)."
      ";//输出 -2
      echo (8%(-3))."
      ";//输出 2

      25. 数组函数 arsort 的作用是_ ;语句 errorreporting(2047)的作用是__。
      arsort:对数组进行逆向排序并保持索引关系
      error_reporting(2047)的作用 report All errors and warnings,见 21 题中相关题目。 26. 以 Apache 模块的方式安装 PHP,在文件 http.conf 中首先要用语句_ 动态装载 PHP模块,然后再用语句使得 Apache 把所有扩展名为 php 的文件都作为 PHP 脚本处理。
      LoadModule php5module "c:/php/php5apache2.dll";

      AddType application/x-httpd-php .php

      27. 一个函数的参数不能是对变量的引用,除非在 php.ini 中把___设为 on.
      allowcall_time_pass_reference :是否启用在函数调用时强制参数被按照引用传递,默认关闭。 28. 在 PHP 中,heredoc 是一种特殊的字符串,它的结束标志必须____顶格写,并且不能包含任何其它字符除";" 29.echo count("abc"); 输出什么?(新浪?)

      输出 1
      count :计算数组中的单元数目或对象中的属性个数,通常是一个 array,任何其它类型都只有一个单元。
      对于对象,如果安装了 SPL,可以通过实现 Countable 接口来调用 count()。该接口只有一个方法 count(),此方法返回 count() 函数的返回值。
      如果 var 不是数组类型或者实现了 Countable 接口的对象,将返回 1,有一个例外,如果 var 是 NULL 则结果是 0。

      相关题目:What will be the output of the following PHP code:(腾讯)

      answer: 1

      30. 写个函数用来对二维数组排序(新浪)
      2,'name'=>'zhangsan','age'=>23),		array('id'=>5,'name'=>'lisi','age'=>28),		array('id'=>3,'name'=>'apple','age'=>17)	);	echo "
      before:
      "; print_r($person); echo "
      "; echo "
      "; $person2 = array_sort($person,'name'); echo "
      after:
      "; print_r($person2); echo "
      ";?>
      31. 写 5 个不同的自己的函数,来获取一个全路径的文件的扩展名,允许封装 php 库中已有的函数。(新浪)
      ";	echo ext_name1($path);echo "
      "; echo ext_name2($path);echo "
      "; echo ext_name3($path);echo "
      "; echo ext_name4($path);echo "
      "; echo ext_name5($path);echo "
      ";?>
      32. PHP 的意思,它能干些什么?

      PHP( Hypertext Preprocessor,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML 中,尤其适合 web 开发。
      PHP 主要是用于服务端的脚本程序,因此可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收Cookies。但 PHP 的功能远不局限于此。
      PHP 脚本主要用于以下三个领域:

    8. 服务端脚本。这是 PHP 最传统,也是最主要的目标领域。
    9. 命令行脚本。可以编写一段 PHP 脚本,并且不需要任何服务器或者浏览器来运行它。通过这种方式,仅仅只需要 PHP 解析器来执行。
    10. 编写桌面应用程序。
    11. 33. Name a few ways to output (print) a block of HTML code in PHP?(Yahoo)

      你可以使用 PHP 中任何一种输出语句,包括 echo、print、printf,大部分人都使用如下例的 echo:
      echo "My string $variable";
      你也可以使用这种方法:

      echo << HTML tags in here as well. The END; remarks must be on a line of itsown, and can't contain any extra white space.END;
      34. 写出以下程序的输出结果 (CBSI)
       $c ? 4 : 5;	echo $a;?>

      输出结果为 4

      1. $arr = array('james', 'tom', 'symfony');请打印出第一个元素的值,并请将数组的值用','号分隔并合并成字串输出。
        打印第一个元素:echo $arr[0];
        以’,’合并成字符串:echo implode(',',$arr);
      36. $a = 'abcdef'; 请取出$a 的值并打印出第一个字母

      echo $a{0} 或 echo $a[0]

      相关题目:$string="abcdefg",那么$string{4}的值是? (卓望)

      值是 e

      37. What does === do? What's an example of something that will give true for '==', but not'==='? (Yahoo)

      === 表示全等,是指的两个变量的值和类型都相等。
      如 if (strpos('abc','a') == false) 和 if (strpos('abc','a') === false)

      38. Which of the following snippets prints a representation of 42 with two decimal places?(腾讯)

      A. printf("%.2d\n", 42);
      B. printf("%1.2f\n", 42);
      C. printf("%1.2u\n", 42);
      answer:B

      39. Given $text = 'Content-TypeType:text/xml'; Which of the following prints 'text/xml'? (腾讯)

      A. print substr($text, strchr($text, ':'));
      B. print substr($text, strchr($text, ':') + 1);
      C. print substr($text, strpos($text, ':') + 1);
      D. print substr($text, strpos($text, ':') + 2);
      E. print substr($text, 0, strchr($text, ':'));
      answer:C
      分析:

      ";    print substr($text, strchr($text,':')+1);//strchr返回的是字符串,字符串+1,返回ontent-Type:text/xml    echo "
      "; print substr($text, strpos($text,':')+1);//返回text/xml echo "
      "; print substr($text, strpos($text,':')+2);//返回ext/xml echo "
      "; print substr($text, 0,strchr($text,':'));//出错,strchr返回的是字符串 echo "
      ";?>
      40. What is the value of $a?

      A. True
      B. False
      answer:A

      41. What is the value of $result in the following PHP code? (腾讯)

      answer: NULL

      42. What is the best all-purpose way of comparing two strings? (腾讯)

      A. Using the strpos function
      B. Using the == operator
      C. Using strcasecmp()
      D. Using strcmp()
      answer:C

      43. 运行以下程序,$a 的值是多少?

      answer:hello

      44. 运行以下程序,$b 的值是多少?

      answer:1

      45. 运行以下程序,$x 的值是多少?

      answer:ture

      46. 将字符 09 转换成十进制数字。(百度)

      使用 intval 函数,echo intval("09"),或者使用 int 强制类型转换。

      47. 请 写 一 个 函 数 , 实 现 以 下 功 能 : 字 符 串 "open_door" 转 换 成 "OpenDoor" 、"make_by_id" 转换成 "MakeById"。
      OpenDoor,make_by_id->MakeById	 * @param $str string 要转换的字符串	 * @return string 转换后的字符串	*/	function change_str($str){		$arr = explode('_',$str);//将以“_”间隔的字符串拆分成数组的单元		$arr = array_map('ucfirst', $arr);//每个数组单元的首个字符大写		return implode('', $arr);//将数组单元合并
      输出字符串 } // 实例 $str1 = 'open_door'; $str2 = 'make_by_id'; echo change_str($str1);//OpenDoor echo change_str($str2);//MakeById?> 48. 要求写一段程序,实现以下数组$arr1 转换成数组$arr2:
       array('fid' => 1,'tid' =>1,'name' => 'Name1'),		'1' => array('fid' => 1,'tid' =>2,'name' => 'Name2'),		'2' => array('fid' => 1,'tid' =>5,'name' => 'Name3'),		'3' => array('fid' => 1,'tid' =>7,'name' => 'Name4'),		'4' => array('fid' => 3,'tid' =>9,'name' => 'Name5')	);	// =======================================================	$arr_tmp = array();	$arr2 = array();	foreach ($arr1 as $v) {		// 方法一		$arr_tmp[$v['fid']][] = array_slice($v, 1);		// 方法二		/*			$arr_tmp[$v['fid']][] = array(				'tid' => $v['tid'],				'name' => $v['name']			)		*/	}	foreach ($arr_tmp as $v) {		$arr2[] = $v;	}	print_r($arr1);	print_r($arr2);?>
      49. 如何将一个数组元素的排列顺序反转过来(例如以下代码反转以后的顺序是: array ('d','c', 'b', 'a'))? (选择 2 个答案)

      A. array_flip()
      B. array_reverse()
      C. sort()
      D. rsort()
      答案:BD

      50. $val = max('string', array(2, 5, 7), 42);$val 值为

      array(2,5,7)
      max 用法示例如下:

      ";	echo max(array(2,4,5));//5	echo "
      "; echo max(0,'hello');//0 echo "
      "; echo max('hello','0');//hello echo "
      "; echo max(-1,'hello');//hello echo "
      "; //对于多个数组,max从左向右比较 //因此在本例中:2 == 2,但是4 < 5 $val = max(array(2,4,8),array(2,5,7));//array(2,5,7) var_dump($val); echo "
      "; // 如果同时给出数组和非数组作为参数,则总是将数组视为最大值返回 $val = max('string', array(2, 5, 7), 42); var_dump($val);?>
      51. 定义常量 MYPI=3.14_________________________;

      define("MYPI",3.14);

      52. 简述单引号和双引号的用法

      双引号串中的内容可以被解释而且替换,而单引号串中的内容总被认为是普通字符。

      53. Switch 完整语法和注意事项

      使用 Switch 语句可以避免冗长的 if..elseif..else 代码块,case只能处理整数,或者能像整数一样运算的类型,比如char,使用时case 后用'',注意 break不能少,default是为了处理一些之前没有包含到的情况,这样更为安全。

      54. 用 PHP 编写代码在页面输出当前的北京时间,格式为 “2007-01-18 09:22:03”

      date_default_timezone_set('PRC');
      echo date("Y-m-d H:i:s",time());

      55. 简述 GBK、GB2312、BIG5 、GB18030

      GB2312 支持的汉字较少,GBK 是相比 GB2312 汉字更为丰富,包括全部中日韩汉字,GB18030 相比 GBK 增加了一些少数名族汉字汉字库更为多样,但是常人很难用到,一般简体中文使用 GBK 而繁体中文使用 BIG5。

      56. 计算某段字符串中某个字符出现的次数(例如 : gdfgfdgd59gmkblg 中 g 的次数)
      $text = 'gdfgfdgd59gmkblg';echo substr_count ( $text,'g');
      57. 以下语句可能存在错误,如果存在错误请指出什么错误(每个语句单独考虑)

      print_r $val = 333;// error,print_r 是一个函数,需加上括号,如果是 print 则可以
      print_r($val = 333); // 正确
      $a += ($b = 4) + 5;// notice,$a 未定义,但可以正确运行
      $foo[bar] = 'enemy';// notice,最好 bar 加上引号
      function x($a = "1", $b){}// 无,但给参数默认值应尽量从右向左

      58. 写出如下程序的输出结果(小米)
      59. 写出如下程序的输出结果
      ';	echo empty($a2) ? 'true' : 'false';//ture	echo '
      '; echo empty($a3) ? 'true' : 'false';//ture echo '
      '; echo empty($a4) ? 'true' : 'false';//ture echo '
      '; echo empty($a5) ? 'true' : 'false';//ture echo '
      '; echo empty($a6) ? 'true' : 'false';//false echo '
      '; echo empty($a7) ? 'true' : 'false';//ture echo '
      '; echo empty($a8) ? 'true' : 'false';//false?>
      60. 写出如下程序的输出结果

      aaaa

      61. 写出如下程序的输出结果

      501

      分析:
      在 PHP 中,作用域是不重叠的,函数之外的是全局变量,函数内部定义的则是局部变量,二者是两个不同的变量,除非在函数内使用 global 显式声明使用全局变量或直接用$_GLOBALS 来引用。

      62. 写出如下程序的输出结果

      52

      63. 写出如下程序的输出结果

      12

      64. $arr = array('james', 'tom', 'symfony'); 请将’jack’添加到$arr 数组的开头,并把 jack 打印出来。
      array_unshift($arr,’jack’);echo $arr[0];
      65. $arr = array('james', 'tom', 'symfony');请将$arr 数组的值用 ’,’分割并合并成字符串输出?

      echo implode(‘,’,$arr);

      66. $str = ‘jack,james,tom,symfony’; 请将$str 用’,’分割,并把分割后的值放到$arr 数组中?

      $arr = explode(‘,’,$str);

      67. $arr = array(3,7,2,1,’d’,’abc’);请将$arr 按照从大到小的顺序排序,并保持其键值不变?
      arsort($arr);print_r($arr);
      68. $mail = “ gaofei at 163 dot com ”; 请将此邮箱的域(163.com)取出来并打印,看最多能写出几种方法?
      echo strstr($mail,'163');echo substr($mail,7);echo substr($mail, strpos($mail, '@')+1);$arr = explode("@",$mail);echo $arr[1];
      69. PHP 中的注释的写法,要列出三种?

      // 注释内容 C 风格的单行注释
      # 注释内容 unix 风格的单行注释
      /* 注释内容 */ C 风格的多行注释

      70. 如何在一个 php 函数中使用具有全局属性的变量,说出两种方式?

      global $a 或者 $GLOBALS['a']

      71. 若$aa='aa';则 print('aa is \'aa\''."
      ")会输出什么?

      aa is 'aa'

      72. 如何把$a = ‘123’转化成 123,列出两种方式?
      相关题目:字符串怎么转成整数,有几种方法?怎么实现?
      1. 强制类型转换: (整型)字符串变量名;
      2. 直接转换:settype(字符串变量,整型);
      3. intval(字符串变量);
      73. 说说 break 和 continue 可以用在哪些语句里,并且列出二者的区别?

      break 和 continue 可以用在 switch 语句中,或是循环结构中
      它们的区别主要是体现在循环语句中,break 表示 跳出整个循环,不再执行,循环将终止,而 continue 则表示跳出本次循环,继续下一次的循环,不会终止循环。

      74. 函数中的默认参数位置如何放置?

      当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,函数将不会按照预期的情况工作。

      75. 如何往一个数组后面添加一个值?列出两种方式?
      $arr[ ] = $value;array_push($arr, $value);
      [!!!]76. 说出数组涉及到的常用函数。

      array --声明一个数组
      count -- 计算数组中的单元数目或对象中的属性个数
      foreach -- 遍历数组
      list -- 将数组中元素的值赋值给变量,批量声明变量
      explode -- 将字符串转成数组
      implode -- 将数组转成一个新字符串
      array_merge -- 合并一个或多个数组
      is_array -- 检查是否是数组
      print_r -- 输出数组
      sort -- 数组排序
      array_keys -- 返回数组中所有的键名
      array_values -- 返回数组中所有的值
      key -- 从关联数组中取得键名

      [!!!]77. 字符串的常用函数?

      trim()-- 去除字符串首尾处的空白字符(或者其他字符)
      strlen()-- 字符串长度
      substr()-- 截取字符串
      str_replace()-- 替换字符串函数
      strstr()-- 查找字符串的首次出现位置,返回 第一次出现的位置开始到结尾的字符串
      explode()-- 将字符串分割成数组
      implode()-- 将数组分割成字符串
      str_repeat() -- 重复一个字符串
      addslashes() -- 转义字符串
      htmlspecialchars() -- HTML 实体转义

      78. 以下代码的执行后是,$result 值为:(奇矩互动)

      A. a
      B. false
      C. true
      D. b
      E. c
      答案:B
      mixed array_rand( array $input [, int $num_req ] )
      从数组中随机取出一个或多个单元,它接受 input 作为输入数组和一个可选的参数num_req,指明了你想取出多少个单元 - 如果没有指定,默认为 1。
      如果你只取出一个,array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组。
      所以使用 array_rand 函数,返回结果要么是键名,要么是数组,在这个例子中,数组是索引数组,所以返回的是整型。

      79. 以下代码的执行后是,$result 值为: (奇矩互动)

      A. 1
      B. 2
      C. 3
      D. 4
      E. 5
      答案:B

      80. php 函数名是否区分大小写? (奇矩互动)

      A. 不区分
      B. 区分
      答案:A
      函数名是大小写无关的,不过在调用函数的时候,通常使用其在定义时相同的形式。

      81.以下代码的执行后是,$result 值为:(奇矩互动)

      A. null
      B. true
      C. false
      D. 1
      答案:C

      is_null -- 检测变量是否为 NULL,如果变量是 null 则返回 TRUE,否则返回 FALSE。
      在下列情况下一个变量被认为是 NULL:

      1. 被赋值为 NULL
      2. 尚未被赋值
      3. unset()
      82. 翻转字符串中的单词,字符串仅包含大小写字母和空格,单词间使用空格分隔。如 :输入"This is PHP",输出"PHP is This"(非必要请不要使用 PHP 自带函数) (小米)
      83. 请列举出你所知道的全局环境变量 (亿邮)

      $ENV;
      $SERVER;
      $REQUEST;
      $FILES;
      $SESSION;
      $COOKIE;
      $GET;
      $POST;
      $GLOBALS;

      84. 设有这样一个数组$a=array(array(id=>0),array(id=>1),array(id=>2)......)id=>0-10000,请问你如何使用 PHP 判断 id=>500 是否在这个数组内? (亿邮)

      使用 in_array 函数,代码如下:

       0),			array('id' => 1),			array('id' => 2),			array('id' => 3),			array('id' => 4),			array('id' => 500)		);	$b = array('id' => 500);	if (in_array($b,$a)) {		echo "Yes";	}else{		echo "No";	}?>
      85. 在 PHP 中两个数组怎么连接合并在一起 (亿邮)

      使用 array_merge()函数

      86. 运行以上代码后$a $b $c 分别是? (卓望)

      $a 为 false,$b = $c = 0

      四、PHP面向对象

      1. 写出 php 的 public、protected、private 三种访问控制模式的区别(新浪网技术部)

      public:公有,任何地方都可以访问
      protected:继承,只能在本类或子类中访问,在其它地方不允许访问
      private:私有,只能在本类中访问,在其他地方不允许访问

      相关题目:请写出 PHP5 权限控制修饰符

      private protected public

      2. 设计模式考察:请用单态设计模式方法设计类满足如下需求:

      请用 PHP5 代码编写类实现在每次对数据库连接的访问中都只能获得唯一的一个数据库连接,具体连接数据库的详细代码忽略,请写出主要逻辑代码(新浪网技术部)

      3. 写出下列程序的输出结果(新浪网技术部)
      c = 10;		}	}	class b extends a	{		public function print_data()		{			return $this->c;		}	}	$b = new b();	echo $b->print_data();?>

      输出结果 10

      [!]4. PHP5 中魔术方法函数有哪几个,请举例说明各自的用法 (腾讯 PHP 工程师笔试题)

      __sleep serialize 之前被调用
      __wakeup unserialize 时被调用
      __toString 打印一个对象时被调用
      __set_state 调用 var_export 时被调用,用__set_state的返回值作为 var_export 的返回值
      __construct 构造函数,实例化对象时被调用
      __destruct 析构函数,当对象销毁时被调用
      __call 对象调用某个方法,若存在该方法,则直接调用,若不存在,则调用__call 函数
      __get 读取一个对象属性时,若属性存在,则直接返回,若不存在,则调用__get 函数
      __set 设置一个对象的属性时,若属性存在,则直接赋值,若不存在,则调用__set 函数
      __isset 检测一个对象的属性是否存在时被调用
      __unset unset 一个对象的属性时被调用
      __clone 克隆对象时被调用
      __autoload 实例化一个对象时,如果对应的类不存在,则该方法被调用

      相关题目:请写出 php5 的构造函数和析构函数

      构造函数:__construct
      析构函数:__destruct

      5. 如何使用下面的类,并解释下面什么意思?
      Get_test("itcast");	echo $encryption;?>

      双重 md5 加密

      6. How would you declare a class named “myclass” with no methods or properties?(Yahoo)

      class myclass{};

      相关题目:如何声明一个名为“myclass”的没有方法和属性的类? 7. How would you create an object, which is an instance of “myclass”? (Yahoo)

      $obj= new myclass();

      相关题目:如何实例化一个名为“myclass”的对象? 8. How do you access and set properties of a class from within the class?(Yahoo)

      使用语句:$this->propertyName,例如:

      propertyName = "value";		}	}?>
      9. The code below ___________ because ____________.(腾讯)

      A. will work, class definitions can be split up into multiple PHP blocks.
      B. will not work, class definitions must be in a single PHP block.
      C. will not work, class definitions must be in a single file but can be in multiple PHP blocks.
      D. will work, class definitions can be split up into multiple files and multiple PHP blocks.
      答案: B

      10. 类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是____。
      serialize() 和 unserialize() 11. 在 PHP 中,如果派生类与父类有相同名字的函数,则派生类的函数会替换父类的函数,程序结果为
      
      
                        
      
      	 	
                          
                          
                          
                          
                          
                      

人气教程排行