/ 水滴石穿 / php面试题--语言基础

php面试题--语言基础

2014-08-28 posted in [php]

  1. 简述POST和GET的区别?

    1. GET使用URL或Cookie传参。而POST将数据放在BODY中。

    2. GET的URL会有长度上的限制,则POST的数据则可以非常大。

    3. POST比GET安全,因为数据在地址栏上不可见。

  2. strlen()与mb_strlen()的作用分别是什么? strlen和mb_strlen都是用于截取字符串的,其中strlen只针对单字节编码字符,如果是多字节编码,如gbk和utf8,使用strlen会出现乱码,此时可以使用mb_strlen,专用于处理多字节编码的截取。

    相关题目1:实现中文字符串截取无乱码的方法。

    使用php内置函数 mb_substr() 自定义函数,如下:

     <?php
    	
     header('Content-Type:text/html;charset=utf8');
    
     function substr_utf8($str,$start,$length)
     {
         return implode("",array_slice(
    
             preg_split("//u",$str,-1,PREG_SPLIT_NO_EMPTY),$start,$length)
    
         );
     }
    
     $str = '中国人民银行';
    
     echo substr_utf8($str,2);  //输出   人民银行
    

    相关题目2: 如何求解字符串”中国2北333京”的字符数(一个中文一个字符),并找到第四个字符”北” 使用php内置函数

     <?php
    
     header('Content-Type:text/html;charset=utf8');
     $str = '中国2北333京';
     echo mb_strlen($str,'utf8');
     echo mb_substr($str,3,1,'utf8');
    

    自定义函数实现求其长度,截取使用上面定义的substr_utf8

     <?php
    
     header('Content-Type:text/html;charset=utf8');
    	
     function strlen_utf8($str)
     {
         return count(preg_split('//u',$str,-1,PREG_SPLIT_NO_EMPTY));
    	
     }
    
     $str = '中国2北333京';
    
     echo strlen_utf8($str);
    
  3. 下列哪个函数是用正则表达式将字符串分割到数组中()

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

  4. 写出下列程序的输出结果

     <?php
    
         $x = 87;
         $y = ($x % 7) * 16;
         $z = $x > $y ? 1 : 0;
         echo $z;
     ?>
    

    The answer is 1.

  5. 写出下列几个预定义全局变量的作用

     $_SERVER['DOCUMENT_ROOT']  // 当前运行脚本所在的文档根目录
     $_SERVER['HTTP_HOST']      // 当前请求的HOST:头部的内容
     $_SERVER['REMOTE_ADDR']    // 正在浏览当前页面的用户的ip地址
     $_SERVER['HTTP_REFERER']   // 链接到当前页面的前一个页面的url地址
     $_SERVER['SERVER_NAME']    // 当前运行脚本所在服务器主机的名称
    
  6. include和require都能把另外一个文件包含到当前文件中,他们有什么区别?include_once和include_once又有什么区别?

    二者区别只有一个,那就是对包含文件的需求程度,include就是包含,如果被包含的文件不存在的话,那么会提示一个错误,但程序会继续执行下去。 而require意思是需要,如果被包含文件不存在或者无法打开的时候,则会提示错误,并且程序终止执行。

    这两种结构除了在如何处理失败之外完全一样。 once的意思是一次,那么include_once和require_once表示只包含一次,避免重复包含。

  7. 用最少的代码写一个求3值最大值的函数。

     <?php 
    
         function maximum($a,$b,$c)
         {
             return $a > $b ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c);
         }
    
         echo maximum(24,45,14);
    
  8. echo(),print(),print_r()的区别?

    echo是一个语言结构,输出一个或多个字符串; print()实际上不是一个函数(它是一个语言结构),因此可以不使用圆括号来括起它的参数列表,输出一个字符串 print_r()打印变量的值,基本类型,数组,对象。

    echo $a,$b;
    print('<br />');
    echo $a . $b;
    ,是echo本身支持的一种语法,而'.'是字符串连接操作符。使用 ’,‘ 的效率更高一些。
    
  9. 用php打印出前一天的时间格式是2006-5-10 22:21:21

    <?php 
    
        echo date("Y-m-d H:i:s",time()-3600*24);
        echo date("Y-m-d H:i:s",strtotime("-1 day"));
    

    相关主题:求两个日期的差数,例如2009-3-1 ~2014-9-10的日期差数

    (strtotime('2009-3-1') - strtotime('2014-9-10')) / 3600 * 24
    
  10. 不使用第三个变量交换两个变量的值

    方案一: <?php $a = ‘PHP’; $b = ‘MySQL’; echo $a,$b; list($a,$b) = array($b,$a); echo “
    ”; echo $a,$b;

    方案二: 对字符进行编码,比如MD5、sha1、base64_encode,但要保证编码是可逆的 <?php $a = ‘PHP’; $b = ‘MySQL’; echo $a,$b; $a = base64_encode($a); $b = base64_encode($b); $a = $a . ‘&’ . $b; $b = explode(‘&’,$a); $a = base64_encode($b[1]); $b = base64_encode($b[0]); echo “
    ”; echo $a,$b;

  11. 请说明php中传值和传引用的区别。什么时候传值什么时候传引用?

    变量默认总是传值赋值。那也就是说,当将一个表达式的值赋予一个变量时,整个表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋值给另一个变量时,改变其中一个变量的值,将不会影响另一个变量。 引用赋值,这意味这新变量简单的引用了原始变量。改动新的变量将影响原始变量,反之亦然。使用引用赋值,简单地将一个&符号将要赋值的变量前(源变量)。对象默认是传引用。对于较大的数据,传引用比较好。这样可以节省内存开销。

    相关题目1:What would the following code print to the browser? Why?

    <?php
    $num = 10;
    function multiply($num){
    
        $num = $num * 10;
    	
    }
    multiply($num);
    echo $num;
    
    output will be 10 .
    
  12. 将1234567890转换成1,234,567,890每三位用逗号隔开的形式。

    <?php 
    $str = '1234567890';
    function str($str){
        $str =  strrev($str);
        $str =  chunk_split($str,3,',');
        $str =  strrev($str);
        $str =  ltrim($str,',');
        return $str;
    }
    

    相关题目1: 如何实现字符串翻转? strrev(),不过这种方法都不能解决中文字符串翻转的问题.

    <?php 
    
    function strrev_utf8($str){
    
        return implode("",array_reverse(
    
            preg_split("//u",$str)
    		
        ));
    	
    }
    
    $str = "预祝成功";
    echo strrev_utf8($str);
    

    相关题目2:假设现在有一个字符串www.baidu.com如何使用PHP对它进行操作使字符串以moc.udiab.输出?

    $str = 'www.baidu.com';
    echo strrev(str_replace('www','',$str));
    
  13. 用PHP写出显示客户端和服务器端IP的代码。

    客户端IP: $_SERVER['REMOTE_ADDR']
    服务端IP: $_SERVER['SERVER_ADDR']
    
  14. 简述如何得到当前执行脚本路径,包括所得到参数

    获取当前执行脚本路径使用$_SERVER[‘SCRIPT_NAME’]或basename(FILE) 获取参数,使用$_SERVER[‘QUERY_STRING’]

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

    foo()会执行这个函数,任何编译错误,语法错误,执行错误都会在页面上显示出来。 @foo()在执行这个函数时,会隐藏所有上述的错误讯息。

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

    isset 检测一变量是否设置
    empty 检测是否为空