1. 程式人生 > >PHP基礎知識點

PHP基礎知識點

     1、PHP處理資料庫的常用函式?(重點看函式的‘引數’和‘返回值’)。

       mysql_affected_rows: 得到 MySQL 最後操作影響的列數目   mysql_close: 關閉 MySQL 伺服器連線。   mysql_connect: 開啟 MySQL 伺服器連線。   mysql_create_db: 建立一個 MySQL 新資料庫。   mysql_data_seek: 移動內部返回指標。   mysql_db_query: 送查詢字串 (query) 到 MySQL 資料庫。   mysql_drop_db: 移除資料庫。   mysql_errno: 返回錯誤資訊程式碼。   mysql_error: 返回錯誤資訊。   mysql_fetch_array: 返回陣列資料。   mysql_fetch_field: 取得欄位資訊。   mysql_fetch_lengths: 返回單列各欄資料最大長度。   mysql_fetch_object: 返回類資料。   mysql_fetch_row: 返回單列的各欄位。   mysql_field_name: 返回指定欄位的名稱。   mysql_field_seek: 配置指標到返回值的某欄位。   mysql_field_table: 獲得目前欄位的資料表 (table) 名稱。   mysql_field_type: 獲得目前欄位的型別。   mysql_field_flags: 獲得目前欄位的標誌。   mysql_field_len: 獲得目前欄位的長度。   mysql_free_result: 釋放返回佔用記憶體。   mysql_insert_id: 返回最後一次使用 INSERT 指令的 ID。   mysql_list_fields: 列出指定資料表的欄位 (field)。   mysql_list_dbs: 列出 MySQL 伺服器可用的資料庫 (database)。   mysql_list_tables: 列出指定資料庫的資料表 (table)。   mysql_num_fields: 取得返回欄位的數目。   mysql_num_rows: 取得返回列的數目。   mysql_pconnect: 開啟 MySQL 伺服器持續連線。   mysql_query: 送出一個 query 字串。   mysql_result: 取得查詢 (query) 的結果。   mysql_select_db: 選擇一個數據庫。   mysql_tablename: 取得資料表名稱。

2、PHP操作檔案的常用函式?(重點看函式的‘引數’和‘返回值’)

(1)開啟檔案 fopen()

(2)讀取檔案 fgets()  ;  注:file_get_contents()也是讀取檔案

(3)寫入檔案fwrite()  ;  注:file_put_contents()同樣可以寫入檔案

(4)關閉檔案控制代碼 fclose()

(5)移動 / 重新命名檔案 rename()

(6)複製檔案 copy()

(7)建立檔案 vim  或 touch

(8)刪除檔案 unlink() 

(9)獲取檔案上次訪問的時間 fileatime()

(10)獲取檔案上次修改的時間 filemtime()

(11)獲取檔案大小 filesize()

(12)獲取檔案型別  filetype()

(13)獲取檔案詳細資訊 state()

(14)判斷是否是目錄 is_dir()

3、Memcache和Redis區別

Redis中,並不是所有的資料都一直儲存在記憶體中的,這是和Memcached相比一個最大的區別。 Redis在很多方面具備資料庫的特徵,或者說就是一個數據庫系統,而Memcached只是簡單的K/V快取。 他們的擴充套件都需要做叢集;實現方式:master-slave、Hash。 在100k以上的資料中,Memcached效能要高於Redis。 如果要說記憶體使用效率,使用簡單的key-value儲存的話,Memcached的記憶體利用率更高,而如果Redis採用hash結構來做key-value儲存,由於其組合式的壓縮,其記憶體利用率會高於Memcached。當然,這和你的應用場景和資料特性有關。 如果你對資料持久化和資料同步有所要求,那麼推薦你選擇Redis,因為這兩個特性Memcached都不具備。即使你只是希望在升級或者重啟系統後快取資料不會丟失,選擇Redis也是明智的。 Redis和Memcache在寫入效能上面差別不大,讀取效能上面尤其是批量讀取效能上面Memcache更強 4、什麼是面向物件?

