PHP 面試題



親愛的讀者,這些PHP 程式語言面試問題是專門設計用來讓您熟悉在PHP 程式語言面試中可能遇到的問題型別的。根據我的經驗,好的面試官在面試期間很少會計劃問任何特定問題,通常問題會從該主題的一些基本概念開始,然後根據進一步的討論以及您的回答繼續進行−

PHP 是“PHP: Hypertext Preprocessor”的遞迴縮寫。PHP 是一種伺服器端指令碼語言,嵌入在 HTML 中。它用於管理動態內容、資料庫、會話跟蹤,甚至構建整個電子商務網站。

PHP 的常見用途−

  • PHP 執行系統函式,例如從系統上的檔案建立、開啟、讀取、寫入和關閉它們。

  • PHP 可以處理表單,例如從檔案收集資料、將資料儲存到檔案、透過電子郵件傳送資料、將資料返回給使用者。

  • 透過 PHP,您可以在資料庫中新增、刪除、修改元素。

  • 訪問 Cookie 變數並設定 Cookie。

  • 使用 PHP,您可以限制使用者訪問您網站的某些頁面。

  • 它可以加密資料。

所有 PHP 程式碼都必須包含在 PHP 解析器識別的三個特殊標記之一中。

<?php PHP code goes here ?>
<?    PHP code goes here ?>
<script language="php"> PHP code goes here </script>
Most common tag is the <?php...?>

PHP 配置檔案 php.ini 是影響 PHP 功能的最終和最直接的方式。每次初始化 PHP 時都會讀取 php.ini 檔案。換句話說,無論何時重新啟動 httpd 以用於模組版本,或者對於 CGI 版本的每個指令碼執行。如果您的更改沒有顯示,請記住停止並重新啟動 httpd。如果仍然沒有顯示,請使用 phpinfo() 檢查 php.ini 的路徑。

PHP 解析引擎需要一種方法來區分 PHP 程式碼和頁面中的其他元素。這樣做的機制稱為“轉義到 PHP”。

空格是指您鍵入的通常在螢幕上不可見的字元,包括空格、製表符和回車符(換行符)。PHP 不區分空格意味著空格字元的數量幾乎無關緊要。一個空格字元與多個這樣的字元相同。

不,PHP 部分割槽分大小寫。

以下是在 PHP 中關於變數最重要的資訊。

  • PHP 中的所有變數都以美元符號 ($) 開頭。

  • 變數的值是其最近賦值的值。

  • 變數使用 = 運算子賦值,變數位於左側,要計算的表示式位於右側。

  • 變數可以,但不需要在賦值之前宣告。

  • PHP 中的變數沒有固有型別 - 變數事先不知道它是否將用於儲存數字或字元字串。

  • 在賦值之前使用的變數具有預設值。

  • PHP 在必要時可以很好地自動將型別從一種轉換為另一種。

  • PHP 變數類似於 Perl。

PHP 總共有八種資料型別,我們用它們來構建我們的變數−

  • 整數−是整數,沒有小數點,例如 4195。

  • 雙精度浮點數−是浮點數,例如 3.14159 或 49.1。

  • 布林值−只有兩個可能的值,要麼為真,要麼為假。

  • NULL−是一種特殊型別,它只有一個值:NULL。

  • 字串−是字元序列,例如 'PHP 支援字串操作。'

  • 陣列−是其他值的命名和索引集合。

  • 物件−是程式設計師定義的類的例項,可以打包其他型別的值以及特定於類的函式。

  • 資源−是儲存對 PHP 外部資源(例如資料庫連線)的引用的特殊變數。

變數的命名規則如下−

  • 變數名必須以字母或下劃線字元開頭。

  • 變數名可以由數字、字母、下劃線組成,但不能使用+,-,%,(,),&,等字元。

