PHP筆試題和麪試題

一、不用新變量直接交換現有兩個變量的值javascript

(1)list($a,$b)=array($b,$a);
(2)a=a+b,b=a-b,a=a-b
二、PHP數字金額轉大小格式,同時說明思路
function daxie($num){
      $da_num = array('零','一','二','三','四','五','六','七','八','九');
      $return = '';
      $len_num = strlen($num);
      if(!is_numeric($num) || $len_num < 0){
          return '';
      }
      for($i=0;$i<$len_num;$i++){
          $return .= $da_num[ substr($num,$i,1)];
      }
      return$return;
  }
3.SQL查詢語句以下:
select * from table where (ID = 10) or (ID = 32) or (ID = 22) or (ID = 76) or (ID = 13) or (ID = 44)    讓結果按10,32,22,76,13,44的順序檢索出來,請問如何書寫?
select * from table
where id in (10,32,22,76,13,44)          
order by charindex(id,'10,32,22,76,13,44') desc

4.用PHP打印出前一天的時間,格式是2006-5-10 22:21:21php

(1)echo date('Y-m-d H:i:s',time()-60*60*24);
(2)echo date('Y-m-d H:i:s',strtotime('-1 day'))

5. echo(),print(),print_r()的區別css

echo是語言結構,無返回值;print功能和echo基本相同,不一樣的是print是函數,有返回值;print_r是遞歸打印,用於輸出數組或對象

6.可以使HTML和PHP分離開使用的模板html

PHP自己是一種模版引擎,我用過的是smarty,常見的還有PHPLib,FastTemplate,Savant

7.使用哪些工具進行版本控制?java

CVS和SVN,SVN號稱下一代CVS,功能強大,不過CVS是老牌,市佔率很高.CVS Server on Apache做服務端,WinCVS做客戶端;<br>Subversion on Apache/DAV 作服務端,TortoiseSVN作客戶端,或者Subclipse作客戶端

8.如何實現字符串翻轉?mysql

其實PHP自己就有字符串翻轉的函數:strrev(),不過這種方法都不能解決中文字符串翻轉的問題,會出錯的。
<?php
function reverse($var){
$res="";
for($i=0,$j=strlen($var);$i<$j;$i++){
$res=$var[$i].$res;
}
return $res;
}
$tmpvar="wofang";
$res=reverse($tmpvar);
echo $res;
?>
9.優化MYSQL數據庫的方法
(1).數據庫設計方面,這是DBA和Architect的責任,設計結構良好的數據庫,必要的時候,去正規化(英文是這個:denormalize),<br>    容許部分數據冗餘,避免JOIN操做,以提升查詢效率
(2).系統架構設計方面,表散列,把海量數據散列到幾個不一樣的表裏面.快慢表,快表只留最新數據,慢表是歷史存檔.集羣,主服務器Read & write,<br>    從服務器read only,或者N臺服務器,各機器互爲Master
(3).(1)和(2)超越PHP Programmer的要求了,會更好,不會不要緊.檢查有沒有少加索引
(4).寫高效的SQL語句,看看有沒有寫低效的SQL語句,好比生成笛卡爾積的全鏈接啊,大量的Group By和order by,沒有limit等等.<br>    必要的時候,把數據庫邏輯封裝到DBMS端的存儲過程裏面.緩存查詢結果,explain每個sql語句
(5).所得皆必須,只從數據庫取必需的數據,好比查詢某篇文章的評論數,select count(*) … where article_id = ? <br>    就能夠了,不要先select * … where article_id = ?而後msql_num_rows.
    只傳送必須的SQL語句,好比修改文章的時候,若是用戶只修改了標題,那就update … set title = ? where article_id = ?<br>    不要set content = ?(大文本)
(6).必要的時候用不一樣的存儲引擎.好比InnoDB能夠減小死鎖.HEAP能夠提升一個數量級的查詢速度

10.用PHP寫出顯示客戶端IP與服務器IP的代碼:jquery

echo '客戶端IP:'.$_SERVER['REMOTE_ADDR'].'<br />';
echo '服務器端IP:'.gethostbyname($_SERVER['SERVER_NAME']);

11.在PHP中,當前腳本的名稱(不包括路徑和查詢字符串)記錄在預約義變量(1)中;而連接到當前頁面的URL記錄在預約義變量(2)中。前執行腳本的絕對路徑名(3),正在瀏覽當前頁面用戶的 IP 地址(4),查詢(query)的字符串(URL 中第一個問號 ? 以後的內容):id=1&bi=2(5),當前運行腳本所在的文檔根目錄(6)。程序員

(1)$_SERVER['SCRIPT_FILENAME'];或者$_SERVER['PHP_SELF']<br>(2)$_SERVER['HTTP_REFERER']
(3)$_SERVER['SCRIPT_FILENAME'];<br>(4)$_SERVER['REMOTE_ADDR'];<br>(5)$_SERVER['QUERY_STRING'];<br>(6)$_server['DOCUMENT_ROOT'];

12.執行程序段 將輸出__。web

(1)echo 8%(-2)。輸出:0
(2)echo (-8)%3 .輸出:-2
(3)echo 8%(-3).輸出:2

13.數組函數 arsort 的做用是____;語句 error_reporting(2047)的做用是____。ajax

arsort:對數組進行逆向排序並保持索引關係
error_reporting(2047)的做用是:report All errors and warnings
14.寫出一個正則表達式,過慮網頁上的全部JS/VBS腳本(即把script標記及其內容都去掉):
$a="<script type='text/javascript'>XXXXXXXXXXXXXXX</script>";<br>echo preg_replace('/\<script[^>]*?>.*<\/script\>/is','',$a);
15.以Apache模塊的方式安裝PHP,在文件http.conf中首先要用語句____動態裝載PHP模塊,

而後再用語句____使得Apache把全部擴展名爲php的文件都做爲PHP腳本處理。

LoadModule php5_module "c:/php/php5apache2.dll";
AddType application/x-httpd-php .php
16.類的屬性能夠序列化後保存到 session 中,從而之後能夠恢復整個類,這要用到的函數是 
serialize() /unserialize()
17.MySQL數據庫,怎麼優化?

(1) 配置優化(服務器配置) (2)建表優化(表、字段設置) (3)查詢優化(sql語句) 答: 一、選取最適用的字段屬性,儘量減小定義字段長度,儘可能把字段設置NOT NULL,例如’省份,性別’,最好設置爲ENUM 二、使用鏈接(JOIN)來代替子查詢: 三、使用聯合(UNION)來代替手動建立的臨時表 四、事務處理: 五、鎖定表,優化事務處理: 六、使用外鍵,優化鎖定表 七、創建索引: 八、優化查詢語句

18.數據庫中的事務是什麼? 

事務(transaction)是做爲一個單元的一組有序的數據庫操做。若是組中的全部操做都成功,則認爲事務成功,即便只有一個操做失敗,事務也不成功。若是全部操做完成,  事務則提交,其修改將做用於全部其餘數據庫進程。若是一個操做失敗,則事務將回滾,該事務全部操做的影響都將取消。

19.如何修改SESSION的生存時間

方法1:將php.ini中的session.gc_maxlifetime設置爲9999重啓apache    

方法2:$savePath = "./session_save_dir/";          $lifeTime = 小時 * 秒; 

         session_save_path($savePath); 

         session_set_cookie_params($lifeTime);          session_start(); 

方法3:setcookie() and session_set_cookie_params($lifeTime); 

20.有一個網頁地址, 好比PHP開發資源網主頁: http://www.phpres.com/index.html,如何獲得它的內容?

