PHP程序員必須會的 45 個PHP 面試題(第一部分)

Q1: == 和 === 之間有什麼區別?

話題: PHP
困難: ⭐

  • 如果是兩個不同的類型,運算符 == 則在兩個不同的類型之間進行強制轉換
  • === 操作符執行’類型安全比較

這意味着只有當兩個操作數具有相同的類型和相同的值時,它纔會返回 TRUE。

1 === 1: true
1 == 1: true
1 === "1": false // 1 是一個整數, "1" 是一個字符串
1 == "1": true // "1" 強制轉換爲整數,即1
"foo" === "foo": true // 這兩個操作數都是字符串,並且具有相同的值

爲了能夠通過引用傳遞變量,我們在其前面使用&,如下所示:

$var1 = &$var2

Q3: $GLOBAL 是什麼意思?

話題: PHP
困難: ⭐
$GLOBALS是關聯數組,包含對腳本全局範圍內當前定義的所有變量的引用。

Q4: ini_set () 有什麼用處?

話題: PHP
困難: ⭐

PHP 允許用戶使用 ini_set () 修改 php.ini 中提到的一些設置。此函數需要兩個字符串參數。第一個是要修改的設置的名稱,第二個是要分配給它的新值。

給定的代碼行將啓用腳本的 display_error 設置 (如果它被禁用)。

ini_set('display_errors', '1');

我們需要將上面的語句放在腳本的頂部,以便該設置一直保持啓用狀態,直到最後。此外,通過 ini_set () 設置的值僅適用於當前腳本。此後,PHP 將開始使用 php.ini 中的原始值。

Q5: 我應該在什麼時候使用 require 和 include 呢?

話題: PHP
困難: ⭐⭐

require() 函數與 include() 函數相同,只是它處理錯誤的方式不同。如果出現錯誤,include() 函數會生成警告,但腳本會繼續執行。require() 函數會產生致命錯誤,腳本會停止。

我的建議是 99.9% 的時間裏只使用 require_once

使用 requireinclude 代替意味着您的代碼在其他地方不可重用,即您引入的腳本實際上是在執行代碼,而不是提供類或某些類功能庫。

Q6: PHP 中的 stdClass 是什麼?

主題: PHP
難度: ⭐⭐

stdClass 只是將其他類型強制轉換爲對象時使用的通用” 空’’類。stdClass 不是 PHP 中對象的基類。這可以很容易地證明:

 class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N'; // 輸出'N'

對於匿名對象,動態屬性等很有用。

考慮 StdClass 的一種簡單使用場景是替代關聯數組。請參見下面的示例,該示例顯示 json_decode() 如何允許獲取 StdClass 實例或關聯數組。

同樣但未在本示例中顯示的SoapClient::__soapCall返回一個StdClass實例。

//帶有StdClass的示例
$json = '{ "foo": "bar", "number": 42 }';
$stdInstance = json_decode($json);

echo $stdInstance - > foo.PHP_EOL; //"bar"
echo $stdInstance - > number.PHP_EOL; //42

//Example with associative array
$array = json_decode($json, true);

echo $array['foo'].PHP_EOL; //"bar"
echo $array['number'].PHP_EOL; //42

Q7: PHP 中的 die () 和 exit () 函數有什麼不同?

話題: PHP
困難: ⭐⭐

沒有區別,它們是一樣的。 選擇die()而不是exit()的唯一好處可能是你節省了額外鍵入一個字母的時間.

Q8: 它們之間的主要區別是什麼

話題: PHP
困難: ⭐⭐

constdefine 的根本區別在於,const 在編譯時定義常量,而 define 在運行時定義常量。

 const FOO = 'BAR';
define('FOO', 'BAR');

// but
if (...) {
    const FOO = 'BAR';    // 無效
}
if (...) {
    define('FOO', 'BAR'); // 有效
}

同樣在 PHP 5.3 之前,const 命令不能在全局範圍內使用。你只能在類中使用它。當你想要設置與該類相關的某種常量選項或設置時,應使用此選項。或者你可能想要創建某種枚舉。一個好的 const 用法的例子是擺脫了魔術數字。

Define 可以用於相同的目的,但只能在全局範圍內使用。它應該僅用於影響整個應用程序的全局設置。

除非你需要任何類型的條件或表達式定義,否則請使用 consts 而不是 define()—— 這僅僅是爲了可讀性!

Q9: isset () 和 array_key_exists () 之間有什麼區別?

話題: PHP
困難: ⭐⭐

  • array_key_exists 它會告訴你數組中是否存在鍵,並在 $a 不存在時報錯。
  • 如果 key 或變量存在且不是 null,isset 纔會返回 true。當 $a 不存在時,isset 不會報錯。

考慮:

$a = array('key1' => 'Foo Bar', 'key2' => null);

isset($a['key1']);             // true
array_key_exists('key1', $a);  // true