以下是確定任何非布林型別值的“真值”的規則−

  • 如果值為數字,則當且僅當等於零時為假,否則為真。

  • 如果值為字串,則當字串為空(字元數為零)或為字串“0”時為假,否則為真。

  • NULL 型別的值始終為假。

  • 如果值為陣列,則當它不包含其他值時為假,否則為真。對於物件,包含值表示具有已賦值的成員變數。

  • 有效的資源為真(儘管某些在成功時返回資源的函式在失敗時將返回 FALSE)。

  • 不要使用雙精度浮點數作為布林值。

NULL 是一種特殊型別,它只有一個值:NULL。要為變數賦予 NULL 值,只需像這樣賦值−

$my_var = NULL;

特殊常量 NULL 按約定大寫,但實際上它不區分大小寫;您也可以鍵入−

$my_var = null;

已賦值為 NULL 的變數具有以下屬性

在布林上下文中計算結果為 FALSE。

當使用 IsSet() 函式測試時返回 FALSE。

要定義常量,您必須使用 define() 函式,要檢索常量的值,您只需指定其名稱即可。與變數不同,您不需要在常量前加上 $。

顧名思義,此函式將返回常量的值。當您想要檢索常量的值但不知道其名稱時,這很有用,例如它儲存在變數中或由函式返回。

<?php
define("MINSIZE", 50);
echo MINSIZE;
echo constant("MINSIZE"); // same thing as the previous line
?>

常量只能包含標量資料(布林值、整數、浮點數和字串)。

  • 在常量前面不需要寫美元符號 ($) ,而在變數前面必須寫美元符號。

  • 常量不能透過簡單的賦值來定義,它們只能使用 define() 函式來定義。

  • 可以在任何地方定義和訪問常量,而無需考慮變數作用域規則。

  • 一旦常量被設定,就不能重新定義或取消定義。

PHP 為其執行的任何指令碼提供大量預定義的常量,稱為魔術常量。

_LINE_ - 檔案的當前行號。

_FILE_ - 檔案的完整路徑和檔名。如果在 include 內部使用,則返回包含的檔案的名稱。從 PHP 4.0.2 開始,_FILE_ 始終包含絕對路徑,而在舊版本中,它在某些情況下包含相對路徑。

_FUNCTION_ - 函式名稱。(在 PHP 4.3.0 中新增)從 PHP 5 開始,此常量按宣告返回函式名稱(區分大小寫)。在 PHP 4 中,其值始終為小寫。

_CLASS_ - 類名。(在 PHP 4.3.0 中新增)從 PHP 5 開始,此常量按宣告返回類名(區分大小寫)。在 PHP 4 中,其值始終為小寫。

_METHOD_ - 類方法名稱。(在 PHP 5.0.0 中新增)方法名稱按宣告返回(區分大小寫)。

break 終止 for 迴圈或 switch 語句,並將執行轉移到 for 迴圈或 switch 之後的緊鄰語句。

continue 導致迴圈跳過其主體剩餘部分,並在重新迭代之前立即重新測試其條件。

foreach 語句用於迴圈遍歷陣列。對於每次傳遞,當前陣列元素的值都分配給 $value,並且陣列指標移動一個位置,在下次傳遞中將處理下一個元素。

foreach (array as value)
{
    code to be executed;
}

數字陣列 - 帶有數字索引的陣列。值以線性方式儲存和訪問。

關聯陣列 - 帶有字串作為索引的陣列。這將元素值與鍵值關聯儲存,而不是以嚴格的線性索引順序儲存。

多維陣列 - 包含一個或多個數組的陣列,並且值使用多個索引訪問。

要將兩個字串變數連線在一起,請使用點 (.) 運算子 -

<?php
$string1="Hello World";
$string2="1234";
echo $string1 . " " . $string2;
?>

這將產生以下結果 -

Hello World 1234

strlen() 函式用於查詢字串的長度。讓我們找到字串 "Hello world!" 的長度 -

<?php
echo strlen("Hello world!");
?>

這將產生以下結果 -

12