方法1(對於PHP5及更高版本): 
$readcontents = fopen("http://www.phpres.com/index.html", "rb");    $contents = stream_get_contents($readcontents);    fclose($readcontents);    echo $contents;    
方法2: echo file_get_contents("http://www.phpres.com/index.html"); 
21.談談asp,php,jsp的優缺點
ASP全名Active Server Pages,是一個WEB服務器端的開發環境, 利用它能夠產生和運行動態的、交互的、高性能的WEB服務應用程序。ASP採用腳本語言VB Script(Java script )做爲本身的開發語言。  
PHP是一種跨平臺的服務器端的嵌入式腳本語言. 它大量地借用C,Java和Perl語言的語法 , 並耦合PHP本身的特性,使WEB開發者可以快速地寫出動態生成頁面.它支持目前絕大多數數據庫。還有一點,PHP是徹底免費的,不用花錢,並且你能夠不受限制地得到源碼,甚至能夠從中加進你本身須要的特點。  
JSP 是Sun公司推出的新一代站點開發語言,他徹底解決了目前ASP,PHP的一個通病-- 腳本級執行,Jsp 能夠在Serverlet和JavaBean的支持下,功能強大。
三者都提供在 HTML 代碼中混合某種程序代碼、由語言引擎解釋執行程序代碼的能力。 但JSP代碼被編譯成 Servlet 並由 Java 虛擬機解釋執行,這種編譯操做僅在對 JSP 頁面的 第一次請求時發生。在 ASP 、PHP、JSP 環境下, HTML 代碼主要負責描述信息的顯示樣式 ,而程序代碼則用來描述處理邏輯。普通的 HTML 頁面只依賴於 Web 服務器,而 ASP 、PH P、JSP 頁面須要附加的語言引擎分析和執行程序代碼。程序代碼的執行結果被從新嵌入到  HTML 代碼中,而後一塊兒發送給瀏覽器。 ASP 、PHP、 JSP三者都是面向 Web 服務器的技術 ,客戶端瀏覽器不須要任何附加的軟件支持。
22.請說明php中傳值與傳引用的區別。何時傳值何時傳引用?
按值傳遞:函數範圍內對值的任何改變在函數外部都會被忽略 
按引用傳遞:函數範圍內對值的任何改變在函數外部也能反映出這些修改 
優缺點:按值傳遞時,php必須複製值。特別是對於大型的字符串和對象來講,這將會是一個代價很大的操做。 
按引用傳遞則不須要複製值,對於性能提升頗有好處。
23.JS的轉向函數是?怎麼引入一個外部JS文件?
window.location.href,<script type="text/javascript" src="js/js_function.js"></script>
24.GD庫是作什麼用的? 
gd庫提供了一系列用來處理圖片的API,使用GD庫能夠處理圖片,或者生成圖片。     在網站上GD庫一般用來生成縮略圖或者用來對圖片加水印或者對網站數據生成報表。
=================================================================================================
  1. 咱們在使用哪一個版本的 PHP
  2. PHP 標籤有那些?
  3. 在一個純 PHP 文件(例如,僅包含一個類定義的文件)中包含一個關閉?>標籤時,確保其後不會跟着任何換行。 說說你的理解。
  4. 自動加載類,有那些方法?
  5. 單引號和雙引號有什麼異同?
  6. define() vs. Const ?
  7. 有多種方式來配置一個 web 服務器以提供 PHP 服務。你知道哪幾種?
  8. 淨化 HTML 輸入和輸出,如何處理?
  9. PHP 中的UTF-8,你有什麼認識?
  10. php處理日期和時間方式?
=================================================================================================
1.寫一個function實現數組內每一個元素之間加法的迭代運算,注意:數組元素所有爲天然數。例子:$data=array(1.2.3);程序要求打印出數組每一個數組元素相互之間各類可能性加法(包括元素本身自己加法)1+1=2,1+2=3,1+3=4,2+2=4,2+3=5,3+3=6
2.一個小孩買了價值小於1美圓的糖,並將1美圓的錢交給售貨員。售貨員但願用數目最少的硬幣個數找給小孩。假設提供的數目不限的面值爲25美分,10美分,5美分,1美分的硬幣,寫一個算法讓售貨員用最少的硬幣個數找給小孩。
3.有10名新員工,按其應聘成績排名1到10,並用10個連續四位天然數依次做爲他們的工號。其每一個人的工號都能被他們的成績排名整除,問他們的工號分別是什麼?
=================================================================================================
1. 變量如何定義?如何檢查變量是否認義?如何刪除一個變量?判斷一個變量是否爲空的函數?
isset() unset() empty()
2. 什麼是可變變量?
 一個變量的變量名能夠動態的設置和使用。 $a = 'hello' , $$a = 'world', ${$a}=hello world
3. 變量賦值方式有哪幾種?
1)直接賦值 2)變量間賦值 3)引用賦值
4. 引用和拷貝有什麼區別?
拷貝是將原來的變量內容複製下來,拷貝後的變量與原來的變量使用各自的內存,互不干擾。 引用至關因而變量的別名,其實就是用不一樣的名字訪問同一個變量內容。當改變其中一個變量的值時,另外一個也跟着發生變化。
5. php中變量有哪些基本數據類型?
php支持8種原始數據類型。 包括: 四種標量類型(布爾型boolean,整型interger,浮點型float/double , 字符串string) 兩種複合類型(數組array , 對象object) 兩種特殊類型(資源resource,NULL)
6. 其它類型轉換爲boolean類型時,哪些被認爲是false?
 布爾值false,整型值0, 浮點型值0.0, 空白字符串, 字符串'0', 空數組,特殊數據類型NULL, 沒有設定的變量。
empty()函數在哪些狀況下返回true?  
布爾值false, 整型值0, 浮點型值0.0, 空白字符串, 字符串'0', array()空數組, 特殊數據類型NULL, 沒有任何屬性的對象, 沒有賦值的變量。
7. 若是定義了一個變量$a ,可是沒有賦初始值 那麼$a==0嗎? $a==false嗎? $a==''嗎? $a==NULL嗎? $a===NULL嗎?
 答:echo=>什麼都沒有 , var_dump=>NULL empty($b)==true嗎?———————————— echo=>1 , var_dump=>bool(true) 此時若是輸出$a++是多少?——————— echo=>什麼都沒有 , var_dump=>NULL 若是輸出++$a又是多少?————————— echo=>1  , var_dump=>int(1)
8. 字符串怎麼轉成整數,有幾種方法?怎麼實現?
 強制類型轉換: (整型)字符串變量名; 直接轉換:settype(字符串變量,整型); intval(字符串變量);
9. 標量數據和數組的最大區別是什麼?
一個標量只能存放一個數據,而數組能夠存放多個數據。
10. 常量如何定義? 如何檢測一個常量是否被定義?常量的值只能是哪些數據類型?
define()//定義常量 , defined()//檢查常量是否認義 常量的值只能是標量類型的數據。
11. 常量分爲系統內置常量和自定義常量。請說出最多見的幾個系統內置常量?
__FILE__ , __LINE__ , PHP_OS , PHP_VERSION
12. 若是定義了兩個相同的常量,前者和後者哪一個起做用?
前者起做用,由於常量一旦定義就不能被從新定義或者取消定義。
13. 常量和變量有哪些區別?
1)常量前沒有$符號; 2)常量只能經過define()定義,而不能經過賦值語句定義; 3)常量能夠在任何地方定義和訪問,而變量有全局和局部之分; 4)常量一旦定義就不能被從新定義或者取消定義,而變量而經過賦值方式從新定義; 5)常量的值只能是標量數據,而變量的數據庫類型有8種原始數據類型。
14. PHP中經常使用的幾個預約義的全局數組變量是哪些?
有9大預約義的內置數組變量: $_POST, $_GET, $_REQUEST, $_SESSION, $_COOKIE, $_FILES,$_SERVER, $_ENV, $GLOBALS
15. 在實際開發中,常量最經常使用於哪些地方?
 1)鏈接數據庫的信息定義成常量,如數據庫服務器的用戶名、密碼、數據庫名、主機名; 2)將站點的部分路徑定義成常量,如web絕對路徑,smarty的安裝路徑,model、view或者controller的文件夾路徑; 3)網站的公共信息,如網站名稱,網站關鍵詞等信息。
