**1. echo(),print(),print_r()的區別?**
echo 和 print 不是一個函數,是一個語言結構;
print(string $arg) 只有一個參數;
echo arg1,arg2 可以輸出多個參數,返回 void ;
echo 和 print 只能打印出string,不能打印出結構;
print_r能打印出結構。比如:
~~~
$arr = array("key"=>"value");
print_r($arr);
~~~
**2. 語句include和require的區別是什么?**
在失敗的時候:
include 產生一個 warning ,而 require 直接產生錯誤中斷;
require 在運行前載入;
include 在運行時載入;
require_once 和 include_once 可以避免重復包含同一文件。
**3. php中傳值與傳引用有啥區別?**
&表示傳引用;
函數中參數傳引用會將參數進行改變;
一般在輸出參數有多個的時候可以考慮使用引用。
~~~
$num = 10
function multiply($num){
$num = $num * 10;
}
multiply($num);
echo $num;
~~~
**4. 下面哪項沒有將john添加到users數組中?**
~~~
(a) $users[] = 'john';
(b) array_add($users,'john');
(c) array_push($users,'john');
(d) $users ||= 'john';
~~~
答案為bd,php 里面無 array_add 函數,d項為語法錯誤的表達。
**5. HTTP協議中幾個狀態碼的含義。**
~~~
200 : 請求成功,請求的數據隨之返回。
301 : 永久性重定向。
302 : 暫時行重定向。
401 : 當前請求需要用戶驗證。
403 : 服務器拒絕執行請求,即沒有權限。
404 : 請求失敗,請求的數據在服務器上未發現。
500 : 服務器錯誤。一般服務器端程序執行錯誤。
503 : 服務器臨時維護或過載。這個狀態時臨時性的。
~~~
**6. 寫出一些php魔術方法。**
~~~
__construct() 實例化類時自動調用。
__destruct() 類對象使用結束時自動調用。
__set() 在給未定義的屬性賦值的時候調用。
__get() 調用未定義的屬性時候調用。
__isset() 使用isset()或empty()函數時候會調用。
__unset() 使用unset()時候會調用。
__sleep() 使用serialize序列化時候調用。
__wakeup() 使用unserialize反序列化的時候調用。
__call() 調用一個不存在的方法的時候調用。
__callStatic()調用一個不存在的靜態方法是調用。
__toString() 把對象轉換成字符串的時候會調用。比如 echo。
__invoke() 當嘗試把對象當方法調用時調用。
__set_state() 當使用var_export()函數時候調用。接受一個數組參數。
__clone() 當使用clone復制一個對象時候調用。
~~~
**7. MySQL存儲引擎 MyISAM 和 InnoDB 的區別。**
~~~
a. MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持.
b. MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快.
c. InnoDB不支持FULLTEXT類型的索引.
d. InnoDB中不保存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數即可.
e. 對于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯合索引。
f. DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。
g. LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導入數據后再改成InnoDB表,但是對于使用的額外的InnoDB特性(例如外鍵)的表不適用.
h. MyISAM支持表鎖,InnoDB支持行鎖。
~~~
**8. 說出一些MySQL優化方法?**
~~~
a. 設計良好的數據庫結構,允許部分數據冗余,盡量避免join查詢,提高效率。
b. 選擇合適的表字段數據類型和存儲引擎,適當的添加索引。
c. mysql庫主從讀寫分離。
d. 找規律分表,減少單表中的數據量提高查詢速度。
e. 添加緩存機制,比如memcached,apc等。
f. 不經常改動的頁面,生成靜態頁面。
g. 書寫高效率的SQL。比如 SELECT * FROM TABEL 改為 SELECT field_1, field_2, field_3 FROM TABLE.
~~~
**9. 下面$a的結果是:**
~~~
<?php
$a = in_array('01', array('1')) == var_dump('01' == 1);
?>
~~~
A true
B false
答案為B
**10. 說下php中empty()和isset()的區別。**
isset 用于檢測變量是否被設置,使用 isset() 測試一個被設置成 NULL 的變量,將返回 FALSE 。
empty 如果 var 是非空或非零的值,則 empty() 返回 FALSE。換句話說,""、0、"0"、NULL、FALSE、array()、var $var; 以及沒有任何屬性的對象都將被認為是空的,如果 var 為空,則返回 TRUE 。
如果變量為 0 ,則empty()會返回TRUE,isset()會返回TRUE;
如果變量為空字符串,則empty()會返回TRUE,isset()會返回TRUE;
如果變量未定義,則empty()會返回TRUE,isset()會返回FLASE。
注意:isset() 只能用于變量,因為傳遞任何其它參數都將造成解析錯誤。若想檢測常量是否已設置,可使用 defined() 函數。 當要 判斷一個變量是否已經聲明的時候 可以使用 isset 函數;
當要 判斷一個變量是否已經賦予數據且不為空 可以用 empty函數;
當要 判斷 一個變量 存在且不為空 先 isset 函數 再用 empty 函數;