幾道坑人的PHP面試題 試試看看你會不會也中招

2022-10-06 11:54:11 字數 2155 閱讀 8092

這幾道題是在德問上看到的,感覺挺有意思,拿來給大家分享其中的陷阱,看看你會不會掉入其中。

第一題www.cppcns.com

複製** **如下:

$arr = array(0=>1,"aa"=>2, 3, 4);

foreach($arr as $key=>$val)

輸出結果是多少?如果的答案是1534就掉入陷阱了。

先看看這個陣列最終形成的結構:

複製** **如下:

array

(    [0] => 1

[aa] => 2

[1] => 3

[2] => 4

)然後遍歷每乙個元素的key看等不等於aa,等於就用5替代。當我告訴你答案是5534的時候,你會不會有點驚訝!難道0等於"aa"嗎?是的,0就等於"aa",這道題重點就考你這個。在php中兩個值進行邏輯判斷時,如果兩個值的型別不一致php會自動把右邊的值轉換到左邊的型別,然後再進行判斷。因此"aa"轉換整形等於0,自然也就等於左邊的0了。你可以使用全等於避免這種該情況,也就是如果你寫成:

複製** **如下:

print($key === "aa" ? 5 : $val);

那麼答案就是1534了。

第二題複製** **如下:

$i='11';

printf("%d\n",printf("%d",printf("%d",$i)));

輸出結果是多少?如程式設計客棧果你回答是11,或者111111就掉入陷阱了。

先了解printf這個函式,printf不僅是列印函式,它還有返回值。重點就在這

複製** **如下:

var_dump(printf("%d",$i));

你猜猜上面的結果是啥?先是printf列印變數本身11,然後printf會返回乙個變數字串長度的值,11有兩個字元,於是返回2,於是上面語句的執行結果等於:

複製** **如下:

11int(2)

清楚了這一點以後,再回過來看上面的試題,按照優先順序,限制性深度printf函式,列印11,返回2。接著到第二級printf函式,列印2,返回1。最後到第三層,直接列印1,所以執行結果是 1121。

第三題複製** **如下:

$a = 3;

$b = 5;

if($a = 5 || $b = 7)

echo $a . " " . $b;

執行結果是多少?程式設計客棧如果你回答 6 8程式設計客棧 or 4 6 or  6 6,那你就掉入陷阱了。

第乙個陷阱,認為答案等於 4 6 。估計你粗心把  $a = 5 ||  $b = 7  看成 $aodelzp == 5 ||  $b == 7 ,這是新手常犯的錯誤。

第二個陷阱,認為答案等於 6 8。 你識破了  $a = 5 ||  $b = 7 這個**,但你沒有注意到,邏輯或里只要依次執行直到某個表示式結果為true,表示式後邊的就不再執行,$a = 5 返回true,後邊的$b=7就不執行了。

第三個陷阱,認為答案等於 6 6。 ok,你識破了 邏輯或的規則,於是$a=5執行,$b=7不執行,但是你沒有考慮到這裡是邏輯表示式,返回給$a的值是要轉換為布林值的。這樣看。

所以經過以上三個陷阱,你應該知道答案是多少了,其實 $a等於true以後,echo $a 輸出就是1 ,$b值不變,結果就是 1 6 。

第四題複製** **如下:

$count = 5;

function get_count()

++$count;

get_count();

echo get_count();

執行結果是多少?如果你回答 2 ,恭喜,你掉入陷阱了。

其實這道題主要考兩點,第一點是static靜態型別。這種的值永遠都是靜態的,第一次呼叫宣告等於0,並且自增等於1。第二次呼叫,1再自增就等於2。但其實這裡還有一道陷阱,那就是++a與a++的區別,前++是先自增,後++是先返回值再自增,所以結果等於 1。

第五題複製** **如下:

$a = count ("567")  + count(null) + count(false);

echo $a;

如果你回答 3 or 1,恭喜,掉入陷阱了。

因為count(null)等於0,false也算乙個值。所以count(false)等於1。

本文標題: 幾道坑人的php面試題 試試看看你會不會也中招

本文位址:

幾道Vue面試題 看看你會幾道

我的私人部落格 李大玄 我的npm開源庫 李大玄 我的csdn 李大玄 我的掘金 李大玄 嗶哩嗶哩 李大玄 1.vue 例項的 data 屬性,可以在哪些生命週期中獲取到?a.beforecreate b.created c.beforemount d.mounted 正確答案 b c d 因為在建...

幾道PHP的面試題

1.include和require有什麼區別?區別在於他們如何處理失敗,如果require的檔案沒有找到,會造成fatal error,指令碼停止執行,如果include的檔案沒有找到,會顯示警告,但是指令碼會繼續執行。2.給乙個變數賦值為0123,但是輸出該變數的值總是為其他數字,請問這是什麼問題...

幾道有趣的面試題,要不來試試?

去年春招的時候,被面試官考了不少智力題。而我也剛好比較感興趣,所以總結了幾道比較有意思的,僅供娛樂 其實如果仔細想想的話,還是挺有趣的。現在有 1000 瓶藥水,其中有 1 瓶毒藥,毒藥藥性發作致死時間為 1 小時。現在有 1 個小時的時間找出毒藥,那麼至少需要多少只小白鼠來試毒?假設藥水量無限,可...