首頁 > 後端開發 > php教程 > 10題關於PHP的面試題

10題關於PHP的面試題

不言
發布: 2023-03-23 13:28:01
原創
1531 人瀏覽過

這篇文章要跟大家分享的是10題關於PHP的面試題的內容,有需要的朋友可以參考一下


##Q1


第一個問題關於

弱型別

    $str1 ='yabadabadoo';
    $str2 ='yaba';
    if(strpos($str1,$str2)){
    echo"\"". $str1 ."\" contains \"". $str2 ."\"";
    }else{
    echo"\"". $str1 ."\" does not contain \"". $str2 ."\"";
    }
    登入後複製
正確執行的輸出結果:

  1. "yabadabadoo"<span class="str"></span> does <span class="pln"></span>not<span class="kwd"></span> contain <span class="pln"></span>#"yaba"<span class="str"></span>

strpos是傳回字串str2str1的位置,沒有找到則回傳false然而實際上這次回傳了0而在if語句中0也被當作false,所以我們需要對false做型別判斷,正確的程式碼如下:

    $str1 =&#39;yabadabadoo&#39;;
    $str2 =&#39;yaba&#39;;
    if(strpos($str1,$str2)!==false){
    echo"\"". $str1 ."\" contains \"". $str2 ."\"";
    }else{
    echo"\"". $str1 ."\" does not contain \"". $str2 ."\"";
    }
    登入後複製
需要注意的是我們使用了

!==#,在php 和JS中= !相對= = 更為嚴格需要要求資料型別一致。

Q2

下面的輸出結果會是怎麼樣?

    $x =5;
    echo $x;
    echo"<br />";
    echo $x+++$x++;
    echo"<br />";
    echo $x;
    echo"<br />";
    echo $x---$x--;
    echo"<br />";
    echo $x;
    登入後複製
實際執行結果是

  1. 5<span class="lit"></span>

  2. 11<span class="lit"></span>

  3. 7<span class="lit"></span>

  4. #1<span class="lit"></span>

  5. #5<span class="lit"></span>

關於 

$x  和 $x--這個問題其實很容易遇見,我們只要記住##​​#$x 使用最近的值,然後才自增。 運算子的優先級,

 是明顯高於  ,因此先執行 再執行 。關於運算符的優先級,有的時候我們真的可以透過括號來讓我們的程式更讓人直觀的了解,畢竟程式碼不光是用來執行的,有的時候或許團隊的可讀性也是提高效率的一種。 Q3

關於變數的引用;

$a =&#39;1&#39;;
$b =&$a;
$b ="2$b";
登入後複製
  1. 請問 
$a

 和 $ b的值各位多少部分第一時間會想到 

$a='1' $b='21'

