PHP基礎麵試題第1部分


一 、PHP基礎部分

 

1、PHP語言的一大優勢是跨平台,什麽是跨平台?

PHP的運行環境最優搭配為Apache+MySQL+PHP,此運行環境可以在不同操作係統(例如windows、Linux等)上配置,不受操作係統的限製,所以叫跨平台

 

2、WEB開發中數據提交方式有幾種?有什麽區別?百度使用哪種方式?

Get與post兩種方式
區別:
(1)url可見性:get 方式url參數可見,post 不可見

(2)可緩存性:get 方式是可以緩存的,post 方式不可以緩存。

(3)傳輸數據大小:get一般傳輸數據大小不超過2k-4k(根據瀏覽器不同,限製不一樣,但相差不大);post 請求傳輸數據的大小根據php.ini 配置文件設定,也可以無限大。

(4)數據傳輸上:get 方式通過url地址欄拚接參數進行傳輸,post 方式通過body體進行傳輸。

建議:
1、get式安全性較Post式要差些包含機密信息建議用Post數據提交式;
2、做數據查詢建議用Get式;做數據添加、修改或刪除建議用Post方式;
百度使用的get方式,因為可以從它的URL中看出

 

3、掌握PHP的哪些框架、模板引擎、係統等

框架:框架有很多,例如CI、Yii、Laravel等等,咱們學過的是thinkphp
模板引擎:也有很多,在課本中有,咱們學過的是smarty
係統:有很多,例如:康盛的產品(uchome、supesite、discuzX等),帝國係統、DEDE(織夢)、ecshop等,咱們學過的是DEDECMS、Ecshop

 

4、說一下你所掌握的網頁前端技術有哪些?

熟練掌握DIV+CSS網頁布局,JavaScript,jQuery框架、photoshop圖片處理

 

5、AJAX的優勢是什麽?

ajax是異步傳輸技術,可以通過javascript實現,也可以通過JQuery框架實現,實現局部刷新,減輕了服務器的壓力,也提高了用戶體驗。

 

6、安全對一套程序來說至關重要,請說說在開發中應該注意哪些安全機製?

(1)使用驗證碼防止注冊機灌水。

(2)使用預處理,綁定參數,參數過濾轉義 防止sql注入

(3)使用token防止遠程提交,使用token驗證登錄狀態。

 

7、在程序的開發中,如何提高程序的運行效率?

(1)優化SQL語句,查詢語句中盡量不使用select *,用哪個字段查哪個字段;少用子查詢可用表連接代替;少用模糊查詢。

(2)數據表中創建索引。

(3)對程序中經常用到的數據生成緩存(比如使用redis緩存數據,比如使用ob進行動態頁麵靜態化等等)。

(4)對mysql做主從複製,讀寫分離。(提高mysq執行效率和查詢速度)

(5)使用nginx做負載均衡。(將訪問壓力平均分配到多態服務器)

 

8、PHP可否與其它的數據庫搭配使用?

PHP與MYSQL數據庫是最優搭配,當然PHP也可以去其它的數據庫搭配使用,例如PostgreSql,SqlServer,Oracle,SqlLite等。

 

9、現在編程中經常采取MVC三層結構,請問MVC分別指哪三層,有什麽優點?

MVC三層分別指:業務模型、視圖、控製器,由控製器層調用模型處理數據,然後將數據映射到視圖層進行顯示。

優點是:①可以實現代碼的重用性,避免產生代碼冗餘;②M和V的實現代碼分離,從而使同一個程序可以使用不同的表現形式

 

10、對json數據格式的理解?

JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,json數據格式固定,可以被多種語言用作數據的傳遞。
PHP中處理json格式的函數為json_decode( string $json [, bool $assoc ] ) ,接受一個 JSON格式的字符串並且把它轉換為PHP變量,參數json待解碼的json string格式的字符串。assoc當該參數為TRUE時,將返回array而非object;
Json_encode:將PHP變量轉換成json格式。

 

