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
。
使用 require
或 include
代替意味着您的代碼在其他地方不可重用,即您引入的腳本實際上是在執行代碼,而不是提供類或某些類功能庫。
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
困難: ⭐⭐
const
和 define
的根本區別在於,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:b 和 b ,之間有什麼區別?
話題: PHP
困難: ⭐⭐
!=
表示不等於(如果 b,則爲 True),!==
表示不全等(如果 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: ⭐⭐
echo
和 print
基本上是一樣的。他們都是用來打印輸出數據的。
區別在於:
- echo 沒有返回值,而 print 的返回值爲 1,因此 print 可以在表達式中使用。
- echo 可以接受多個參數一起輸出 (但是這種多個的輸出方式很少見),而 print 一次只可以輸出一個參數。
- echo 的輸出比 print 效率要高一些 .
很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了迷茫沒方向,不知道該從哪兒入手去提升自己。→→管理整理了一些資料,有 騰訊 等一線大廠進階知識體系 可供參考(相關學習資料以及筆面試題)