16. 函數的優越性有哪些?
提升程序的可維護性        提升軟件的可靠性        提升程序的可重用性        提升程序的開發效率
17. 如何定義一個函數?函數名區分大小寫嗎?
1)使用 function 關鍵字; 2)函數命名規則和變量同樣,以字母或者下劃線開頭,而不能以數字開頭; 3)函數名不區分大小寫; 4)函數名不可使用已經聲明過的或者系統自建的函數名稱。
18. 什麼是變量的能見度 或者 說是變量做用域?
就是變量在程序中的可做用範圍。根據變量的能見度,變量分爲局部變量和全局變量。
19. 什麼是局部變量和全局變量?函數內是否能夠直接調用全局變量?
局部變量是函數內部定義的變量,其做用域是所在的函數。若是函數外還有一個跟局部變量名字同樣的變量, 程序會認爲它們兩個是徹底不一樣的兩個變量。當退出函數的時候,其中的局部變量就同時被清除。 全局變量是定義在全部函數之外的變量,其做用域是整個php文件,可是在用戶自定義的函數內部是沒法使用的。 若是必定要在用戶自定義的函數內部使用全局變量,那麼就須要使用global關鍵字聲明。 也就是說若是在函數內的變量前加上golbal來修飾,那麼函數內部就能夠訪問到這個全局變量, 不只能夠利用這個全局變量進行運算並且能夠對這個全局變量進行從新賦值。 全局變量還可使用 $GLOBALS['var'] 來調用。
20. global關鍵詞如何使用?預約義的全局變量數組$GLOBALS如何使用?
Global的做用是定義全局變量,可是這個全局變量不是應用於整個網站,而是應用於當前頁面,包括include或require的全部文件。 
在 $GLOBALS 數組中,每個變量爲一個元素,鍵名對應變量名,值對應變量的內容。$GLOBALS 之因此在全局範圍內存在,是由於 $GLOBALS 是一個超全局變量。global 也就是說在一個文件裏 只要你聲明爲global $db 那麼在聲明的下面 你就能夠引用這個$db了。 
21. 什麼是靜態變量?
若是一個函數內定義的變量前使用關鍵字static來聲明,那麼該變量就是靜態變量。 通常函數內的變量在函數調用結束後,其存儲的數據將被清除,所佔的內存空間也被釋放。而使用靜態變量時, 該變量會在函數第一次被調用時被初始化,初始化後該變量也不會被清除,當再次調用該函數時,這個靜態變量 再也不被初始化,而能保存上次函數執行完後的值。能夠說靜態變量在全部對該函數的調用之間共享。
22. php中函數傳遞參數的方式有哪些?二者有什麼區別?
按值傳遞和按地址傳遞(或按引用傳遞) (1)按值傳遞:  待傳遞的變量,與傳遞給函數以後的變量是存儲在不一樣的空間中。因此函數體內對 該變量值作的修改,不影響本來的變量值。   (2)按地址傳遞: 使用 & 符號,代表該參數是以地址的方式傳遞值。並不會將主程序中的指定數值或目標變量傳遞給函數,而是把該數值或變量的內存儲存區塊地址導入函數之中,因此函數體內的該變量和主程序中的該變量在內存 中是同一個。函數體作的修改,直接影響到函數體外部的該變量的值。
23. 什麼是遞歸函數?如何進行遞歸調用?
遞歸函數其實就是調用自身的函數,可是必須知足如下兩個條件: 1)在每一次調用自身時,必須是更接近於最終結果; 2)必須有一個肯定的遞歸終止條件,不會形成死循環。  
24. 判斷一個函數是否存在?   
 function_exists( string $function_name )  若是存在,返回true, 不存在則返回 false。
25. func()和@func()之間有什麼區別?
第二個函數調用失敗不會報錯,第一個會報錯
26. include()和require()函數的用法和區別是什麼?include_once()和require_once()呢?
 include和require出現錯誤後的錯誤級別不同 include_once()和require_once()在加載以前要判斷是否已經導入
27. 說出前置++和後置++的區別?
前置++是先將變量增長1,而後在將值賦值給原來的變量; 後置++是先返回變量的當前值,而後再將變量的當前值增長1.
28. 字符串運算符「.」與算術運算符「+」有什麼區別?
 當「a」「b」之間使用.時認爲是連字符。若是二者間是+的時候php會認爲是一次運算。 1)若是+號兩邊的字符串是數字組成的,那麼會將字符串自動轉爲整型; 2)若是+號兩邊是純粹的字母,那麼會輸出0; 3)若是+號兩邊的字符串是以數字開頭的,那麼會截取字符串開頭的數字,而後進行運算。
29. 什麼是三目(或三元)運算符?
根據一個表達式的結果在另兩個表達式中選擇一個。 例如: ($a==true) ? 'good':'bad';
30. 控制流程語句有哪些?
1:三種程序結構    順序結構、分支結構、循環結構 2:分支: if/esle/esleif/     switch/case/default 3: switch 須要注意的: case子句中的常量能夠是整型、字符串型常量、 或者常量表達式,不容許是變量。   同一個switch子句中,case的值不能相同,不然只能取到首次出現case中的值。 4: 循環  for while   do...while  do...while 後面必須加入分號結尾。  while 和 do...while 的區別 5:break 和 continue 的區別。 break能夠終止循環。 continue沒有break強大,只能終止本次循環而進入到下一次循環中。
31. 數組的概念是什麼?數組根據索引分爲哪兩種,如何區分?數組的賦值方式有哪兩種?
數組是一個能夠存儲一組或一系列數值的變量(複合型變量) 索引數組(索引值爲數字,以0開始)和關聯數組(以字符串做爲索引值) 數組的賦值方式有哪兩種? 數組的聲明方式主要有兩種。 1.經過array()函數聲明數組; 能夠經過key=>value的方式分別定義索引和值,也能夠不定義數組的索引下標,只給出數組的元素值。 2.直接爲數組元素賦值,不須要調用array()函數。例如: $arr[0] = 1; $arr[1] = 2; 特別注意: 數組的下標若是是等價於整數的字符串值(但不能以0開頭),則會被看成整數對待。   例如: $array[3] 與  $array['3'] 引用的是相同的一個元素,而 $array['03'] 引用的則就是另外的一個元素了。
32.數組如何遍歷?
①for循環 ②foreach循環 用法以下:foreach($arr as $key=>$value){} ③list each 和while 配合起來循環
33. foeach數組的時候指針是如何指向的?list()/each()/while()循環數組的時候指針如何指向的呢?
當foreach開始執行的時候,數組內部的指針會自動指向第一個單元。由於foreach所操做的是指定數組的拷貝,而不是該數組自己。 而each()一個數組後,數組指針將停留在數組中的下一個單元或者碰到數組結尾時停留在最後一個單元。若是要再次使用each()遍歷數組,必需要使用reset(). reset()將數組的內部指針倒回到第一個單元並返回第一個數組單元的值。
34. 如何計算數組長度(或者說計算數組中全部元素的個數)?字符串怎麼取長度?
count() -- 計算數組中的元素個數。 可使用count(數組名)或者count(數組名,1),若是有第二個參數,而且是數字1,則表示遞歸統計數組元素的個數。 若是第二個參數是數字0,則等同於只有一個參數的count()函數。 sizeof() -- count() 的別名 字符串:strlen()、mb_strlen();
35. 數組中相關的經常使用函數有哪些?
 1) count --(sizeof別名)— 計算數組中的單元數目或對象中的屬性個數   例如:int count ( mixed $var [, int $mode ] )  $var 一般都是數組類型,任何其它類型都只有一個單元。  $mode 默認值爲0. 1爲開啓遞歸地對數組計數 2) in_array ( mixed $needle , array $haystack [, bool $strict ] ) — 檢查數組中是否存在某個值。 若是 needle 是字符串,則比較是區分大小寫的。 若是第三個參數 strict 的值爲 TRUE 則 in_array() 函數還會檢查 needle 的類型是否和 haystack 中的相同。 3) array_merge(array $array1 [, array $array2 [, array $... ]] ) 將一個或多個數組的單元合併起來,一個數組中的值附加在前一個數組的後面。返回做爲結果的數組。 特別注意:若是輸入的數組中有相同的字符串鍵名,則該鍵名後面的值將覆蓋前一個值。然而,若是數組包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。 若是隻給了一個數組而且該數組是數字索引的,則鍵名會以連續方式從新索引 4) 數組與字符串之間的轉換 (1)explode ( string $separator , string $string [, int $limit ] )  使用一個分隔字符來分隔一個字符串。 (2)implode ( string $glue , array $arr )  使用一個鏈接符將數組中的每一個單元鏈接爲一個字符串。 join 爲 implode 的別名 5) sort(array &$array [, int $sort_flags ]) — 對數組按照值排序,當本函數結束時數組單元將被從最低到最高從新安排。