11、Print、echo、print_r有什麽區別?

(1) echo和print都可以做輸出,不同的是,echo不是函數,沒有返回值,而print是一個函數有返回值,所以相對而言如果隻是輸出echo會更快,而print_r通常用於打印變量的相關信息,通常在調試中使用。
(2) print 是打印字符串
(3)print_r 則是打印複合類型 如數組 對象

 

12、SESSION與COOKIE的區別?

(1)存儲位置:session存儲於服務器,cookie存儲於瀏覽器
(2)安全性:session安全性比cookie高
(3)session為‘會話服務’,在使用時需要開啟服務,cookie不需要開啟,可以直接用

 

13、PHP處理數組的常用函數?(重點看函數的‘參數’和‘返回值’)

(1)array() 創建數組

(2)in_array()  判斷元素是否在數組中

(3)count() 返回數組中元素的數目

(4)array_merge() 將多個數組合並成一個數組

(5)array_diff() 比較兩個或兩個以上數組的差異

(6)array_intersect() 獲取兩個或兩個數組以上的交集

(7)array_keys()  獲取數組的key列表

(8)array_values()  獲取數組的值列表

(9)array_unique()  刪除數組中的重複值

(10)array_push()將一個或多個元素插入數組的末尾(入棧)

(11)array_pop() 彈出並返回 array 數組的最後一個單元(出棧)

(12)array_walk()  使用用戶自定義函數對數組中的每個元素做回調處理

 

14、PHP處理字符串的常用函數?(重點看函數的‘參數’和‘返回值’)

(1)trim()  移除字符串兩側的空白字符和其他字符;

(2)strlen()  獲取字符串的長度

(3)mb_strlen()  獲取字符串長度(可指定字符編碼,對中文字符串計算長度)

(4)substr()返回字符串的一部分;

(5)str_replace()  子字符串替換

(6)str_repeat ()  重複一個字符串

(7)is_string() 檢測變量是否是字符串;

(8)str_shuffle () 隨機打亂一個字符串

(9)sprintf()  返回根據格式化字符串生成的字符串(通常用於獲取分表後的數據表名)

(10)strstr()  查找字符串的首次出現

(11)addslashes  使用反斜線引用字符串

 

15、PHP處理時間的常用函數?(重點看函數的‘參數’和‘返回值’)

(1)date()  格式化一個本地時間/日期。

(2)getdate()  取得日期/時間信息。

(3)date_default_timezone_set() 設定默認時區。

(4)date_default_timezone_get() 返回默認時區。

(5)mktime()  返回一個日期的 Unix時間戳。

(6)strtotime()  將任何字符串的日期時間描述解析為 Unix 時間戳

(7)strftime()  根據區域設置格式化本地時間/日期

 

16、PHP處理數據庫的常用函數?(重點看函數的‘參數’和‘返回值’)

請參照php手冊,認真查看,此項非常重要

 

17、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()

 

18、PHP操作目錄(文件夾)的常用函數?(重點看函數的‘參數’和‘返回值’)

(1)打開目錄 opendir()

(2)讀取目錄 readdir()

(3)刪除目錄 rmdir()

(4)關閉目錄句柄  closedir()

(5)創建目錄 mkdir()

(6)返回路徑中的目錄部分  dirname() 

(7)取得當前工作目錄  getcwd()

(8)列出指定路徑中的文件和目錄  scandir()

 

二 、數據庫部分

 

1. 常見的關係型數據庫管理係統產品有?

答:Oracle、SQL Server、MySQL、Sybase、DB2、Access等。

 

2. SQL語言包括哪幾部分?每部分都有哪些操作關鍵字?

答:SQL語言包括數據定義(DDL)、數據操縱(DML),數據控製(DCL)和數據查詢(DQL)四個部分。
數據定義:Create Table,Alter Table,Drop Table, Craete/Drop Index等
數據操縱:Select ,insert,update,delete,
數據控製:grant,revoke
數據查詢:select

 