面向物件是一種思想,是基於面向過程而言的,就是說面向物件是將功能等通過物件來實現,將功能封裝進物件之中,讓物件去實現具體的細節。

面向物件有三大特徵:封裝性、繼承性、多型性。

現在純正的OO語言主要是 Java 和 C#,PHP、C++也支援OO,C是面向過程的。

5、簡述 private、 protected、 public修飾符的訪問許可權。

private : 私有成員, 在類的內部才可以訪問。

protected : 保護成員,該類內部和繼承類中可以訪問。

public : 公共成員,完全公開,沒有訪問限制。

6、堆和棧的區別?

棧是編譯期間就分配好的記憶體空間,因此你的程式碼中必須就棧的大小有明確的定義;

堆是程式執行期間動態分配的記憶體空間,你可以根據程式的執行情況確定要分配的堆記憶體的大小。

7、XML 與 HTML 的主要區別

語法要求不同:

(1)在html中不區分大小寫,在xml中嚴格區分。

(2)在HTML中,有時不嚴格,如果上下文清楚地顯示出段落或者列表鍵在何處結尾,那麼你可以省略</p>或者</li>之類的結束標記。在XML中,是嚴格的樹狀結構,絕對不能省略掉結束標記。

(3) 在XML中,擁有單個標記而沒有匹配的結束標記的元素必須用一個/ 字元作為結尾。這樣分析器就知道不用查詢結束標記了。

(4)在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。 

(5)在HTML中,可以擁有不帶值的屬性名。在XML中,所有的屬性都必須帶有相應的值。 

(6) 在XML文件中,空白部分不會被解析器自動刪除;但是html是過濾掉空格的。

標記不同:

(1)html使用固有的標記;而xml沒有固有的標記。

(2)Html標籤是預定義的;XML標籤是免費的、自定義的、可擴充套件的。

作用不同:

(1)html是用來顯示資料的;xml是用來描述資料、存放資料的,所以可以作為持久化的介質!Html將資料和顯示結合在一起,在頁面中把這資料顯示出來;xml則將資料和顯示分開。 XML被設計用來描述資料,其焦點是資料的內容。HTML被設計用來顯示資料,其焦點是資料的外觀。

(2)xml不是HTML的替代品,xml和html是兩種不同用途的語言。 XML 不是要替換 HTML;實際上XML 可以視作對 HTML 的補充。XML 和HTML 的目標不同HTML 的設計目標是顯示資料並集中於資料外觀,而XML的設計目標是描述資料並集中於資料的內容。

(3)對於XML最好的形容可能是: XML是一種跨平臺的,與軟、硬體無關的,處理與傳輸資訊的工具。

(4)XML未來將會無所不在。XML將成為最普遍的資料處理和資料傳輸的工具。

8、面向物件的特徵有哪些方面?

主要有封裝,繼承,多型。如果是4個方面則加上:抽象。

封裝: 封裝是保證軟體部件具有優良的模組性的基礎,封裝的目標就是要實現軟體部件的高內聚,低耦合,防止程式相互依賴性而帶來的變動影響.

繼承: 在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作為自己的內容,並可以加入若干新的內容,或修改原來的方法使之更適合特殊的需要,這就是繼承。繼承是子類自動共享父類資料和方法的機制,這是類之間的一種關係,提高了軟體的可重用性和可擴充套件性。

多型: 多型是指程式中定義的引用變數所指向的具體型別和通過該引用變數發出的方法呼叫在程式設計時並不確定,而是在程式執行期間才確定,即一個引用變數倒底會指向哪個類的例項物件,該引用變數發出的方法呼叫到底是哪個類中實現的方法,必須在由程式執行期間才能決定。

抽象: 抽象就是找出一些事物的相似和共性之處,然後將這些事物歸為一個類,這個類只考慮這些事物的相似和共性之處,並且會忽略與當前主題和目標無關的那些方面,將注意力集中在與當前目標有關的方面。例如,看到一隻螞蟻和大象,你能夠想象出它們的相同之處,那就是抽象。

  9、抽象類和介面的概念以及區別?