strpos() 函式用於在字串中搜索字串或字元。如果在字串中找到匹配項,則此函式將返回第一個匹配項的位置。如果未找到匹配項,則返回 FALSE。讓我們看看是否可以在我們的字串中找到字串 "world" -

<?php
echo strpos("Hello world!","world");
?>

這將產生以下結果 -

6

PHP 提供了一個 getenv() 函式來訪問所有環境變數的值。

PHP 設定的環境變數之一是 HTTP_USER_AGENT,它標識使用者的瀏覽器和作業系統。

PHP rand() 函式用於生成隨機數。此函式可以在給定範圍內生成數字。隨機數生成器應進行播種以防止生成規則的數字模式。這是透過使用 srand() 函式實現的,該函式將其引數指定為種子數。

PHP 預設變數 $_PHP_SELF 用於 PHP 指令碼名稱,當您單擊“提交”按鈕時,將呼叫相同的 PHP 指令碼。

PHP header() 函式向瀏覽器提供原始 HTTP 標頭,可用於將其重定向到另一個位置。重定向指令碼應位於頁面的最頂部,以防止載入頁面的任何其他部分。目標由 Location: 標頭指定為 header() 函式的引數。呼叫此函式後,可以使用 exit() 函式停止解析其餘程式碼。

HTTP 標頭將不同於我們傳送 Content-Type 為 text/html\n\n 的實際標頭。在這種情況下,內容型別將為 application/octet-stream,並且實際檔名將與其連線在一起。例如,如果您想使 FileName 檔案可從給定連結下載,則其語法如下。

#!/usr/bin/perl
# HTTP Header
print "Content-Type:application/octet-stream; name=\"FileName\"\r\n";
print "Content-Disposition: attachment; filename=\"FileName\"\r\n\n";
# Actual File Content
open( FILE, "<FileName" );
while(read(FILE, $buffer, 100) )
{
   print("$buffer");
}

PHP 提供了 $_GET 關聯陣列來訪問使用 GET 方法傳送的所有資訊。

PHP 提供了 $_POST 關聯陣列來訪問使用 POST 方法傳送的所有資訊。

PHP $_REQUEST 變數包含 $_GET、$_POST 和 $_COOKIE 的內容。當我們解釋 cookie 時,我們將討論 $_COOKIE 變數。PHP $_REQUEST 變數可用於獲取使用 GET 和 POST 方法傳送的表單資料的結果。

array() - 建立一個數組。

sort() - 對陣列進行排序。

單引號字串幾乎按字面意思處理,而雙引號字串將變數替換為其值,並對某些字元序列進行特殊解釋。

<?php
$variable = "name";
$literally = 'My $variable will not print!\\n';
print($literally);
print "<br />";
$literally = "My $variable will print!\\n";
print($literally);
?>

這將產生以下結果 -

My $variable will not print!\n
My name will print

要將兩個字串變數連線在一起,請使用點 (.) 運算子。

<?php
$string1="Hello World";
$string2="1234";
echo $string1 . " " . $string2;
?>

這將產生以下結果 -

Hello World 1234

PHP $_REQUEST 變數包含 $_GET、$_POST 和 $_COOKIE 的內容。當我們解釋 cookie 時,我們將討論 $_COOKIE 變數。PHP $_REQUEST 變數可用於獲取使用 GET 和 POST 方法傳送的表單資料的結果。

有兩個 PHP 函式可用於將一個 PHP 檔案包含到另一個 PHP 檔案中。

  • include() 函式

  • require() 函式

如果載入檔案時出現任何問題,則 require() 函式會生成致命錯誤並停止指令碼執行,而 include() 函式會生成警告,但指令碼將繼續執行。

PHP fopen() 函式用於開啟檔案。它需要兩個引數,首先是檔名,然後是操作模式。"r" 模式以只讀方式開啟檔案並將檔案指標置於檔案開頭。