3. 完整性約束包括哪些?

數據完整性(Data Integrity)是指數據的精確(Accuracy) 和 可靠性(Reliability)。

包括:

(1)實體完整性:規定表的每一行在表中是惟一的實體。

(2)域完整性:是指表中的列必須滿足某種特定的數據類型約束,其中約束又包括取值範圍、精度等規定。

(3)參照完整性:是指兩個表的主關鍵字和外關鍵字的數據應一致,保證了表之間的數據的一致性,防止了數據丟失或無意義的數據在數據庫中擴散。

(4) 用戶定義的完整性:不同的關係數據庫係統根據其應用環境的不同,往往還需要一些特殊的約束條件。用戶定義的完整性即是針對某個特定關係數據庫的約束條件,它反映某一具體應用必須滿足的語義要求。
 

 

4. 什麽是事務?及其特性?

事務:是一係列的數據庫操作,是數據庫應用的基本邏輯單位。

特性:

(1)原子性:即不可分割性,事務要麽全部被執行,要麽就全部不被執行。

(2)一致性或可串性。事務的執行使得數據庫從一種正確狀態轉換成另一種正確狀態

(3)隔離性。在事務正確提交之前,不允許把該事務對數據的任何改變提供給任何其他事務,

(4) 持久性。事務正確提交後,其結果將永久保存在數據庫中,即使在事務提交後有了其他故障,事務的處理結果也會得到保存。

簡單理解:在事務裏的操作,要麽全部成功,要麽全部失敗。

 

5. 什麽是鎖?

數據庫是一個多用戶使用的共享資源。當多個用戶並發地存取數據時,在數據庫中就會產生多個事務同時存取同一數據的情況。若對並發操作不加控製就可能會讀取和存儲不正確的數據,破壞數據庫的一致性。

加鎖是實現數據庫並發控製的一個非常重要的技術。當事務在對某個數據對象進行操作前,先向係統發出請求,對其加鎖。加鎖後事務就對該數據對象有了一定的控製,在該事務釋放鎖之前,其他的事務不能對此數據對象進行更新操作。
基本鎖類型:鎖包括行級鎖和表級鎖

 

6. 什麽叫視圖?遊標是什麽?

視圖是一種虛擬的表,具有和物理表相同的功能。可以對視圖進行增,改,查,操作,視圖通常是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得7m视频獲取數據更容易,相比多表查詢。

遊標:是對查詢出來的結果集作為一個單元來有效的處理。遊標可以定在該單元中的特定行,從結果集的當前行檢索一行或多行。可以對結果集當前行做修改。一般不使用遊標,但是需要逐條處理數據的時候,遊標顯得十分重要。

 

7. 什麽是存儲過程?用什麽來調用?

存儲過程是一個預編譯的SQL語句,優點是允許模塊化的設計,就是說隻需創建一次,以後在該程序中就可以調用多次。如果某次操作需要執行多次SQL,使用存儲過程比單純SQL語句執行要快。可以用一個命令對象來調用存儲過程。

 

8. 索引的作用?和它的優點缺點是什麽?

索引就一種特殊的查詢表,數據庫的搜索引擎可以利用它加速對數據的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的數據。索引可以是唯一的,創建索引允許指定單個列或者是多個列。

缺點是它減慢了數據錄入的速度,同時也增加了數據庫的尺寸大小。

 

9. 如何通俗地理解三個範式?

第一範式:1NF是對屬性的原子性約束,要求屬性具有原子性,不可再分解;

第二範式:2NF是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟一性;

第三範式:3NF是對字段冗餘性的約束,即任何字段不能由其他字段派生出來,它要求字段沒有冗餘。。

 

10. 什麽是基本表?什麽是視圖?

基本表是本身獨立存在的表,在 SQL 中一個關係就對應一個表。

