php面试题之三——PHP语言基础(基础部分)

时间:2019-03-18
本文章向大家介绍php面试题之三——PHP语言基础(基础部分),主要包括php面试题之三——PHP语言基础(基础部分)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

三、PHP语言基础

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

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

总结:

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

示例:

  1.  
    <?php
  2.  
    /*
  3.  
    strlen( )与 mb_strlen( )的作用分别是什么(新浪网技术部)
  4.  
    */
  5.  
    header('Content-Type:text/html;charset=utf-8');
  6.  
    // (1)英文字符串
  7.  
    $str1 ="duang~";
  8.  
    echo strlen($str1);//总字节数为6,内部字符编码,单字节编码
  9.  
    echo "<br />";
  10.  
    echo mb_strlen($str1);//总字节数为6,内部字符编码
  11.  
    echo "<br />";
  12.  
    echo mb_strlen($str1,'utf-8');//总字节数或字符长度为6,指定字符编码(utf-8),多字节编码
  13.  
    echo "<hr />";
  14.  
     
  15.  
    // (2)中文字符串
  16.  
    $str2 = "你是我的小苹果";
  17.  
    echo strlen($str2);//总字节数为21,内部字符编码,单字节编码
  18.  
    echo "<br />";
  19.  
    echo mb_strlen($str2);//总字节数为21,内部字符编码
  20.  
    echo "<br />";
  21.  
    echo mb_strlen($str2,'utf-8');//字符长度为7,指定字符编码(utf-8),多字节编码
  22.  
    ?>

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

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

  1.  
    <?php
  2.  
    /*
  3.  
    相关题目 1:实现中文字串截取无乱码的方法。
  4.  
    */
  5.  
    header('Content-Type:text/html;charset=utf-8');
  6.  
     
  7.  
    //=================方法一=======================
  8.  
    $str = "你是我的温暖阳光";
  9.  
    echo mb_substr($str, 2,4,'utf-8');//输出 我的温暖
  10.  
     
  11.  
    // ================方法二=======================
  12.  
    /**
  13.  
    * utf8编码字符串截取无乱码
  14.  
    @param $str string 要处理的字符串
  15.  
    @param $start int 从哪个位置开始截取
  16.  
    @param $length int 要截取字符的个数
  17.  
    @return string 截取后得到的字符串
  18.  
    */
  19.  
    function substr_utf8($str,$start,$length = null)
  20.  
    {
  21.  
    $sep = "";
  22.  
    $arr = array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length);
  23.  
    return join($sep,$arr);
  24.  
    }
  25.  
    // 示例
  26.  
    $str = "你是我的温暖阳光";
  27.  
    echo substr_utf8($str,2,4);//输出 我的温暖
  28.  
    ?>

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

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

  1.  
    <?php
  2.  
    /*
  3.  
    相关题目 2:如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北”
  4.  
    */
  5.  
    header('Content-Type:text/html;charset=utf-8');
  6.  
     
  7.  
    //=================方法一=======================
  8.  
    $str = "中国2北333京";
  9.  
    echo mb_strlen($str,'utf-8');//输出字符数 8
  10.  
    echo mb_substr($str, 3,1,'utf-8');//输出 北
  11.  
     
  12.  
    // ================方法二=======================
  13.  
    /**
  14.  
    * utf8编码字符串截取无乱码
  15.  
    @param $str string 要处理的字符串
  16.  
    @param $start int 从哪个位置开始截取
  17.  
    @param $length int 要截取字符的个数
  18.  
    @return string 截取后得到的字符串
  19.  
    */
  20.  
    function substr_utf8($str,$start,$length = null)
  21.  
    {
  22.  
    $sep = "";
  23.  
    $arr = array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length);
  24.  
    return join($sep,$arr);
  25.  
    }
  26.  
     
  27.  
    /**
  28.  
    * utf8编码字符串计算长度
  29.  
    @param $str string 要处理的字符串
  30.  
    @return int 字符串的长度或字符个数
  31.  
    */
  32.  
    function strlen_utf8($str)
  33.  
    {
  34.  
    return count(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY));
  35.  
    }
  36.  
     
  37.  
    // 示例
  38.  
    $str = "中国2北333京";
  39.  
    echo strlen_utf8($str);//输出字符数 8
  40.  
    echo substr_utf8($str,3,1);//输出 北
  41.  
    ?>

2. 下列哪个函数是用正则表达式将字符串分割到数组中 ( )

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

3. 写出下列程序的输出结果(新浪网技术部)

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

答案:1