36. 數組合並函數array_merge()和數組加法運算$arr + $arr2 的區別是什麼?
array_merge()->使用array_merge(),若是是關聯數組合並,若是數組的鍵名相同,那麼後面的值將覆蓋前者;若是是數字索引數組合並,則不覆蓋,而是 後者附加到前者後面。 "+"->使用數組加法運算,與array_merge()不一樣,加法運算無論是關聯數組仍是數字索引數組,都是將相同鍵名的的值捨棄, 也就是隻保留首次出現該鍵名的元素,後來的具備相同鍵名的元素都不會被加進來。
37. 字符串定義的時候單引號和雙引號有什麼區別?
」 」 雙引號裏面的字段會通過編譯器解釋,而後再看成HTML代碼輸出。
‘ ‘ 單引號裏面的不進行解釋,直接輸出。
38. echo(),print(),print_r()的區別?
(1)echo 是語法,Output one or more strings,沒有返回值; (2)print 是函數,不能輸出數組和對象,Output a string,print有返回值; (3)print_r 是函數,能夠輸出數組。print_r是個比較有意思的函數,能夠輸出stirng、int、float、 array、object等,輸出array時會用結構表示,print_r輸出成功時返回true;並且print_r能夠經過print_r($str,true)來,使print_r不輸出而返回print_r處理後的值。此外,對於echo和print,基本以使用echo居多,由於其效率比print要高。
=================================================================================================
39. 按照功能分類說說都有哪些字符串處理函數?這些函數的做用是什麼?
A. 字符串輸出函數 (1)echo $a,$b,$c......;  是一個語言結構,而不是一個真正的函數。 (2)print($a)    本函數輸出字符串。若成功則返回 1,失敗返回 0 (3)print_r($a) (4)var_dump($a); 能輸出類型、長度、值 B. 去除字符串首尾空格的函數: trim  ltrim  rtrim(別名:chop)   使用第二個參數,還能夠去除指定的字符。 C. 轉義字符串函數:addslashes() D. 獲取字符串長度的函數:strlen() E. 截取字符串長度的的函數:substr() F. 檢索字符串函數: strstr() , strpos() G. 替換字符串函數:str_replace()
40. 請給出如下問題的正確答案? 
 1).$arr = array('james', 'tom', 'symfony');請將$arr數組的值用’,’分割併合併成字符串輸出? echo implode(‘,’,$arr); 2).$str = ‘jack,james,tom,symfony’; 請將$str用’,’分割,並把分割後的值放到$arr數組中? $arr = explode(‘,’,$str); 3).$arr = array(3,7,2,1,’d’,’abc’); 請將$arr按照從大到小的順序排序,並保持其鍵值不變? arsort($arr); print_r($arr); 4).$mail = 「gaofei@163.com」; 請將此郵箱的域(163.com)取出來並打印,看最多能寫出幾種方法? echo strstr($mail,'163'); echo substr($mail,7); $arr = explode("@",$mail); echo $arr[1]; 5). 若是有一個字符串,該字符串是「123,234,345,」。請問如何切割掉這個字符串最後一個逗號? 6). 獲取隨機數的函數有哪幾個?mt_rand() 和 rand()哪一個執行速度快?
41.頁面字符出現亂碼,怎麼解決?
1.首先考慮當前文件是否是設置了字符集。查看是否是meta標籤中寫了charset,若是是php頁面還能夠看看是否是 在header()函數中指定了charset; 例如: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> header(「content-type:text/html;charset=utf-8」); 2.若是設置了字符集(也就是charset),那麼判斷當前文件保存的編碼格式是否跟頁面設置的字符集保持一致, 二者必須保持統一; 3.若是涉及到從數據庫提取數據,那麼判斷數據庫查詢時的字符集是否跟當前頁面設置的字符集一致,二者必須統一, 例如:mysql_query(「set names utf8」)。
42. 正則表達式是什麼?php中有哪些經常使用的跟正則相關的函數?請寫出一個email的正則,中國手機號碼和座機號碼的正則表達式?
正則表達式是用於描述字符排列模式的一種語法規則。正則表達式也叫作模式表達式。 網站開發中正則表達式最經常使用於表單提交信息前的客戶端驗證。 好比驗證用戶名是否輸入正確,密碼輸入是否符合要求,email、手機號碼等信息的輸入是否合法。 在php中正則表達式主要用於字符串的分割、匹配、查找和替換操做。 preg系列函數能夠處理。具體有如下幾個: string preg_quote ( string str [, string delimiter] ) 轉義正則表達式字符 正則表達式的特殊字符包括:. \\ + * ? [ ^ ] $ ( ) { } = ! < > | :。 preg_replace -- 執行正則表達式的搜索和替換 mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] ) preg_replace_callback -- 用回調函數執行正則表達式的搜索和替換 mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit] ) preg_split -用正則表達式分割字符串 array preg_split ( string pattern, string subject [, int limit [, int flags]] )
43. 若是想過濾掉某個字符串中全部的html標記使用哪一個函數?
好像是用strip_tags函數吧
 
44. preg_replace()和 str_ireplace()兩個函數在使用上有什麼不一樣?preg_split()和split()函數如何使用?
str_replace:這個應該做爲字符串替換的首選方法,不過有一點須要注意,就是把最但願匹配的元素放在前面。
strtr: strtr在短字符串替換的時候也是挺高效的,不過search數組的下標長度的差異也對效率產生比較大的影響,還有就是沒事最好不要使用strtr(string, string, string)這種形式(對於非單字節字符很容易產生亂碼)。
preg_replace:這個不用說,可使用正則匹配,功能絕對是最強的,不過也是要犧牲一點效率的。

45. 獲取當前時間戳的函數主要有哪些?用PHP打印出今天的時間,格式是2010-12-10 22:21:21? 用PHP打印出前一天的時間格式是2010-12-10 22:21:21?如何把2010-12-25 10:30:25變成unix時間戳?
echo date ("Y-m-d H:i:s" ,strtotime(‘-1,days’)); date('Y-m-d H:i:s',time()); $unix_time = strtotime("2009-9-2 10:30:25");//變成unix時間戳 echo date("Y-m-d H:i:s",$unix_time);//格式化爲正常時間格式
46. 在url中用get傳值的時候,若中文出現亂碼,應該用哪一個函數對中文進行編碼? 用戶在網站表單提交數據的時候,爲了防止腳本攻擊(好比用戶輸入<script>alert(111);</script>),php端接收數據的時候,應該如何處理?
使用urlencode()對中文進行編碼,使用urldecode()來解碼。 使用htmlspecialchars($_POST[‘title’])來過濾表單傳參就能夠避免腳本攻擊。
47. 鏈接數據庫操做的步驟是什麼?每一步的返回值是什麼數據類型?尤爲是mysql_query()返回什麼數據類型?
 

$conn=mysql_pconnect("localhost","root","123456");//打開鏈接
mysql_select_db("數據庫名",$conn);//鏈接到指定的數據庫
mysql_query("set names utf8");//設置字符編碼
$sql="";
$R=mysql_query($sql);//執行SQL語句返回結果集
while($v=mysql_fetch_array($R)){
echo "字段名".$v['title'];
}

mysql_query()若是裏面放的是查詢之類的語句,那返回的是資源,說白了就是你要查的數據結果集;若是裏面放的是增刪改之類的語句,那返回的是true或者false了。
 
48. 說說mysql_fetch_row() 和mysql_fetch_assoc()和mysql_fetch_array之間有什麼區別?
第一個是返回結果集中的一行做爲索引數組,第二個是返回關聯數組,而第三個既能夠返回索引數組也能夠返回關聯數組,取決於它的第二個參數 MYSQL_BOTH MYSQL_NUM  MYSQL_ASSOC 默認爲MYSQL_BOTH $sql =」select * from table1」; $result = mysql_query($sql); mysql_fetch_array($result, MYSQL_NUM);
49. 請說出目前學過的返回是資源的函數?
答: mysql_connect(); mysql_query();只有這執行select的時候成功,才返回資源,失敗返回FALSE fopen();
50. 略
51. 文件上傳須要注意哪些細節?怎麼把文件保存到指定目錄?怎麼避免上傳文件重名問題?
1.首現要在php.ini中開啓文件上傳; 2.在php.ini中有一個容許上傳的最大值,默認是2MB。必要的時候能夠更改; 3.上傳表單必定要記住在form標籤中寫上enctype="multipart/form-data"; 4. 提交方式 method 必須是 post; 5. 設定 type="file" 的表單控件; 6.要注意上傳文件的大小MAX_FILE_SIZE、文件類型是否符合要求,上傳後存放的路徑是否存在。 能夠經過上傳的文件名獲取到文件後綴,而後使用時間戳+文件後綴的方式爲文件從新命名,這樣就避免了重名。 能夠本身設置上傳文件的保存目錄,與文件名拼湊造成一個文件路徑,使用move_uploaded_file(),就能夠完成 將文件保存到指定目錄。
52. $_FILES是幾維數組?第一維和第二維的索引下標分別是什麼?批量上傳文件的時候須要注意什麼?
二維數組。第一維是上傳控件的name,二維下標分別爲name/type/tmp_name/size/error.
53. header()函數主要的功能有哪些?使用過程當中注意什麼?
使用header函數進行跳轉頁面,header(‘Location:’.$url);使用header聲明content-type,header(‘content-type:text/HTML;charset=utf-8′);使用header返回response 狀態碼,例如:header(‘HTTP/1.1 404 Not Found’);使用header在某個時間後執行跳轉,header(「Refresh: {$delay}; url={$url}」),其中$delay就是推遲跳轉的時間,$url爲須要跳轉的url;使用header控制瀏覽器緩存;執行http驗證,header(‘HTTP/1.1 401 Unauthorized’),header(‘WWW-Authenticate: Basic realm=」Top Secret」‘);使用header進行下載操做;
54. 文件下載的時候如何使用header()函數?
header("content-type: application/octet-stream;charset=UTF-8"); //在這裏加utf-8和在上面定義有什麼區別?
   header("accept-ranges: bytes");            header("accept-length: ".filesize($filedir.$filename));            header("content-disposition: attachment; filename=".$filedir.$filename);