抽象類:它是一種特殊的,不能被例項化的類,只能作為其他類的父類使用。使用abstract關鍵字宣告。

介面:它是一種特殊的抽象類,也是一個特殊的類,使用interface宣告。

區別:

(1)抽象類的操作通過繼承關鍵字extends實現,而介面的使用是通過implements關鍵字來實現。

(2)抽象類中有資料成員,可以實現資料的封裝,但是介面沒有資料成員。

(3)抽象類中可以有構造方法,但是介面沒有構造方法。

(4)抽象類的方法可以通過private、protected、public關鍵字修飾(抽象方法不能是private),而介面中的方法只能使用public關鍵字修飾。

(5)一個類只能繼承於一個抽象類,而一個類可以同時實現多個介面。

(6)抽象類中可以有成員方法的實現程式碼,而介面中不可以有成員方法的實現程式碼。

  10、什麼是建構函式,什麼是解構函式,作用是什麼?

建構函式(方法)是物件建立完成後第一個被物件自動呼叫的方法。它存在於每個宣告的類中,是一個特殊的成員方法。作用是執行一些初始化的任務。Php中使用__construct()宣告構造方法,並且只能宣告一個。

解構函式(方法)作用和構造方法正好相反,是物件被銷燬之前最後一個被物件自動呼叫的方法。是PHP5中新新增的內容作用是用於實現在銷燬一個物件之前執行一些特定的操作,諸如關閉檔案和釋放記憶體等。

  11、如何過載父類的方法,舉例說明

過載,即覆蓋父類的方法,也就是使用子類中的方法替換從父類中繼承的方法,也叫方法的重寫。

覆蓋父類方法的關鍵是在子類中創建於父類中相同的方法包括方法的名稱、引數和返回值型別。PHP中只要求方法的名稱相同即可。

  12、常用的魔術方法有哪些?舉例說明

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複製一個物件時候呼叫。

  13、$this和self、parent這三個關鍵詞分別代表什麼?在哪些場合下使用?

$this 當前物件

self 當前類

parent 當前類的父類

$this在當前類中使用,使用->呼叫屬性和方法。

self也在當前類中使用,不過需要使用::呼叫。

parent在類中使用。

14、類中如何定義常量、如何類中呼叫常量、如何在類外呼叫常量。

類中的常量也就是成員常量,常量就是不會改變的量,是一個恆值。

定義常量使用關鍵字const.

例如:const PI = 3.1415326;

無論是類內還是類外,常量的訪問和變數是不一樣的,常量不需要例項化物件,

訪問常量的格式都是類名加作用域操作符號(雙冒號)來呼叫。

即:類名 :: 類常量名;

15、作用域操作符::如何使用?都在哪些場合下使用?

(1)呼叫類常量

(2)呼叫靜態方法(使用static修飾的類方法)

  16、__autoload()方法的工作原理是什麼?

使用這個魔術函式的基本條件是類檔案的檔名要和類的名字保持一致。

當程式執行到例項化某個類的時候,如果在例項化前沒有引入這個類檔案,那麼就自動執行__autoload()函式。

這個函式會根據例項化的類的名稱來查詢這個類檔案的路徑,當判斷這個類檔案路徑下確實存在這個類檔案後

就執行include或者require來載入該類,然後程式繼續執行,如果這個路徑下不存在該檔案時就提示錯誤。

使用自動載入的魔術函式可以不必要寫很多個include或者require函式。

17、索引建立原則

1、天下沒有免費的午餐,使用索引是需要付出代價的。比如索引多了會佔用大量的物理空間,而且,也會影響到整個資料庫

的執行效能 

2、對於查詢中很少涉及的列或者重複值比較多的列,不要建立索引。(比如性別)

3、對於按範圍查詢的列,最好建立索引

4、表中若有主鍵或者外來鍵,一定要為其建立索引

5、對於一些特殊的資料型別,不要建立索引(如文字欄位(TXT)、影象型別欄位(IMAGE))

6、索引可以跟Where語句的集合融為一體