isset($a['key2']);             // false
array_key_exists('key2', $a);  // true

Q10: var_dump () 和 print_r () 有什麼不同?

話題: PHP
困難: ⭐⭐

  • var_dump函數用於顯示變量 / 表達式的結構化信息,包括變量類型和變量。數組遞歸瀏覽,縮進值以顯示結構。它還顯示哪些數組值和對象屬性是引用。
  • print_r()函數以我們可讀的方式顯示有關變量的信息。數組值將以鍵和元素的格式顯示。類似的符號用於對象。

考慮:

$obj = (object) array('qualitypoint', 'technologies', 'India');

var_dump($obj)將在屏幕的輸出下方顯示:

object(stdClass)#1 (3) {
 [0]=> string(12) "qualitypoint"
 [1]=> string(12) "technologies"
 [2]=> string(5) "India"
}

print_r($obj)將在屏幕的輸出下方顯示。

stdClass Object ( 
 [0] => qualitypoint
 [1] => technologies
 [2] => India
)

Q11: 解釋不同的 PHP 錯誤是什麼

話題: PHP
困難: ⭐⭐

  • notice 不是一個嚴重的錯誤,它說明執行過程中出現了一些錯誤,一些次要的錯誤,比如一個未定義的變量。
  • 當出現更嚴重的錯誤,如 include () 命令引入不存在的文件時,會給出警告 warning。 這個錯誤和上面的錯誤發生,腳本都將繼續。
  • fatal error 致命錯誤將終止代碼。未能滿足 require () 將生成這種類型的錯誤。

Q12: 如何在 PHP 中啓用錯誤報告?

話題: PHP
困難: ⭐⭐

檢查 php.ini 中的 “display_errors” 是否等於 “on”,或者在腳本中聲明 “ini_set('display_error',1)”。

然後,在你的代碼中包含 “ERROR_REPORTING(E_ALL)”,以便在腳本執行期間顯示所有類型的錯誤消息。

Q13: 使用默認參數聲明某些函數

話題: PHP
困難: ⭐⭐
思考:

function showMessage($hello = false){
  echo ($hello) ? 'hello' : 'bye';
}

Q14: PHP 是否支持多重繼承?

話題: PHP
困難: ⭐⭐
PHP 只支持單一繼承;這意味着使用關鍵字’extended’只能從一個類擴展一個類。

Q15: 在 PHP 中,對象是按值傳遞還是按引用傳遞?

話題: PHP
困難: ⭐⭐

在 PHP 中,通過傳遞的對象。

Q16:a !=b 和 a !==b ,之間有什麼區別?

話題: PHP
困難: ⭐⭐
!=表示不等於(如果 a 不等於b,則爲 True),!==表示不全等(如果 a 與b 不相同,則爲 True).

Q17: 在 PHP 中,什麼是 PDO?

話題: PHP
困難: ⭐⭐

PDO 代表 PHP 數據對象。

它是一組 PHP 擴展,提供核心 PDO 類和數據庫、特定驅動程序。它提供了供應商中立、輕量級的數據訪問抽象層。因此,無論我們使用哪種數據庫,發出查詢和獲取數據的功能都是相同的。它側重於數據訪問抽象,而不是數據庫抽象。

Q18: 說明我們如何在 PHP 中處理異常?

Topic: PHP
Difficulty: ⭐⭐
當程序執行出現異常報錯時,後面的代碼將不會再執行,這時 PHP 將會嘗試匹配第一個 catch 塊進行異常的處理,如果沒有捕捉到異常程序將會報致命錯誤並顯示”Uncaught Exception”。

可以在 PHP 中拋出和捕獲異常。

爲了處理異常,代碼可以被包圍在”try” 塊中.

每個 try 必須至少有一個對應的catch塊 。多個不同的 catch 塊可用於捕獲不同類的異常。

在 catch 塊中也可以拋出異常(或重新拋出之前的異常)。

思考:

try {
    print "this is our try block n";
    throw new Exception();
} catch (Exception $e) {
    print "something went wrong, caught yah! n";
} finally {
    print "this part is always executed n";
}

Q19: 區分 echo 和 print ()

Topic: PHP
Difficulty: ⭐⭐

echoprint 基本上是一樣的。他們都是用來打印輸出數據的。

區別在於:

  • echo 沒有返回值,而 print 的返回值爲 1,因此 print 可以在表達式中使用。
  • echo 可以接受多個參數一起輸出 (但是這種多個的輸出方式很少見),而 print 一次只可以輸出一個參數。
  • echo 的輸出比 print 效率要高一些 .

很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了迷茫沒方向,不知道該從哪兒入手去提升自己。→→管理整理了一些資料,有 騰訊 等一線大廠進階知識體系 可供參考(相關學習資料以及筆面試題)

覆蓋各個技術棧:分佈式架構、高可擴展、高性能、高併發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階乾貨歡迎加入我的官方羣點擊此處

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章