55. 什麼是ajax?ajax的原理是什麼?ajax的核心技術是什麼?ajax的優缺點是什麼?
ajax是asynchronous javascript and xml的縮寫,是javascript、xml、css、DOM等多個技術的組合。 '$'是jQuery的別名.  頁面中用戶的請求經過ajax引擎異步地與服務器進行通訊,服務器將請求的結果返回給這個ajax引擎,  最後由這個ajax引擎來決定將返回的數據顯示到頁面中的指定位置。Ajax最終實現了在一個頁面的指定位置能夠加載另外一個頁面全部的輸出內容。 這樣就實現了一個靜態頁面也能獲取到數據庫中的返回數據信息了。因此ajax技術實現了一個靜態網頁在不刷新整個頁面的狀況下與服務器通訊, 減小了用戶等待時間,同時也從而下降了網絡流量,加強了客戶體驗的友好程度。 Ajax的優勢是: 1.  減輕了服務器端負擔,將一部分之前由服務器負擔的工做轉移到客戶端執行,利用客戶端閒置的資源進行處理; 2.  在只局部刷新的狀況下更新頁面,增長了頁面反應速度,使用戶體驗更友好。 Ajax的缺點是不利於seo推廣優化,由於搜索引擎沒法直接訪問到ajax請求的內容。 ajax的核心技術是XMLHttpRequest,它是javascript中的一個對象。
56. jquery是什麼?jquery簡化ajax後的方法有哪些?
jQuery是Javascript的一種框架。 $.get(),$.post(),$.ajax()。$是jQuery對象的別名。
 代碼以下: $.post(異步訪問的url地址 , {'參數名' : 參數值} , function(msg){ $("#result").html(msg); }); $.get(異步訪問的url地址 , {'參數名' : 參數值} , function(msg){ $("#result").html(msg); }); $.ajax({ type: "post", url: loadUrl, cache:false, data: "參數名=" + 參數值, success: function(msg) { $("#result").html(msg); } });
57. 什麼是會話控制?
簡單地說會話控制就是跟蹤和識別用戶信息的機制。會話控制的思想就是可以在網站中跟蹤一個變量,經過這個變量, 系統能識別出相應的用戶信息,根據這個用戶信息能夠得知用戶權限,從而展現給用戶適合於其相應權限的頁面內容。 目前最主要的會話跟蹤方式有cookie,session。
58. 會話跟蹤的基本步驟
1).訪問與當前請求相關的會話對象 2).查找與會話相關的信息 3).存儲會話信息 4).廢棄會話數據
59. 使用cookie的注意事項有哪些?
1) setcookie()以前不能夠有任何頁面輸出,就是空格,空白行也不能夠; 2) setcookie()後,在當前頁面調用$_COOKIE['cookiename']不會有輸出,必須刷新或到下一個頁面才能夠看到cookie值; 3) 不一樣的瀏覽器對cookie處理不一樣,客戶端能夠禁用cookie,瀏覽器也能夠閒置cookie的數量,一個瀏覽器能建立的cookie數量最多300個,而且每一個不能夠超過4kb, 每一個web站點能設置的cookie總數不能超過20個。 4) cookie是保存在客戶端的,用戶禁用了cookie,那麼setcookie就不會起做用了。因此不能夠過分依賴cookie。
60. 使用session的時候,經過什麼來表示當前用戶,從而與其餘用戶進行區分?
sessionid,經過session_id()函數能夠取得當前的session_id。
61. session和cookie的使用步驟分別是什麼?什麼是sesssion和cookie的生命週期?session和cookie的區別是什麼?
cookie是保存在客戶端機器的,對於未設置過時時間的cookie,cookie值會保存在機器的內存中,只要關閉瀏覽器則 cookie自動消失。若是設置了cookie的過時時間,那麼瀏覽器會把cookie以文本文件的形式保存到硬盤中, 當再次打開瀏覽器時cookie值依然有效。 session是把用戶須要存儲的信息保存在服務器端。每一個用戶的session信息就像是鍵值對同樣存儲在服務器端, 其中的鍵就是sessionid,而值就是用戶須要存儲信息。服務器就是經過sessionid來區分存儲的session信息是 哪一個用戶的。 二者最大的區別就是session存儲在服務器端,而cookie是在客戶端。session安全性更高,而cookie安全性弱。 session在web開發中具備很是重要的分量。它能夠將用戶正確登陸後的信息記錄到服務器的內存中,當用戶以此身份 訪問網站的管理後臺時,無需再次登陸便可獲得身份確認。而沒有正確登陸的用戶則不分配session空間,即使輸入了 管理後臺的訪問地址也不能看到頁面內容。經過session肯定了用戶對頁面的操做權限。
使用session的步驟: 1. 啓動session: 使用session_start()函數來啓動。 2. 註冊會話:   直接給$_SESSION數組添加元素便可。 3. 使用會話: 判斷session是否爲空或者是否已經註冊,若是已經存在則像普通數組使用便可。 4. 刪除會話: 1.可使用unset刪除單個session; 2.使用$_SESSION=array()的方式,一次註銷全部的會話變量; 3.使用session_destroy()函數來完全銷燬session。 cookie怎麼使用? 1. 記錄用戶訪問的部分信息 2. 在頁面間傳遞變量 3. 將所查看的internet頁存儲在cookies臨時文件夾中,能夠提升之後的瀏覽速度。 建立cookie: setcookie(string cookiename , string value , int expire); 讀取cookie:經過超級全局數組$_COOKIE來讀取瀏覽器端的cookie的值。 刪除cookie:有兩種方法 1.手工刪除方法: 右擊瀏覽器屬性,能夠看到刪除cookies,執行操做便可將全部cookie文件刪除。 2.setcookie()方法: 跟設置cookie的方法同樣,不過此時將cookie的值設置爲空,有效時間爲0或小於當前時間戳。
=================================================================================================
62. 如何設置一個cookie的名字爲username,值爲jack,而且讓此cookie一週後失效? 一個瀏覽器最多能夠產生多少個cookie,每一個cookie文件最大不能超過多少?
setcookie(‘username’,’jack’,time()+7*24*3600); 最多能夠產生20個cookie,每一個最多不超過4K
63. 設置或讀取session以前,須要作什麼?
能夠直接在php.ini中開啓session.auto_start = 1或者在頁面頭部用session_start(); 開啓session,session_start()前面不能有任何輸出,包括空行。
64. 在實際開發中,session在哪些場合使用?
session用來存儲用戶登陸信息和用在跨頁面傳值。 1)經常使用在用戶登陸成功後,將用戶登陸信息賦值給session; 2)用在驗證碼圖片生成,當隨機碼生成後賦值給session。
65. 註銷session會話的形式有幾種?
unset() $_SESSION=array(); session_destroy();
66. 什麼是OOP?什麼是類和對象?什麼是類屬性?
OOP(object oriented programming),即面向對象編程,其中兩個最重要的概念就是類和對象。屬性和方法的集合就造成了類,類是面向對象編程的核心和基礎, 經過類就將零散的用於實現某個功能的代碼有效地管理起來了。 類只是具有了某些功能和屬性的抽象模型,而實際應用中須要一個一個實體,也就是須要對類進行實例化, 類在實例化以後就是對象。類是對象的抽象概念,對象是類的實例化。 OOP具備三大特色:1. 封裝性(又叫作隱藏性);2. 繼承性; 3. 多態性。 OOP的優勢:一、代碼重用性高(省代碼) 二、使程序的可維護性高(擴展性) 三、靈活性
67. 經常使用的屬性的訪問修飾符有哪些?分別表明什麼含義?
private,protected,public。 類外:public ,var 子類中:public,protected ,var 本類中:private,protected,public ,var 若是不使用這三個關鍵詞,也可使用var關鍵字。可是var不能夠跟權限修飾詞一塊兒使用。var定義的變量,子類中能夠訪問到,類外也能夠訪問到,至關於public,   類前面:只能加final,abstract,  屬性前面:必須有訪問修飾符(private,protected,public,var),  方法前面:static,final,private,protected,public ,abstract
68. $this和self、parent這三個關鍵詞分別表明什麼?在哪些場合下使用?
$this 當前對象,self  當前類, parent  當前類的父類,$this在當前類中使用,使用->調用屬性和方法。 self也在當前類中使用,不過須要使用::調用。 parent在類中使用。
69.類中如何定義常量、如何類中調用常量、如何在類外調用常量。
類中的常量也就是成員常量,常量就是不會改變的量,是一個恆值。 定義常量使用關鍵字const. 例如:const PI = 3.1415326; 不管是類內仍是類外,常量的訪問和變量是不同的,常量不須要實例化對象, 訪問常量的格式都是類名加做用域操做符號(雙冒號)來調用。 即:類名 :: 類常量名; 
70. 做用域操做符::如何使用?都在哪些場合下使用?
調用類常量,調用靜態方法。
71. 什麼是魔術方法?經常使用的魔術方法有哪幾個?
 以__開頭的系統自定義的方法。 __construct() __destruct() __autoload() __call() __tostring()