視圖是從一個或幾個基本表導出的表。視圖本身不獨立存儲在數據庫中,是一個虛表

 

11. 試述視圖的優點?

(1) 視圖能夠簡化用戶的操作

(2) 視圖使用戶能以多種角度看待同一數據;

(3) 視圖為數據庫提供了一定程度的邏輯獨立性;

(4) 視圖能夠對機密數據提供安全保護。

 

12. NULL是什麽意思

NULL這個值表示UNKNOWN(未知):它不表示“”(空字符串)。

對NULL這個值的任何比較都會生產一個NULL值。

您不能把任何值與一個 NULL值進行比較,並在邏輯上希望獲得一個答案。

使用IS NULL來進行NULL判斷

 

13. 主鍵、外鍵和索引的區別?

主鍵、外鍵和索引的區別
定義:
主鍵--唯一標識一條記錄,不能有重複的,不允許為空
外鍵--表的外鍵是另一表的主鍵, 外鍵可以有重複的, 可以是空值
索引--該字段沒有重複值,但可以有一個空值
作用:
主鍵--用來保證數據完整性
外鍵--用來和其他表建立聯係用的
索引--是提高查詢排序的速度
個數:
主鍵--主鍵隻能有一個
外鍵--一個表可以有多個外鍵
索引--一個表可以有多個唯一索引

 

14. 你可以用什麽來確保表格裏的字段隻接受特定範圍裏的值?

Check限製,它在數據庫表格裏被定義,用來限製輸入該列的值。

 

15. 說說對SQL語句優化有哪些方法?(選擇幾條)

(1)Where子句中:where表之間的連接必須寫在其他Where條件之前,那些可以過濾掉最大數量記錄的條件必須寫在Where子句的末尾.HAVING最後。

