page contents

PHP面试题:PHP基础面试题部分

今天这篇文章就带大家介绍几道PHP基础面试题! 1. strlen( )与 mb_strlen( )的作用分别是什么(新浪网技术部) strlen和mb_strlen都是用于获取字符串长度。 strlen只针对单字节编码字符,也...

attachments-2021-05-a1DQMNk860b061a234d35.png

今天这篇文章就带大家介绍几道PHP基础面试题!

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

strlen和mb_strlen都是用于获取字符串长度。

strlen只针对单字节编码字符,也就是说它计算的是字符串的总字节数。如果是多字节编码,如 gbk 和 utf-8,使用 strlen 得到是该字符的总字节数;

可以使用mb_strlen获取其字符个数,使用mb_strlen 要注意两点,一是要开启 mbstring 扩展,二是要指定字符集。

总结:

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

示例:

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

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

方法一,使用 php 内置函数 mb_substr()

方法二,自定义函数,以 utf-8 为例,如下:

<?php
    /*
        相关题目 1:实现中文字串截取无乱码的方法。
    */
    header('Content-Type:text/html;charset=utf-8');
 
    //=================方法一=======================
    $str = "你是我的温暖阳光";
    echo mb_substr($str, 2,4,'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

<?php
    /*
        相关题目 2:如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北”
    */
    header('Content-Type:text/html;charset=utf-8');
 
    //=================方法一=======================
    $str = "中国2北333京";
    echo mb_strlen($str,'utf-8');//输出字符数 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. 写出下列程序的输出结果(新浪网技术部)

<?php
    /*
        写出下列程序的输出结果(新浪网技术部)
    */
    $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()则导致一个致命错误;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 笔试题)

<?php
    /*
        6. 用最少的代码写一个求 3 值最大值的函数. (51.com 笔试题)
    */
    // 定义函数
    function maxnum($a,$b,$c)
    {
        return $a > $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:

<?php
    function fa(){
        echo "in Function A\n";
    }
?>

B.php:

<?php
    include 'a.php';
    function fb() {
        fa();
        echo "in Function B\n";
    }
?>

C.php:

<?php
    include 'a.php';
    include 'b.php';
    fa();
    fb();
?>

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

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

echo, print是PHP语句print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)

print只能打印出简单类型变量的值(如int,string)

print_r可以打印出复杂类型变量的值(如数组,对象)

  1. echo -- 输出一个或者多个字符串
  2. print --输出一个字符串
  3. 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的效率相对比较快~

如下代码:

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

说明:

  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。

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

说明:

使用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. 不使用第三个变量交换两个变量的值

<?php
    /*
        不使用第三个变量交换两个变量的值
    */
    // ================方法一==================
    $a = "PHP";
    $b = "MySQL";
    echo '$a='.$a.'<br />';
    echo '$b='.$b.'<br />';
 
    list($a,$b) = array($b,$a);
 
    echo '$a='.$a.'<br />';
    echo '$b='.$b.'<br />';
 
    echo "<hr />";
    // ================方法二==================
    $a = "PHP";
    $b = "MySQL";
    echo '$a='.$a.'<br />';
    echo '$b='.$b.'<br />';
 
    $a = $a.'&'.$b;//使用&连接两个字符串
 
    // 根据&进行字符串分割
    $b = explode('&', $a);
    $a = $b[1];
    $b = $b[0];
 
    echo '$a='.$a.'<br />';
    echo '$b='.$b.'<br />';
?>

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

变量默认总是传值赋值。

那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。

PHP 也提供了另外一种方式给变量赋值:引用赋值。

这意味着新的变量简单的引用(换言之,“成为其别名” 或者 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个&符号加到将要赋值的变量前(源变量)。

对象默认是传引用。

对于较大的数据,传引用比较好,这样可以节省内存的开销。

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

<?php
    $num = 10;
    function multipy($num){
        $num = $num +10;
    }
    multipy($num);
    echo $num;
?>

输出 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 传送给函数的是它的值,当函数改变这个变量的值时,只有这个函数才见到新值,应用的其他部分仍然见到旧值。

12. 将 1234567890 转换成 1,234,567,890 每 3 ���用逗号隔开的形式。(百度)

<?php
    $str ='1234567890';
    function str($str)
    {
        // 反转字符串,得到0987654321
        $str = strrev($str);
        // 使用逗号分割字符串,得到098,765,432,1,
        $str = chunk_split($str,3,',');
 
        // 再次反转字符串,得到,1,234,567,890
        $str = strrev($str);
        // 去掉左边的",",得到1,234,567,890
        $str = ltrim($str,',');
        return $str;
    }
    echo str($str);
?>

相关题目 1:如何实现字符串翻转?

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

<?php
    header("Content-Type:text/html;charset=utf-8");
 
    /**
     * 反转utf8编码的中文字符串
     * @param string $str
     * @return string
    */
    function strrev_utf8($str)
    {
        return join("",array_reverse(preg_split("//u", $str)));
    }
 
    // 实例
    $str = "悄悄是别离的笙箫";
    echo strrev_utf8($str);
?>

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

<?php
    $str = "www.baidu.com";
    echo strrev(str_replace('www','',$str));
?>

13. 用 PHP 写出显示客户端 IP 与服务器 IP 的代码。

客户端 IP:$_SERVER["REMOTE_ADDR"]

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

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

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

获取参数,使用$_SERVER["QUERY_STRING"]

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

foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。

@foo() 在执行这个函式时,会隐藏所有上述的错误讯息。

很多应用程序都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的错误信息,这是不对的,因为错误不该被隐藏,你必须妥善处理它们,可能的话解决它们。

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

attachments-2022-06-IILbiUr962ac1bd9020ec.jpeg

  • 发表于 2021-05-28 11:21
  • 阅读 ( 529 )
  • 分类:PHP开发

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章