72. 什麼是構造方法和析構方法?
構造方法就是在實例化一個對象的同時自動執行的成員方法,做用就是初始化對象。 php5以前,一個跟類名徹底相同的方法是構造方法,php5以後魔術方法__construct()就是構造方法。 若是類中沒有定義構造方法,那麼php會自動生成一個,這個自動生成的構造方法沒有任何參數, 沒有任何操做。析構方法的做用和構造方法正好相反,是對象被銷燬時被自動調用的,做用是釋放內存。 析構方法的定義方法爲:__destruct(); 由於php具備垃圾回收機制,能自動清除再也不使用的對象,釋放內存,通常狀況下能夠不手動建立析構方法。
73. __autoload()方法的工做原理是什麼?
使用這個魔術函數的基本條件是類文件的文件名要和類的名字保持一致。 當程序執行到實例化某個類的時候,若是在實例化前沒有引入這個類文件,那麼就自動執行__autoload()函數。 這個函數會根據實例化的類的名稱來查找這個類文件的路徑,當判斷這個類文件路徑下確實存在這個類文件後 就執行include或者require來載入該類,而後程序繼續執行,若是這個路徑下不存在該文件時就提示錯誤。 使用自動載入的魔術函數能夠沒必要要寫不少個include或者require函數。
74. 什麼是抽象類和接口?抽象類和接口有什麼不一樣和類似的地方?
抽象類是一種不能被實例化的類,只能做爲其餘類的父類來使用。 抽象類是經過關鍵字 abstract 來聲明的。 抽象類與普通類類似,都包含成員變量和成員方法,二者的區別在於,抽象類中至少要包含一個抽象方法, 抽象方法沒有方法體,該方法天生就是要被子類重寫的。 抽象方法的格式爲:abstract function abstractMethod(); 由於php中只支持單繼承,若是想實現多重繼承,就要使用接口。也就是說子類能夠實現多個接口。 接口是經過interface關鍵字來聲明的,接口中的成員變量和方法都是public的,方法能夠不寫關鍵字public, 接口中的方法也是沒有方法體。接口中的方法也天生就是要被子類實現的。 抽象類和接口實現的功能十分類似,最大的不一樣是接口能實現多繼承。在應用中選擇抽象類仍是接口要看具體實現。 子類繼承抽象類使用extends,子類實現接口使用implements。 抽象類至少有一個抽象方法嗎?答:若是一個類聲明成抽象類,裏面能夠沒有抽象方法    若是一個類中有抽象方法,這個類必須是抽象類
75. __call的參數有幾個,類型是什麼,意義是什麼?
魔術方法__call()的做用是當程序調用一個不存在或不可見的成員方法時,php會先調用__call()方法, 將那個不存在的方法的方法名和參數都存儲下來。 __call()包含兩個參數,  第一個參數是那個不存在的方法的方法名,是個字符串類型; 第二個參數是那個不存在的方法的全部參數,是個數組類型。 本人認爲__call()方法的意義更多在於調試,能夠定位到錯誤。同時能夠捕捉異常,若是某個方法不存在, 則執行其它可替代方法。
76. smarty模板技術的用途是什麼?
爲了php與html分開,美工和程序員各司其職,互不干擾。
77.smarty配置主要有哪幾項?
1. 引入smarty.class.php;2. 實例化smarty對象;3. 從新修改默認的模板路徑;4. 從新修改默認的編譯後文件的路徑;5. 從新修改默認的配置文件的路徑;6. 從新修改默認的cache的路徑。7. 能夠設置是否開啓cache。8. 能夠設置左側和右側定界符。
78. smarty在使用過程當中須要注意哪些細節?
 