使用 fopen() 函式開啟檔案後,可以使用名為 fread() 的函式讀取它。此函式需要兩個引數。這些必須是檔案指標和以位元組表示的檔案長度。

可以使用 filesize() 函式查詢檔案的長度,該函式以檔名作為引數並返回以位元組表示的檔案大小。

可以使用 file_exist() 函式確認檔案是否存在,該函式以檔名作為引數。

是的!如果函式的呼叫者未傳遞引數,則可以將引數設定為具有預設值。

PHP 提供了 setcookie() 函式來設定 cookie。此函式最多需要六個引數,並且應該在 <html> 標記之前呼叫。對於每個 cookie,此函式都必須單獨呼叫。

setcookie(name, value, expire, path, domain, security);

PHP 提供了許多訪問 cookie 的方法。最簡單的方法是使用 $_COOKIE 或 $HTTP_COOKIE_VARS 變數。

您可以使用 isset() 函式檢查 cookie 是否已設定。

要刪除 cookie,您應該只使用名稱引數呼叫 setcookie()。

透過呼叫 session_start() 函式可以輕鬆啟動 PHP 會話。此函式首先檢查會話是否已啟動,如果未啟動則啟動一個會話。建議將對 session_start() 的呼叫放在頁面的開頭。

會話變數儲存在名為 $_SESSION[] 的關聯陣列中。在會話的生命週期內可以訪問這些變數。

使用 isset() 函式檢查會話變數是否已設定。

以下是如何取消設定單個變數的示例 -

<?php
   unset($_SESSION['counter']);
?>

可以使用 session_destroy() 函式銷燬 PHP 會話。

PHP 使用 mail() 函式傳送電子郵件。此函式需要三個必填引數,分別指定收件人的電子郵件地址、郵件主題和實際郵件,此外還有另外兩個可選引數。

mail( to, subject, message, headers, parameters );

這是一個全域性 PHP 變數。此變數是一個關聯雙維度陣列,並儲存與上傳檔案相關的所有資訊。

使用 $_FILES['file']['tmp_name'] - 它提供了對 Web 伺服器臨時目錄中上傳檔案的訪問許可權。

使用 $_FILES['file']['name'] - 它提供了上傳檔案的實際名稱。

使用 $_FILES['file']['size'] - 它提供了上傳檔案的大小(以位元組為單位)。

使用 $_FILES['file']['type'] - 它提供了上傳檔案的 MIME 型別。

使用 $_FILES['file']['error'] - 它提供了與該檔案上傳相關的錯誤程式碼。

$GLOBALS - 包含對當前在指令碼全域性範圍內可用的所有變數的引用。此陣列的鍵是全域性變數的名稱。

$_SERVER - 這是一個包含諸如標頭、路徑和指令碼位置等資訊的陣列。此陣列中的條目由 Web 伺服器建立。不能保證每個 Web 伺服器都會提供其中任何一個。請參閱下一節以獲取所有 SERVER 變數的完整列表。

$_COOKIE - 透過 HTTP cookie 傳遞給當前指令碼的變數的關聯陣列。

$_SESSION - 包含當前指令碼可用的會話變數的關聯陣列。

$_PHP_SELF - 包含呼叫它的 PHP 指令碼檔名的字串。

$php_errormsg - $php_errormsg 是一個包含 PHP 生成的最後一個錯誤訊息文字的變數。

ereg() - ereg() 函式在由 string 指定的字串中搜索由 pattern 指定的字串,如果找到該模式則返回 true,否則返回 false。

eregi() - eregi() 函式在由 pattern 指定的字串中搜索由 string 指定的字串。搜尋不區分大小寫。

split() 函式會將字串劃分為多個元素,每個元素的邊界基於字串中模式的出現。

preg_match() - preg_match() 函式在字串中搜索模式,如果模式存在則返回 true,否則返回 false。

preg_split() 函式的工作方式與 split() 完全相同,只是正則表示式作為模式的輸入引數被接受。