4. 写出下列几个预定义全局变量的作用 (新浪网技术部)

  1.  
    $_SERVER['DOCUMENT_ROOT']//当前运行脚本所在的文档根目录
  2.  
    $_SERVER['HTTP_HOST ']//当前请求的 Host: 头部的内容
  3.  
    $_SERVER['REMOTE_ADDR']//正在浏览当前页面用户的 IP 地址
  4.  
    $_SERVER['HTTP_REFERER']//链接到当前页面的前一页面的 URL 地址
  5.  
    $_SERVER['SERVER_NAME']//当前运行脚本所在服务器主机的名称
  6.  
    $_FILES //包含有所有上传的文件信息
  7.  
    S_FILES['userfile']['name']//客户端机器文件的原名称
  8.  
    $_FILES['userfile']['type']//文件 MIME 类型,如果浏览器提供此信息的话,如“image/gif”。
  9.  
    $_FILES['userfile']['size']//已上传文件的大小,单位为字节
  10.  
    $_FILES['userfile']['tmp_name']//文件被上传后在服务端储存的临时文件名
  11.  
    $_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()则导致一个致命错误;require_once()/include_once()

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

include、require

6. 用最少的代码写一个求 3 值最大值的函数. (51.com 笔试题)

  1.  
    <?php
  2.  
    /*
  3.  
    6. 用最少的代码写一个求 3 值最大值的函数. (51.com 笔试题)
  4.  
    */
  5.  
    // 定义函数
  6.  
    function maxnum($a,$b,$c)
  7.  
    {
  8.  
    return $a > $b ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c);
  9.  
    }
  10.  
     
  11.  
    // 调用实例
  12.  
    echo maxnum(24,15,8);
  13.  
    ?>

7. 简述 POST 和 GET 传输的最大容量分别是多少? (51.com 笔试题)

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

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

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

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

A.php:

  1.  
    <?php
  2.  
    function fa(){
  3.  
    echo “in Function A\n”;
  4.  
    }
  5.  
    ?>

B.php:

  1.  
    <?php
  2.  
    include ‘a.php’;
  3.  
    function fb() {
  4.  
    fa();
  5.  
    echo “in Function B\n”;
  6.  
    }
  7.  
    ?>

C.php:

  1.  
    <?php
  2.  
    include ‘a.php’;
  3.  
    include ‘b.php’;
  4.  
    fa();
  5.  
    fb();
  6.  
    ?>

答案:存在问题,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的效率相对比较快~

如下代码:

  1.  
    <?php
  2.  
    $a=‘hello ‘;
  3.  
    $b=‘php world!’;
  4.  
    echo a,a,a,b.’<br />’;//echo 可以用逗号分隔字符串变量来显示
  5.  
    print a.a.a.b.’<br />’;//而print不能使用逗号,只能用点号分隔
  6.  
    print a,a,a,b.’<br />’;//使用逗号时报错。
  7.  
    ?>

说明

  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。

  1.  
    <?php
  2.  
    /*
  3.  
    用 PHP 打印出前一天的时间格式是 2006-5-10 22:21:21。
  4.  
    /
  5.  
    // 方法一==
  6.  
    echo date(“Y-m-d H:i:s”,time() - 360024);
  7.  
    echo “<br />”;
  8.  
    // 方法二==
  9.  
    echo date(“Y-m-d H:i:s”,strtotime("-1 day"));
  10.  
    echo “<br />”;
  11.  
     
  12.  
    // 将表单中提交的时间字符串"2015-6-23"转成时间戳
  13.  
    $date = strtotime(“2015-6-23”);
  14.  
    echo $date;
  15.  
    ?>

说明:

  • 使用strtotime可以将任何字符串的时间表示(now,seconds,day,week等)转换成时间戳,仅针对英文。
  • 在实际开发的时候,strtotime非常有用,因为对于表单来说,提交的数据都是字符串。比如,“2013-4-27”需要将其转换成时间戳然后存到数据库中。

相关题目:求两个日期的差数,例如 2009-3-1 ~ 2009-4-4 的日期差数

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

11. 不使用第三个变量交换两个变量的值

  1.  
    <?php
  2.  
    /*
  3.  
    不使用第三个变量交换两个变量的值
  4.  
    */
  5.  
    // 方法一==
  6.  
    $a = “PHP”;
  7.  
    b=&lt;spanclass=&quot;hljsstring&quot;>&quot;MySQL&quot;&lt;/span>;&lt;/div>&lt;/div>&lt;/li>&lt;li>&lt;divclass=&quot;hljslnnumbers&quot;>&lt;divclass=&quot;hljslnlinehljslnn&quot;datalinenumber=&quot;8&quot;>&lt;/div>&lt;/div>&lt;divclass=&quot;h