Smarty是基於MVC概念的一種模板引擎,它將一個頁面程序分紅了兩部分來實現:即視圖層和控制層, 也就是說smarty技術將用戶UI與php代碼分離開。 這樣程序員和美工各司其職,互不干擾。 smarty運用過程當中要注意如下幾個問題: 1.正確配置smarty。主要要實例化smarty對象,配置smarty模板文件的路徑; 2.php頁面中使用assign賦值 和 display顯示頁面; 3.smarty模板文件中不容許出現php代碼段,全部的註釋,變量,函數都要包含在定界符內。 A.{} B. foreach C. if else D. include E. literal
79. MVC的概念是什麼?各層主要作什麼工做?
MVC(即模型-視圖-控制器)是一種軟件設計模式或者說編程思想。 M指Model模型層,V是View視圖層(顯示層或者用戶界面),C是Controller控制器層。 使用mvc的目的是實現M和V分離,從而使得一個程序能夠輕鬆使用不一樣的用戶界面。 在網站開發中, 模型層通常負責對數據庫表信息進行增刪改查, 視圖層負責顯示頁面內容, 控制器層在M和V之間起到調節做用,控制器層決定調用哪一個model類的哪一個方法, 執行完畢後由控制器層決定將結果assign到哪一個view層。
80. 略
81. java語言中方法重寫和重載分別表明什麼意思?準確說php支持方法的重載嗎?不少參考書中提到的php重載實際上該如何正確理解?
php不支持方法的重載,不少書裏提到的PHP‘重載’應該是‘重寫’
82. final關鍵字能定義類中的成員屬性嗎?
不能,類的成員屬性只能由public ,private , protected ,var 來定義
83. final關鍵字定義的類可以被繼承嗎?
final定義的類不能被繼承
84. 說說static關鍵字的使用場合?static能用在class前嗎?static能夠跟public,protected,private一塊兒使用嗎?構造方法能夠是static的嗎?
static能夠在屬性和方法前面使用,調用static屬性或者方法時,只要將類載入就可用,不用實例化,static不能用在class的前面。static能夠跟public,protected,private一塊兒使用,在方法的前面; 構造方法不能是static
85. 接口能夠實例化嗎?抽象類能實例化嗎?
答:接口和抽象類都不能被實例化
86. class前面能加訪問修飾符嗎?若是能加,只能是哪幾個訪問修飾符?能夠是權限訪問修飾符public,protected,private嗎? 
class前面能夠加final,static; class前面不能加public,protected,private
87. 類中屬性前能夠不加訪問修飾符嗎?成員變量前的修飾符只能是public,protected,private嗎?還能夠是哪幾個?
類中的屬性必須加修飾符,除了那3個之外,還能夠加var
88. 若是echo一個數組,頁面輸出什麼?echo一個對象呢?print一個數組或者對象呢?
頁面只能輸出「Array」;echo一個對象會出現錯誤提示。print一個數組時也只是輸出「Array」,print一個對象出現錯誤提示,     print和echo是同樣的 
89. __tostring()魔術方法在何時被自動執行? __tostring()魔術方法必需要return返回值嗎?
當echo或者print一個對象時,就是自動觸發。並且__tostring()必需要返回一個值
90. 什麼是抽象方法?
在方法前面有abstract,並且方法沒有方法體,連「{ }」也不能有
91. 若是一個類中有一個方法是抽象方法,而這個類沒有定義成抽象類,會報錯嗎?
會,"Fatal error: Class t2 contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (t2::ee) in"
92. 若是一個類是抽象類,而類中的方法都是非抽象的方法,會報錯嗎?
不會,若是一個類是抽象類,其中能夠沒有抽象方法,可是一個類中有個方法是抽象方法,那麼這個類必定是一個抽象類
93.略
94. final 關鍵字的應用應注意的問題?
使用final關鍵字定義的類,禁止繼承。 使用final關鍵字定義的方法,禁止重寫。
95. 若是一個類既要繼承一個父類,又要實現多個接口,該如何寫?
書寫格式例如: class MaleHuman extends Human implements Animal,Life { ... }
=================================================================================================
96. 什麼是單點入口呢?        
所謂單點入口就是整個應用程序只有一個入口,全部的實現都經過這個入口來轉發,好比說在上面咱們就使用index.php做爲程序的單點入口,固然這個是能夠由你本身任意控制的。 單點入口有幾大好處:第1、一些系統全局處理的變量,類,方法均可以在這裏進行處理。好比說你要對數據進行初步的過濾,你要模擬session處理,你要定義一些全局變量,甚至你要註冊一些對象或者變量到註冊器裏面。第2、程序的架構更加清晰明瞭。
97. PHP提供了2套正則表達式函數庫,分別是哪兩套?
(1) PCRE   Perl兼容正則表達式:preg_   爲前綴 (2) POSIX  便攜式的操做系統接口:ereg_   爲前綴
98. 正則表達式的組成?    
由原子(普通字符,如英文字符),元字符(有特殊功用的字符),模式修正字符,一個正則表達式中,至少包含一個原子
99. 不經常使用魔術方法的觸發時機?
__isset()  __unset()的觸發時機 __sleep()、 __wakeup()  在對對象進行串行化的時候調用,若是序列化對象的時候,不寫__sleep()方法,則全部的成員屬性都會被序列化,而定義了__sleep()方法,則只序列化指定數組中的變量。 所以,若是有很是大的對象而並不須要徹底儲存下來時此函數也頗有用。  使用 __sleep 的目的是關閉對象可能具備的任何數據庫鏈接,提交等待中的數據或進行相似的清除任務。此外,若是有很是大的對象而並不須要徹底儲存下來時此函數也頗有用。 使用 __wakeup 的目的是重建在序列化中可能丟失的任何數據庫鏈接以及處理其它從新初始化的任務。
100. OOP的三大特性是什麼?
1. 封裝性:也稱爲信息隱藏,就是將一個類的使用和實現分開,只保留部分接口和方法與外部聯繫,或者說只公開了一些供開發人員使用的方法。因而開發人員只須要關注這個類如何使用,而不用去關心其具體的實現過程,這樣就能實現MVC分工合做,也能有效避免程序間相互依賴,實現代碼模塊間鬆藕合。 2. 繼承性:就是子類自動繼承其父級類中的屬性和方法,並能夠能夠添加新的屬性和方法或者對部分屬性和方法進行重寫。繼承增長了代碼的可重用性。php只支持單繼承,也就是說一個子類只能有一個父類。 3. 多態性:子類繼承了來自父級類中的屬性和方法,並對其中部分方法進行重寫。因而多個子類中雖然都具備同一個方法,可是這些子類實例化的對象調用這些相同的方法後卻能夠得到徹底不一樣的結果,這種技術就是多態性。多態性加強了軟件的靈活性。
101. 常見框架
thinkPHP yii ZendFramework CakePhp sy
102. 經常使用魔術方法的觸發時機?
1)__autoload() :當程序執行到實例化某個類的時候,若是在實例化前沒有引入這個類文件,那麼就自動執行__autoload()函數。這個函數會根據實例化的類的名稱來查找這個類文件的路徑,當判斷這個類文件路徑下確實存在這個類文件後,就執行include或者require來載入該類,而後程序繼續執行,若是這個路徑下不存在該文件時就提示錯誤。使用自動載入的魔術函數能夠沒必要要寫不少個include或者require函數。 
2)__construct()  :構造方法是實例化對象的時候自動執行的方法,做用就是初始化對象。該方法能夠沒有參數,也能夠有多個參數。若是有參數,那麼new這個對象的時候要記得寫上相應的參數。在php5之前,沒有魔術構造方法,普通構造方法是一個跟類名同名的方法來實現構造的。若是一個類中既寫了魔術構造方法,又定義了普通構造方法。那麼php5以上版本中,魔術方法起做用,普通構造方法不起做用。反之,在php5之前版本中,不認識魔術構造方法,只是把該方法當作普通的方法。 
3)__destruct()  :析構方法做用和構造方法正好相反,是對象被銷燬時被自動調用的,做用是釋放內存。析構方法沒有參數。
4)__call() :當程序調用一個不存在或不可見的成員方法時,自動觸發執行__call()。它有兩個參數,分別是未訪問到的方法名稱和方法的參數。而第二個參數是數組類型。 
5)__get() :當程序調用一個未定義或不可見的成員屬性時,自動觸發執行__get()。它有一個參數,表示要調用的屬性的名稱。 6)__set():當程序試圖寫入一個不存在或不可見的成員屬性時,PHP就會自動執行__set()。它包含兩個參數,分別表示屬性名稱和屬性值。 
7)__tostring()  :當程序使用echo或print輸出對象時,會自動調用該方法。目的是但願經過該方法將對象轉化爲字符串,再輸出。__tostring() 無參數,可是該方法必須有返回值。 
8)__clone()  :當程序clone一個對象的時候,能觸發__clone()方法,程序但願經過這個魔術方法實現:不只僅單純地克隆對象,還須要克隆出來的對象擁有原來對象的全部屬性和方法。
103. 略
10四、訪問權限修飾符有哪幾種,對比解釋
一、public 表示公共的,在本類中和子類中以及類外,能夠對其調用;  二、protected表示受保護的,能夠在本類中和子類中調用;  三、private表示私有的,只能在本類中調用;  四、var,效果等同於public
10五、Class關鍵詞前能夠有哪些修飾詞
a) Final修飾,表示該類是最終的,沒法繼承;  b) Abstract修飾,表示該類是抽象類
10六、做用域操做符在那些場合下使用
做用於操做符的使用場合 a) 本類中: i. self::類常量 ii. self::靜態屬性 iii. self::方法()   parent::方法() b) 子類中: i. parent::類常量 ii. parent::靜態屬性(public或者protected) iii. parent::方法()(public或者protected) c) 類外: i. 類名::類常量 ii. 類名::靜態屬性(public) iii. 類名::靜態方法(public)
10七、$this,self, parent分別表明什麼?哪些場合下使用
答:$this表明的是當前對象 self表明的是當前的類 parent表明的是當前類的父類 使用場合: $this只能使用在當前類中,經過$this->能夠調用當前類中的屬性和方法; self只能在當前類中使用,經過做用域操做符::訪問當前類中的類常量、當前類中的靜態屬性、當前類中的方法; parent只能使用在有父類的當前類中,經過做用域操做符::訪問父類中的類常量、父類中的靜態屬性、父類中的方法。
10八、說明是接口、抽象類兩者有何相同和不一樣的地方?
一、接口是幫助php實現功能意義上的多繼承的,用interface來聲明,其方法沒有方法體,使用implemens關鍵詞來實現接口。 接口中只能包含抽象方法和類常量,不能夠包含成員屬性。 
二、抽象類是一種不能被實例化的類,只能做父類,用abstract class來定義,抽象類和普通類能夠沒有區別,類中能夠包含成員屬性、類常量、方法。 子類得用extends來繼承,並且只能是單繼承。 二者相同點是都不能夠被實例化,都是須要被繼承纔可使用。 二者的最大區別是接口能夠實現多繼承,而抽象類只能是單繼承。 接口中不能包含成員屬性,而抽象類中能夠有成員屬性。 接口中的抽象方法必須是public或者無訪問修飾詞,接口中的抽象方法不能用abstract來修飾。 抽象類中的方法能夠是普通方法,也能夠是抽象方法,若是是抽象方法,必定須要使用abstract來修飾。
10九、解釋PHP中單例模式?
又叫作單態模式、單元素模式、singleton pattern。 單例模式指在PHP的應用程序的範圍內只對指定的類建立一個實例。使用單例模式的類稱爲單例類。 在php中單例類必需要有一個私有的構造方法,還要有一個私有的魔術克隆方法(該方法體中爲空) 和一個私有的靜態的成員屬性$_instance. 私有構造方法防止除自身之外的類來實例化它。私有的方法體爲空的克隆方法防止該類被克隆。 $_instance用來存儲被自身實例化後的對象。 還必需要有一個公共的靜態的方法getInstance()。該方法返回已經存儲了實例對象的$_instance。
1十、什麼是SQL注入?
SQL注入攻擊是黑客對數據庫進行攻擊的經常使用手段之一。一部分程序員在編寫代碼的時候, 沒有對用戶輸入數據的合法性進行判斷,注入者能夠在表單中輸入一段數據庫查詢代碼並提交, 程序將提交的信息拼湊生成一個完整sql語句,服務器被欺騙而執行該條惡意的SQL命令。注入者根據程序返回的結果, 成功獲取一些敏感數據,甚至控制整個服務器,這就是SQL注入。
1十一、如何防止SQL注入?
要對提交的信息進行過濾,對單引號進行轉義。 首先能夠在php.ini中設置,讓全部的單引號在提交後都進行轉義。或者使用addslashes().
1十二、FCKEditor自動過濾的解決辦法?
若是您須要編輯模板頁,默認的FCK設置是會去掉<HTML></HTML><BODY></BODY>標籤,並且會給你加上<P></P>標籤的,若是須要保留的話,只要更改下設置能夠了。 在fckconfig.js裏面有:FCKConfig.FullPage = false ; 改成:FCKConfig.FullPage = true; 若是想去掉自動添加<P>的代碼就能夠在這裏設置 默認是 FCKConfig.EnterMode = 'p' ;    // p | div | br FCKConfig.ShiftEnterMode = 'br' ; // p | div | br 改爲 FCKConfig.EnterMode = 'br' ;    // p | div | br FCKConfig.ShiftEnterMode = 'p' ; // p | div | br 
11三、$_REQUEST、$_GET、$_POST、$_COOKIE 的關係和區別:
1.關係:$_REQUEST包含了$_GET、$_POST、$_COOKIE等的全部內容,是它們的集合體。 2.經過$_REQUEST獲取變量值,PHP頁面由於不肯定它是哪一種傳值方式, 所以會根據php.ini中的配置來接收值。 php.ini裏能夠設置,variables_order = 「GPC」。其含義是GET,POST,COOKIE. 因此PHP頁面會先從$_GET中獲取,再從$_POST中獲取,而後從$_COOKIE中獲取。 新得到的值會覆蓋以前獲取到的值。 所以從表現形式上看,$_REQUEST最後是獲取$_COOKIE中的值,若是$_COOKIE中沒有值, 會獲取$_POST中的值,若是$_POST沒有獲取到 ,就去$_GET中獲取。 若是$_GET中也沒有該值,那麼$_REQUEST就返回null。
11四、什麼是多條件查詢(複合查詢),如何實現多條件查詢? 如何實現萬能查詢呢?
查詢的時候要填寫查詢條件,這些條件會經過表單進行提交。 首先須要檢查提交的條件是否爲空。若是不爲空,就認爲這個值是要被看成條件, 咱們就可使用字符串鏈接的方式來組合一個sql查詢語句。 當執行後獲取查詢結果。
115. 略
116. 使用GD2庫建立圖像的步驟?
1). 建立一個畫布: imagecreate(); 2). 設置畫布背景顏色,使用RGB設置顏色: imagecolorallocate(); 3). 設置文字顏色: imagecolorallocate(); 4). 在畫布上書寫文字: imagestring(); 5).  以 JPEG 格式將圖像輸出到瀏覽器或文件:根據圖片格式不一樣,函數還能夠是imagepng()、imagegif() imagejpeg(); 6). 清除圖像資源: imagedestroy();
117. GD2庫生成縮略圖的步驟是什麼?
1). 讀取但願生成縮略圖的源圖像,建立圖像對象:根據圖片格式不一樣,函數也相應不一樣 $src_image = imagecreatefromjpeg(); 2). 獲取原圖像的寬度和高度$srcW,$srcH,根據縮放比例計算出新圖像的寬度和高度$dstW、$dstH: 3). 建立一個真色彩的圖像對象,寬度和高度設置成剛纔計算出的寬度和高度: $dst_image = imagecreatetruecolor($dstW,$dstH); 4). 拷貝圖像並調整大小: imagecopyresized(); 5). 將圖像輸出:根據圖片格式不一樣,函數也相應不一樣 imagejpeg(); 6). 清除圖像資源(將源圖像資源和目標圖像資源都清除) imagedestroy();
118. GD2庫給圖片增長水印如何作?
1. 添加簡單的文本水印: 利用imagestring()函數就能夠在圖片上寫文本水印。 2. 增長一個圖形水印: 1). 讀取但願增長水印的源圖片,建立圖像對象:根據圖片格式不一樣,函數也相應不一樣 $image = imagecreatefromjpeg(); 2). 建立一個水印圖片的圖像對象: $watermark = imagecreatefrompng(); 3). 拷貝併合並圖像: imagecopymerge(); 4). 將圖像輸出:根據圖片格式不一樣,函數也相應不一樣 imagejpeg(); 5). 清除圖像資源(將源圖像資源和水印圖像資源都清除) imagedestroy();
119. 什麼是事務?什麼是回滾?事務的做用是什麼?
事務就是組合起來的幾個獨立的sql操做。若是其中一項失敗,那麼就讓這幾個組合起來的sql操做都 回退到未執行狀態。這就是事務的回滾。 mysql中MyISAM存儲引擎的表不支持事務,只有InnoDB 存儲引擎的表才支持事務,爲了讓事務正常執行, 就須要讓參與事務的全部數據表都設置成innoDB類型。 事務被包裝在了 BEGIN 和 COMMIT 語句之間。在沒有使用 COMMIT 語句的狀況下,對數據庫的操做不是永久的, 一旦運行了 ROLLBACK,就會被回退。只有執行了COMMIT,數據表中的信息才被改動。 事務的目的就是爲了保證數據的完整性。
120. 分頁原理是什麼?
數據分頁須要如下幾個條件: 1. 參與分頁的總條數 【$msg_count】 ,該值經過數據庫查詢能夠獲取到; 2. 每頁顯示的條數【$pagesize】 ,這個數值由本身定義; 3. 當前頁的頁碼數 【$page】,該數值經過地址欄傳遞和接收; 4. 能夠經過以上資料計算出總頁數 【$pagecount】 ,此處須要藉助ceil(); 【$pagecount = ceil($msg_count/$pagesize);】 5. 數據庫查詢藉助sql語句中的【limit】來實現數據的變化: 例如: select * from 表名 where 條件 limit $startnum , $pagesize; 而$startnum = ($page-1)*$pagesize;
12一、如何在smarty模板語言中使用php代碼?
藉助於兩個smarty內建函數。 1. inluce_php 函數用於在模板中包含 php 腳本。例如: {include_php file="test.php"} 2. php 標籤容許在模板中直接嵌入 php 腳本。例如: {php} echo "這個是php內建函數的做用"; {/php}
12二、請列出至少五個smarty中的變量調節符並說明功能?
default  例如:{$arr|default:’xxxx’} ,默認變量調節器,當變量爲空時顯示給定的默認值; truncate   例如:{$articleTitle|truncate:10} , 切割字符串長度爲指定的長度; count_characters   例如:{$articleTitle|count_characters} ,獲取字符串長度; strip_tags   例如:  {$articleTitle|strip_tags} ,去除字符串中的全部html標籤; date_format  例如:{$smarty.now|date_format(‘’)} ,格式化時間戳。
12三、寫程序實現以下功能:
a.如何判斷一個字符串中是否存在一個字符? echo strstr('abcdefgcd'  , 'cd'); echo strpos('ab0defgcd'  , 'cd'); b.如何判斷一個字符串中一個字符出現的次數? echo substr_count('abcdefgcd'  , 'cd'); c.如何去掉一個字符串的最後一個字符 echo substr('abcdefgcd'  , 0 ,  -1);
12四、請說明smarty中fetch方法的功能?
Fetch方法能夠獲取到頁面全部的內容,而且賦值到一個變量中。 若是第四個參數爲true,則等同於display,直接輸出到瀏覽器中。 若是第四個參數爲false,則不輸出。 Display方法就是第四個參數爲true的fetch方法。 Display = Fetch() + echo() 
12五、經常使用的正則表達式寫法:
中文:/^[\u4E00-\u9FA5]+$/ 
 手機號碼:/^(86)?0?1\d{10}$/ EMAIL: /^[\w-]+[\w-.]?@[\w-]+\.{1}[A-Za-z]{2,5}$/ 
 密碼(安全級別中): /^(\d+[A-Za-z]\w*|[A-Za-z]+\d\w*)$/ 
 密碼(安全級別高): /^(\d+[a-zA-Z~!@#$%^&(){}][\w~!@#$%^&(){}]*|[a-zA-Z~!@#$%^&(){}]+\d[\w~!@#$%^&(){}]*)$/
=================================================================================================
相關文章
相關標籤/搜索