PHP面試題整理

2022-03-18 20:27:24 字數 4582 閱讀 4906

關於empty和isset的介紹,可以看這篇部落格:

bool empty ( mixed$var)

判斷乙個變數是否被認為是空的。當乙個變數並不存在,或者它的值等同於false,那麼它會被認為不存在。如果變數不存在的話,empty()並不會產生警告。

<?php 

var_dump(empty(0)); //bool(true)

var_dump(empty(0.0)); //bool(true)

var_dump(empty('0')); //bool(true)

var_dump(empty('')); //bool(true)

var_dump(empty(' '));//bool(false)

var_dump(empty(trim(' ')));//bool(true)

var_dump(empty(null)); //bool(true)

var_dump(empty(null)); //bool(true)

var_dump(empty($undefine));//bool(true)

var_dump(empty(false)); //bool(true)

var_dump(empty(false)); //bool(true)

var_dump(empty(array()));//bool(true)

?>

bool isset ( mixed$var[, mixed$...] )

檢測變數是否設定,並且不是null

如果已經使用 unset() 釋放了乙個變數之後,它將不再是 isset()。若使用 isset() 測試乙個被設定成null的變數,將返回false。同時要注意的是 null 字元("\0")並不等同於 php 的null常量。

如果一次傳入多個引數,那麼 isset() 只有在全部引數都以被設定時返回true計算過程從左至右,中途遇到沒有設定的變數時就會立即停止。

注意傳入的引數不能使常量或者常量表示式,比如下面的做法是錯誤的:

<?php 

var_dump(isset("123"));//wrong

var_dump(isset(array()));//wrong

var_dump(isset(__file__));//wrong

var_dump(isset(null));//wrong

var_dump(isset(false));//wrong

?>

正確用法:傳入isset的是乙個變數,只要為該變數賦過值(null除外),那麼判斷結果都是true。使用unset對乙個變數進行「銷毀」操作後,再對該變數進行isset判斷,返回的結果是false。

<?php 

$a = '';

var_dump(isset($a));//bool(true)

unset($a);

var_dump(isset($a));//bool(false)

$b = null;

var_dump(isset($b));//bool(false)

$c = false;

var_dump(isset($c));//bool(true)

$d = 0;

var_dump(isset($d));//bool(true)

$arr = array();//空陣列

var_dump(isset($arr));//bool(true)

$arr2 = array("one"=>"demo");

var_dump(isset($arr2));//bool(true)

unset($arr2['one']);

var_dump(isset($arr2));//bool(true)

var_dump(isset($arr2['one']));//bool(false)

?>

bool is_null ( mixed$var)

如果var是 null 則返回true,否則返回false

檢視null型別獲知變數什麼時候被認為是null,而什麼時候不是。

有手冊宣告可知,只要賦給變數的值,並且賦的值不是null,那麼is_null判斷的結果都返回false,即都不認為是空。

<?php 

var_dump(is_null($a=null));//bool(true)

var_dump(is_null($a=0)); //bool(false)

var_dump(is_null($a=''));//bool(false)

var_dump(is_null($a=array()));//bool(false)

var_dump(is_null($a=false));//bool(false)

?>

變數區分大小寫。

函式名不區分大小寫。

<?php 

//直接設定常量

define("test","this is test");

const demo = "this is demo";

echo test; //this is test

echo demo; //this is demo

//使用define時,常量名稱可以是變數,但是變數值是字串

$name = "aaa";

define($name,"this is aaa");

echo aaa; //this is aaa

//const不能這樣使用

const $name = "this is other aaa";//wrong

?>

1、使用define時,常量名可以儲存在乙個變數中,即常量名稱就是變數的值,而const不行。

2、使用define時,指定的值可以是任何形式,比如表示式、變數、以及字面值;而使用const時,指定的值只能是字面值,不能是表示式或者變數。

3、在class內部宣告常量只能用const,不能使用define。

4、define可以出現在判斷和迴圈中,而const不行。 

<?php 

while($i<10)

if($i) else

?>

有興趣的話,可以參考c和c++中的define和const:

可以參考麥子學院課程: 

有乙個日期,,輸出data的上周末的日期。

php陣列隨機打亂函式是? 過濾陣列中空的元素的函式是?

php中自動載入類是怎麼實現的?

寫乙個正則,實現路由匹配 /live/index?roomid=1001 成 /1001

寫乙個函式, 實現在乙個陣列的任意位置插入乙個值。要求盡量簡潔高效。

乙個勳章的名字是不超過4個字元的(1個漢字算2個字元)。請簡單寫出這個邏輯判斷的關鍵**。

有乙個所有正在直播的房間的列表roomlist,包括roomid, title, uid, online 字段資訊,請把roomlist按照online欄位正序排列。

unset($_cookie['bili_uid') 會刪除本地的cookie嗎?

請簡單描述 session 的實現原理。如何實現session同步到伺服器集群?

請簡單描述redis和memcache的區別和各自的利弊。以及哪種場景用哪個更合適?

請用文字或者關鍵**說明如何用redis實現乙個7日禮物投喂榜。榜單迴圈7日變化,第8天會刪掉第1天的資料(不是自然周的7天)

請寫出 5 個mysql中你常用的函式或者常量,以及各自的作用。

分庫分表的目的是什麼? 一般如何資料表水平拆分資料表。

請簡單描述單索引和聚合索引的區別。哪些場景各自適合?

有一張表 user(uid, uname, face, register_time, last_login_time) 裡面有 幾千萬條記錄,索引欄位是uid。寫出關鍵sql,要求使用索引,高效的取出50000000後的10條資料。

php-fpm程序分配有哪幾種方式?如何選擇?

linux中,檢視當前php的版本的系統命令是? 檢視 php-fpm 的程序的命令是? 檢視埠號 6379 的程序的命令是? 重啟 nginx 的命令是?

檢視記憶體占用的命令是? 能夠實時顯示系統中各個程序的資源占用狀況的命令是?

寫乙個nginx簡單的 rewrite 實現由  跳轉到 

簡述tcp三次握手的過程?

寫出 5 個你接觸過的 http 的狀態碼,分別代表什麼意思?

php面試題簡略整理

假如某 要秒殺一定量的小公尺手機,我們要怎麼做一些高併發的處理 這裡我們可以看到秒殺成功的第乙個使用者的id是208522,秒殺成功的最後乙個使用者是176260,參與秒殺人數總共 是20w。讓大家注意這些的原因是為了驗證下面的準確性 接下來我們依次從佇列中把秒殺成功的500個使用者取出來並觀察第乙...

面試題 PHP面試題

建議 比如是系統配置,缺少了無法執行,自然使用 require 如果某一段程式少了,只是少了統計 訪問的,不是必不可少的。可以使用 include 而加不加 once 就是效率上的區別,雖然系統會幫你考慮只包含一次,但系統的判斷會降低效率,因此,更應該在開發之初,把目錄結構調整高好,盡量不使用 on...

面試題整理

2014.3.19日整理 1.建立一張表hack 裡面就乙個欄位num,然後用sql語句從1開始插入到100,怎麼寫?oracle 答 1.create tablehack num number 建表語句 2.begin for i in1.100loop insert intohack num v...