這篇文章要跟大家分享的是10題關於PHP的面試題的內容,有需要的朋友可以參考一下
弱型別
$str1 ='yabadabadoo'; $str2 ='yaba'; if(strpos($str1,$str2)){ echo"\"". $str1 ."\" contains \"". $str2 ."\""; }else{ echo"\"". $str1 ."\" does not contain \"". $str2 ."\""; }
"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是傳回字串
str2在
str1的位置,沒有找到則回傳
false然而實際上這次回傳了
0而在if語句中0也被當作false,所以我們需要對false做型別判斷,正確的程式碼如下:
$str1 ='yabadabadoo'; $str2 ='yaba'; if(strpos($str1,$str2)!==false){ echo"\"". $str1 ."\" contains \"". $str2 ."\""; }else{ echo"\"". $str1 ."\" does not contain \"". $str2 ."\""; }
!==#,在php 和JS中
= !相對
= = 更為嚴格需要要求資料型別一致。
$x =5; echo $x; echo"<br />"; echo $x+++$x++; echo"<br />"; echo $x; echo"<br />"; echo $x---$x--; echo"<br />"; echo $x;
5<span class="lit"></span>
11<span class="lit"></span>
7<span class="lit"></span>
#1<span class="lit"></span>
#5<span class="lit"></span>
$x 和
$x--這個問題其實很容易遇見,我們只要記住###$x
使用最近的值,然後才自增。 運算子的優先級,
是明顯高於
,因此先執行 再執行 。關於運算符的優先級,有的時候我們真的可以透過括號來讓我們的程式更讓人直觀的了解,畢竟程式碼不光是用來執行的,有的時候或許團隊的可讀性也是提高效率的一種。 Q3
$a ='1'; $b =&$a; $b ="2$b";
和 $ b
的值各位多少部分第一時間會想到
,仔細一看 $b=&$a
,這裡$b
是變數$a
的引用而不是直接賦值。 <h4 style="color:rgb(51,51,51);font-family:tahoma, '宋体';font-size:14px;background-color:rgb(250,250,252);">Q4</h4><p style="color:rgb(51,51,51);font-family:tahoma, '宋体';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(&#39;0123&#39;==123);
var_dump(&#39;0123&#39;===123);
var_dump(0123 == 123);// false,PHP会默认把0123当作8进制来处理,实际转化为10进制就是83,显然这不是相等的。
var_dump(&#39;0123&#39; == 123);// true这里php会非常有趣的将&#39;0123&#39;转换成一个数字而且默认去掉了前面的0也就是123==123
var_dump(&#39;0123&#39; === 123);// false很显然上面的问题已经说过了数字和字符串类型不一致。</pre><div class="contentsignin">登入後複製</div></div><h4 style="color:rgb(51,51,51);font-family:tahoma, '宋体';font-size:14px;background-color:rgb(250,250,252);">Q5</h4><p style="color:rgb(51,51,51);font-family:tahoma, '宋体';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, '宋体';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[&#39;val1&#39;]=array(1,2);
$referenceTable[&#39;val2&#39;]=3;
$referenceTable[&#39;val3&#39;]=array(4,5);
$testArray =array();
$testArray = array_merge($testArray, $referenceTable[&#39;val1&#39;]);
var_dump($testArray);
$testArray = array_merge($testArray, $referenceTable[&#39;val2&#39;]);
var_dump($testArray);
$testArray = array_merge($testArray, $referenceTable[&#39;val3&#39;]);
var_dump($testArray);</pre><div class="contentsignin">登入後複製</div></div></li></ol><p style="color:rgb(51,51,51);font-family:tahoma, '宋体';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, '宋体';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>
运行的时候你或许还能看到下面的警告
<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>
<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。 你可以这样修改
<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">'val1'</span><span class="pun">]);</span>
<span class="pln">var_dump</span><span class="pun">(</span><span class="pln">$testArray</span><span class="pun">);</span>
<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">'val2'</span><span class="pun">]);</span>
<span class="pln">var_dump</span><span class="pun">(</span><span class="pln">$testArray</span><span class="pun">);</span>
<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">'val3'</span><span class="pun">]);</span>
<span class="pln">var_dump</span><span class="pun">(</span><span class="pln">$testArray</span><span class="pun">);</span>
$x应该是输出什么?
$x =trueandfalse; var_dump($x);
部分同学或许会第一时间想到false,实际上这里依旧是强调运算符的优先级,= 会比 and级别高点,因此等同下面的代码
<span class="pln">$x </span><span class="pun">=</span><span class="kwd">true</span><span class="pun">;</span>
<span class="kwd">true</span><span class="kwd">and</span><span class="kwd">false</span>
答案显而易见。
经过下面的运算 $x的值应该是多少?
$x =3+"15%"+"$25"
答案是18
,PHP是会根据上下文实现类型的自动转换
上面的代码我们可以这样理解,如果我们在与字符串进行数学运算,实际php会尽可能将字符串中的数组进行转换,如果是数字开头的话则转换成改数字比如"15%"会变成15,如果不是数字开头则会变成0; 上面的运算类似下面 :
<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>
运行下面的代码,$text
的值是多少?strlen($text)
又会返回什么结果?
$text ='John '; $text[10]='Doe';
上面代码执行完毕后 $text = "John D"
(John后面会有连续的5个空格) strlen($text)
会返回11
$text[10] = "Doe"
给某个字符串具体的某个位置具体字符时候,实际只会把D赋给$text
. 虽然$text
才开始只有5个自负长度,但是php会默认填充空格。这和别的语言有些差别。
下面的输出结果会是什么
$v =1; $m =2; $l =3; if( $l > $m > $v){ echo"yes"; }else{ echo"no"; }
实际的输出是"no",只要仔细分析就不难得出
$l>$m
会转换成1 ,则这个时候再和$m比较。
执行下面代码$x
会变成什么值呢?
$x = NULL; if('0xFF'==255){ $x =(int)'0xFF'; }
实际的运行结果是
$x=0
而不是255.
首先'oxFF' == 255
我们好判断,会进行转换将16进制数字转换成10进制数字,0xff -> 255.
PHP使用is_numeric_string
判断字符串是否包含十六进制数字然后进行转换。
但是$x = (int)'0xFF';
是否也会变成255呢?显然不是,将一个字符串进行强制类型转换实际上用的是convert_to_long
,它实际上是将字符串从左向右进行转换,遇到非数字字符则停止。因此0xFF
到x就停止了。所以$x=0
相关推荐:
以上是10題關於PHP的面試題的詳細內容。更多資訊請關注PHP中文網其他相關文章!