使用 Exception 類的 getMessage() 方法,該方法返回異常的訊息。

使用 Exception 類的 getCode() 方法,該方法返回異常的程式碼。

使用 Exception 類的 getFile() 方法,該方法返回原始檔名。

使用 Exception 類的 getLine() 方法,該方法返回源行。

使用 Exception 類的 getTrace() 方法,該方法返回回溯的陣列。

使用 Exception 類的 getTraceAsString() 方法,該方法返回跟蹤的格式化字串。

PHP 的 time() 函式為您提供有關當前日期和時間的所有必要資訊。它不需要任何引數,但會返回一個整數。

getdate() 函式可以選擇性地接受時間戳並返回一個包含日期資訊的關聯陣列。如果省略時間戳,它將使用 time() 返回的當前時間戳。

date() 函式返回一個表示日期的格式化字串。您可以透過必須傳遞給它的字串引數,對 date() 返回的格式進行大量控制。

PHP 提供 mysql_connect 函式來開啟資料庫連線。

connection mysql_connect(server,user,passwd,new_link,client_flag);

PHP 使用 mysql_query 函式來建立 MySQL 資料庫。此函式接受兩個引數,並在成功時返回 TRUE,失敗時返回 FALSE。

bool mysql_query( sql, connection );

PHP 提供了最簡單的函式 mysql_close 來關閉資料庫連線。此函式接受 mysql_connect 函式返回的連線資源。它在成功時返回 TRUE,失敗時返回 FALSE。

bool mysql_close ( resource $link_identifier );

如果沒有指定資源,則關閉上次開啟的資料庫。

PHP 5 的新 SimpleXML 模組使解析 XML 文件變得非常簡單。它將 XML 文件轉換為一個物件,該物件提供對 XML 的結構化訪問。要從儲存在字串中的 XML 文件建立 SimpleXML 物件,請將該字串傳遞給 simplexml_load_string( )。它返回一個 SimpleXML 物件。

是的!

PHP 提供了一個名為 __construct() 的特殊函式來定義建構函式。您可以將任意多個引數傳遞給建構函式。

與建構函式類似,您可以使用函式 __destruct() 定義解構函式。您可以在解構函式中釋放所有資源。

變數 $this 是一個特殊變數,它指的是同一個物件,即自身。

定義好類之後,就可以根據該類型別建立任意多個物件。以下是如何使用 new 運算子建立物件的示例。

$physics = new Books;
$maths = new Books;
$chemistry = new Books;

建立物件後,就可以呼叫與該物件相關的成員函式。一個成員函式只能處理相關物件的成員變數。以下示例展示瞭如何透過呼叫成員函式來設定三本書的標題和價格。

$physics−>setTitle( "Physics for High School" );
$chemistry−>setTitle( "Advanced Chemistry" );
$maths−>setTitle( "Algebra" );
$physics−>setPrice( 10 );
$chemistry−>setPrice( 15 );
$maths−>setPrice( 7 );

子類中的函式定義會覆蓋父類中具有相同名稱的定義。在子類中,我們可以修改從父類繼承的函式的定義。

定義介面是為了為實現者提供通用的函式名稱。不同的實現者可以根據自己的需求實現這些介面。可以說,介面是開發人員實現的骨架。

PHP 5 引入了 final 關鍵字,它透過在定義前加上 final 來阻止子類重寫方法。如果類本身被定義為 final,則不能擴充套件它。

接下來是什麼?

接下來,您可以回顧一下您之前完成的與該主題相關的作業,並確保您能夠自信地談論它們。如果您是應屆畢業生,面試官不會期望您能回答非常複雜的問題,而是需要您將基本概念掌握牢固。

其次,如果您無法回答一些問題,其實並不重要,重要的是您回答的任何問題都必須充滿自信。所以在面試時要保持自信。我們在 tutorialspoint 祝您面試順利,並祝您未來一切順利。乾杯 :-)

廣告