,仔細一看 $b=&$a,這裡$b是變數$a的引用而不是直接賦值。 <h4 style="color:rgb(51,51,51);font-family:tahoma, &#39;宋体&#39;;font-size:14px;background-color:rgb(250,250,252);">Q4</h4><p style="color:rgb(51,51,51);font-family:tahoma, &#39;宋体&#39;;font-size:14px;background-color:rgb(250,250,252);">下面是true还是false</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">var_dump(0123==123); var_dump(&amp;#39;0123&amp;#39;==123); var_dump(&amp;#39;0123&amp;#39;===123); var_dump(0123 == 123);// false,PHP会默认把0123当作8进制来处理,实际转化为10进制就是83,显然这不是相等的。 var_dump(&amp;#39;0123&amp;#39; == 123);// true这里php会非常有趣的将&amp;#39;0123&amp;#39;转换成一个数字而且默认去掉了前面的0也就是123==123 var_dump(&amp;#39;0123&amp;#39; === 123);// false很显然上面的问题已经说过了数字和字符串类型不一致。</pre><div class="contentsignin">登入後複製</div></div><h4 style="color:rgb(51,51,51);font-family:tahoma, &#39;宋体&#39;;font-size:14px;background-color:rgb(250,250,252);">Q5</h4><p style="color:rgb(51,51,51);font-family:tahoma, &#39;宋体&#39;;font-size:14px;background-color:rgb(250,250,252);">下面的代码有什么问题吗?输出会是什么,怎样修复它</p><ol class="linenums list-paddingleft-2" style="color:rgb(51,51,51);font-family:tahoma, &#39;宋体&#39;;font-size:14px;background-color:rgb(250,250,252);"><li><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$referenceTable =array(); $referenceTable[&amp;#39;val1&amp;#39;]=array(1,2); $referenceTable[&amp;#39;val2&amp;#39;]=3; $referenceTable[&amp;#39;val3&amp;#39;]=array(4,5); $testArray =array(); $testArray = array_merge($testArray, $referenceTable[&amp;#39;val1&amp;#39;]); var_dump($testArray); $testArray = array_merge($testArray, $referenceTable[&amp;#39;val2&amp;#39;]); var_dump($testArray); $testArray = array_merge($testArray, $referenceTable[&amp;#39;val3&amp;#39;]); var_dump($testArray);</pre><div class="contentsignin">登入後複製</div></div></li></ol><p style="color:rgb(51,51,51);font-family:tahoma, &#39;宋体&#39;;font-size:14px;background-color:rgb(250,250,252);">实际输出如下:</p><ol class="linenums list-paddingleft-2" style="color:rgb(51,51,51);font-family:tahoma, &#39;宋体&#39;;font-size:14px;background-color:rgb(250,250,252);"><li><p><code><span class="kwd">array</span><span class="pun">(</span><span class="lit">2</span><span class="pun">)</span><span class="pun">{</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]=></span><span class="kwd">int</span><span class="pun">(</span><span class="lit">1</span><span class="pun">)</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]=></span><span class="kwd">int</span><span class="pun">(</span><span class="lit">2</span><span class="pun">)</span><span class="pun">}</span>

  • <span class="pln">NULL</span>

  • <span class="pln">NULL</span>

  • 运行的时候你或许还能看到下面的警告

    1. <span class="typ">Warning</span><span class="pun">:</span><span class="pln"> array_merge</span><span class="pun">():</span><span class="typ">Argument</span><span class="com">#</span><span class="lit">2</span><span class="kwd">is</span><span class="kwd">not</span><span class="pln"> an </span><span class="kwd">array</span>

    2. <span class="typ">Warning</span><span class="pun">:</span><span class="pln"> array_merge</span><span class="pun">():</span><span class="typ">Argument</span><span class="com">#</span><span class="lit">1</span><span class="kwd">is</span><span class="kwd">not</span><span class="pln"> an </span><span class="kwd">array</span>

    array_merge需要传入的参数都是数组,如果不是,则会返回null。 你可以这样修改

    1. <span class="pln">$testArray </span><span class="pun">=</span><span class="pln"> array_merge</span><span class="pun">(</span><span class="pln">$testArray</span><span class="pun">,</span><span class="pun">(</span><span class="kwd">array</span><span class="pun">)</span><span class="pln">$referenceTable</span><span class="pun">[</span><span class="str">&#39;val1&#39;</span><span class="pun">]);</span>

    2. <span class="pln">var_dump</span><span class="pun">(</span><span class="pln">$testArray</span><span class="pun">);</span>

    3. <span class="pln">$testArray </span><span class="pun">=</span><span class="pln"> array_merge</span><span class="pun">(</span><span class="pln">$testArray</span><span class="pun">,</span><span class="pun">(</span><span class="kwd">array</span><span class="pun">)</span><span class="pln">$referenceTable</span><span class="pun">[</span><span class="str">&#39;val2&#39;</span><span class="pun">]);</span>

    4. <span class="pln">var_dump</span><span class="pun">(</span><span class="pln">$testArray</span><span class="pun">);</span>

    5. <span class="pln">$testArray </span><span class="pun">=</span><span class="pln"> array_merge</span><span class="pun">(</span><span class="pln">$testArray</span><span class="pun">,</span><span class="pun">(</span><span class="kwd">array</span><span class="pun">)</span><span class="pln">$referenceTable</span><span class="pun">[</span><span class="str">&#39;val3&#39;</span><span class="pun">]);</span>

    6. <span class="pln">var_dump</span><span class="pun">(</span><span class="pln">$testArray</span><span class="pun">);</span>

    Q6

    $x应该是输出什么?

    1. $x =trueandfalse;
      var_dump($x);
      登入後複製

    部分同学或许会第一时间想到false,实际上这里依旧是强调运算符的优先级,= 会比 and级别高点,因此等同下面的代码

    1. <span class="pln">$x </span><span class="pun">=</span><span class="kwd">true</span><span class="pun">;</span>

    2. <span class="kwd">true</span><span class="kwd">and</span><span class="kwd">false</span>

    答案显而易见。

    Q7

    经过下面的运算 $x的值应该是多少?

    1. $x =3+"15%"+"$25"
      登入後複製

    答案是18,PHP是会根据上下文实现类型的自动转换

    上面的代码我们可以这样理解,如果我们在与字符串进行数学运算,实际php会尽可能将字符串中的数组进行转换,如果是数字开头的话则转换成改数字比如"15%"会变成15,如果不是数字开头则会变成0; 上面的运算类似下面 :

    1. <span class="pln">$x </span><span class="pun">=</span><span class="lit">3</span><span class="pun">+</span><span class="lit">15</span><span class="pun">+</span><span class="lit">0</span>

    Q8

    运行下面的代码,$text 的值是多少?strlen($text)又会返回什么结果?

    1. $text =&#39;John &#39;;
      $text[10]=&#39;Doe&#39;;
      登入後複製

    上面代码执行完毕后 $text = "John D"(John后面会有连续的5个空格) strlen($text)会返回11

    $text[10] = "Doe"给某个字符串具体的某个位置具体字符时候,实际只会把D赋给$text. 虽然$text才开始只有5个自负长度,但是php会默认填充空格。这和别的语言有些差别。

    Q9

    下面的输出结果会是什么

    1. $v =1;
      $m =2;
      $l =3;
      if( $l > $m > $v){
      echo"yes";
      }else{
      echo"no";
      }
      登入後複製

    实际的输出是"no",只要仔细分析就不难得出

    $l>$m 会转换成1 ,则这个时候再和$m比较。

    Q10

    执行下面代码$x会变成什么值呢?

    $x = NULL;
    if(&#39;0xFF&#39;==255){
    $x =(int)&#39;0xFF&#39;;
    }
    登入後複製
    1. 实际的运行结果是

    2. $x=0
    3. 而不是255.


    首先'oxFF' == 255我们好判断,会进行转换将16进制数字转换成10进制数字,0xff -> 255.

    PHP使用is_numeric_string 判断字符串是否包含十六进制数字然后进行转换。

    但是$x = (int)'0xFF';是否也会变成255呢?显然不是,将一个字符串进行强制类型转换实际上用的是convert_to_long,它实际上是将字符串从左向右进行转换,遇到非数字字符则停止。因此0xFF到x就停止了。所以$x=0

    相关推荐:

    php面试必问的面试问题

    php面试题总结分享

    PHP面试题目整理分享

    以上是10題關於PHP的面試題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    相關標籤:
    來源:php.cn
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    作者最新文章
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板