(2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。

(3) 避免在索引列上使用計算

(4)避免在索引列上使用IS NULL和IS NOT NULL

(5)對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。

(6)應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描

(7)應盡量避免在 where 子句中對字段進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描

 

16. SQL語句中‘相關子查詢’與‘非相關子查詢’有什麽區別?

(1)非相關子查詢是獨立於外部查詢的子查詢,子查詢總共執行一次,執行完畢後將值傳遞給外部查詢。

(2)相關子查詢的執行依賴於外部查詢的數據,外部查詢執行一行,子查詢就執行一次。

因此非相關子查詢比相關子查詢效率高

 

17. char和varchar的區別?

char是一種固定長度的類型,varchar則是一種可變長度的類型。

區別:

char(M)類型的數據列裏,每個值都占用M個字節,如果某個長度小於M,MySQL就會在它的右邊用空格字符補足。(在檢索操作中那些填補出來的空格字符將被去掉)。

varchar(M)類型的數據列裏,每個值隻占用剛好夠用的字節再加上一個用來記錄其長度的字節(即總長度為L+1字節)。

 

18. Mysql 的存儲引擎,myisam和innodb的區別。

MyISAM 是非事務的存儲引擎;適合用於頻繁查詢的應用;表鎖,不會出現死鎖;不支持事務。適合小數據,小並發

innodb是支持事務的存儲引擎;適合於插入和更新操作比較多的應用;設計合理的話是行鎖(最大區別就在鎖的級別上);適合大數據,大並發。

 

19. 數據表類型有哪些

MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等。

MyISAM:成熟、穩定、易於管理,快速讀取。一些功能不支持(事務等),表級鎖。

InnoDB:支持事務、外鍵等特性、數據行鎖定。空間占用大,不支持全文索引等。

 

20. MySQL數據庫作發布係統的存儲,一天五萬條以上的增量,預計運維三年,怎麽優化?

(1)設計良好的數據庫結構,允許部分數據冗餘,盡量避免join查詢,提高效率。

(2) 選擇合適的表字段數據類型和存儲引擎,適當的添加索引。

(3) 做mysql主從複製讀寫分離。

(4)對數據表進行分表,減少單表中的數據量提高查詢速度。

(5)添加緩存機製,比如redis,memcached等。

(6)對不經常改動的頁麵,生成靜態頁麵(比如做ob緩存)。

(7)書寫高效率的SQL。比如 SELECT * FROM TABEL 改為 SELECT field_1, field_2, field_3 FROM TABLE.

 

21. 對於大流量的網站,您采用什麽樣的方法來解決各頁麵訪問量統計問題?

(1) 確認服務器是否能支撐當前訪問量。

(2) 優化數據庫訪問。

(3)禁止外部訪問鏈接(盜鏈), 比如圖片盜鏈。

(4)控製文件下載。

(5)做負載均衡,使用不同主機分流。

(6)使用瀏覽統計軟件,了解訪問量,有針對性的進行優化。

 

 

三、 麵向對象部分

 

1、什麽是麵向對象?(理解著回答)

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

麵向對象有三大特征:封裝性、繼承性、多態性。

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

 

2、簡述 private、 protected、 public修飾符的訪問權限。

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

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

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

 

3、堆和棧的區別?

棧是編譯期間就分配好的內存空間,因此你的代碼中必須就棧的大小有明確的定義;

堆是程序運行期間動態分配的內存空間,你可以根據程序的運行情況確定要分配的堆內存的大小。

 

4、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將成為最普遍的數據處理和數據傳輸的工具。

 

5、麵向對象的特征有哪些方麵?

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

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

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

多態:
多態是指程序中定義的引用變量所指向的具體類型和通過該引用變量發出的方法調用在編程時並不確定,而是在程序運行期間才確定,即一個引用變量倒底會指向哪個類的實例對象,該引用變量發出的方法調用到底是哪個類中實現的方法,必須在由程序運行期間才能決定。

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

 

6、抽象類和接口的概念以及區別?

抽象類:它是一種特殊的,不能被實例化的類,隻能作為其他類的父類使用。使用abstract關鍵字聲明。

接口:它是一種特殊的抽象類,也是一個特殊的類,使用interface聲明。

區別:

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

(2)抽象類中有數據成員,可以實現數據的封裝,但是接口沒有數據成員。

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

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

(5)一個類隻能繼承於一個抽象類,而一個類可以同時實現多個接口。

(6)抽象類中可以有成員方法的實現代碼,而接口中不可以有成員方法的實現代碼。

 

7、什麽是構造函數,什麽是析構函數,作用是什麽?

構造函數(方法)是對象創建完成後第一個被對象自動調用的方法。它存在於每個聲明的類中,是一個特殊的成員方法。作用是執行一些初始化的任務。Php中使用__construct()聲明構造方法,並且隻能聲明一個。

析構函數(方法)作用和構造方法正好相反,是對象被銷毀之前最後一個被對象自動調用的方法。是PHP5中新添加的內容作用是用於實現在銷毀一個對象之前執行一些特定的操作,諸如關閉文件和釋放內存等。

 

8、如何重載父類的方法,舉例說明

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

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

 

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

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複製一個對象時候調用。

 

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

$this 當前對象

self 當前類

parent 當前類的父類

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

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

parent在類中使用。

 

11、類中如何定義常量、如何類中調用常量、如何在類外調用常量。

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

定義常量使用關鍵字const.

例如:const PI = 3.1415326;

無論是類內還是類外,常量的訪問和變量是不一樣的,常量不需要實例化對象,

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

即:類名 :: 類常量名;

 

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

(1)調用類常量

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

 

13、__autoload()方法的工作原理是什麽?

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

當程序執行到實例化某個類的時候,如果在實例化前沒有引入這個類文件,那麽就自動執行__autoload()函數。

這個函數會根據實例化的類的名稱來查找這個類文件的路徑,當判斷這個類文件路徑下確實存在這個類文件後

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

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


上一篇 下一篇