1,如何串連連兩個字串? 答:在php中串連兩個字串可以直接使用“.”操作符號,例如$newStr="Zhang"."san",在java中是使用“+”操作符號,不要混淆。 2,如何計算一個字串的長度? 答:$str="test";$length=strlen($str);即使用strlen(str)函數。 3,如何按照某個分割符拆分一個字串? 答:使用explode(delim,str)函數,例如$arr=explode("::","a::bdf::dfsdf");該函數返回一個數組。在java中可以使用String對象的split函數。 4,如何擷取http請求中的參數值? 答:如果為GET請求,使用$_GET[paramName],如果為POST請求,使用$_POST[paramName],例如:$email=$_POST["usermail"]。 5,php中是否可以像Java一樣使用類? 答:可以,但是機制和具體使用方式可能不太一樣。 6,是否可以舉一個使用for迴圈的例子? 答: 複製代碼 代碼如下: for($i=0;$i<100;$i++){ echo $i; } 7,如何在javascript中取得php中的變數? 答:例子如下: 複製代碼 代碼如下: <?php $username=$_POST["username"]; ?> <script> var username="<?php echo $username ?>"; </script> 8,如何刪除一個檔案? 答:使用unlink(filename)函數,當然程式必須有許可權刪除該檔案才可以,我們所使用的php虛擬空間可能對一 些檔案是有限制的,所以可能會出現許可權錯誤。 9,我定義了一個類User,聲明了該類的一個方法getName(),為什麼我使用$user=new User;$name=$user.getName()會報錯? 答:注意php中對類成員的引用方式,上面的引用應該為$name=$user->getName(),即使用->符號,而不是 Java中使用的“.”號。 10,我申請了一個不帶mysql支援的php虛擬空間,請問我該怎麼存取應用資料啊? 答:存取資料不一定要使用資料庫,使用檔案系統也是不錯的,另外即使使用資料庫,也不一定非要使用像mysql 、oracle等的這樣的資料庫,也可以使用一些文本資料庫,例如txtsql,這樣的話就不必去租用費用比較高的mysql 資料庫空間了。 11,我申請了一個不帶資料庫的php空間,我現在的應用資料是存在檔案中的,但是這會有一個安全問題,就是 訪問者可以通過url查看到這些檔案的內容,我怎麼保護這些檔案內容呢? 答:建議的方式有三種: 1)如果你租用的php空間允許設定目錄的http存取權限,那麼設定一下即可。 2)可以對檔案內容進行加密,那麼即使被下載,也沒有多大的價值。 3)可以將這些檔案的尾碼改為.php,即使用php檔案儲存體應用資訊,這樣的話,訪問者就無法通過http訪問到 這些檔案的真實內容了,當然這些檔案中的內容必須是正確的php文法,而且內容要使用php文法中的隱藏文法 將資訊隱藏起來,例如一個存放帳號資訊的檔案如下: users.php 複製代碼 代碼如下: <?php /* :::user1:password1::user2:password2::user3:password3::: */ ?> 12, 如何對一個字串進行轉碼? 使用php的iconv函數,簽名為: $str=iconv(fromEncode,toEncode,str); 例如: $str="php字串轉碼"; $str=iconv("utf-8","gbk",$str);//將字串從utf-8格式轉換為gbk格式 轉碼是很重要的一個問題,例如目前許多部落格提供的rss都是utf-8返回的,因此需要通過轉化才能正確顯示。 13,如何讀取一個網頁的HTML內容? PHP中檔案的概念和Java中檔案流的概念是類似的,許多檔案讀取的函數,其接受的輸入資料流不僅僅是本地檔案系統,也可以是網路檔案,下面介紹其中的一種方式: 複製代碼 代碼如下: function getRssContent($url){ $handle = fopen ($url, "rb"); $contents = ""; $count=0; do { $data = fread($handle, 1000000); $count++; if (strlen($data) == 0) { break; } $contents .= $data; } while(true); fclose ($handle); return $contents; } 14,PHP中如何操作mysql資料庫? 為了方便初學者能夠上手mysql的操作,我介紹一些常用的操作: 1)資料庫連接與關閉 複製代碼 代碼如下: $dbhost = ""; $dbuser = ""; $dbpw = ""; $dbname = ""; $link = mysql_connect($dbhost, $dbuser, $dbpw) or die("Could not connect: ".mysql_error()); mysql_select_db($dbname); ...//此處是對資料庫具體的操作,後面的例子不再寫資料庫的串連和關閉操作 mysql_close($link); 2)向表中插入新資料 mysql_query("insert into mytable(id,name) values('".$id."','".$name."')"); 上面是向mytable表的id和name欄位插入一條資料。 3)從表中查詢資料 $rs=mysql_query("select * from mytable mt where mt.id='001'"); 4)從表中刪除資料 $rs=mysql_query("delete from mytable mt where mt.id='001'"); 5)對於複雜查詢,例如select子句,mysql3.22以下版本不支援,因此許多時候php編寫複雜sql時會得不到結果,這其實不是php的錯,而是mysql的版本較低的緣故。 6)對於select返回的結果集,可以如下操作: 對於返回一條結果,可以如下: 複製代碼 代碼如下: $row=mysql_fetch_object($rs); $id=$row->id;//id是欄位名稱,或者欄位的別名,以下同 $title=$row->title; $asker=$row->asker; 對於返回多條結果,可以如下: 複製代碼 代碼如下: while($row=mysql_fetch_object($rs)){ $id=$row->id; $title=$row->title; $asker=$row->asker; } 當然還有方法可以使得返回的結果為數組,訪問也可以根據欄位的位置index值訪問,這個可以查詢相關手冊,就不介紹了。 15,如果你的工程中使用HTML線上編輯器,那麼FCKEditor可能是比較不錯的一個選擇,FCKEditor可以自己去網上下載,下載的地方很多,我介紹一下調用方式: 首先將FCKEditor的目錄放到網站根目錄下,假設你在網站根目錄的/modules/cms/目錄下的edit.php中要引用FCKEditor,具體代碼如下: 複製代碼 代碼如下: <?php $sBasePath = "http://www.cnblogs.com/fckeditor/";//fckeditor是FCKEditor的目錄 $oFCKeditor = new FCKeditor('content') ; $oFCKeditor->BasePath= $sBasePath ; $oFCKeditor->Value="" ; $oFCKeditor->Width="666px"; $oFCKeditor->Height="300px" ?> <div> <?php $oFCKeditor->Create();?> </div> 16,如何在session中儲存資料? 首先要啟動session機制,除了apache本身做一定的設定之外,在使用session的php頁面中,要先調用session_start()方法,表示在本頁面使用session。在session中儲存資料的具體方式如下: 複製代碼 代碼如下: <?php session_start(); $username="admin"; session_register("username"); ?> [code] 那麼在其它的頁面,想取得session中的使用者名稱,如下: [code] <?php $username=$_SESSION["username"]; ?> 同理,要判斷當前訪問的使用者是否已經登入也可以通過上面的方式進行:當使用者登入之後,在session之中註冊使用者名稱,在需要session控制的php頁面中加入判斷,例如: 複製代碼 代碼如下: if(!session_is_registered("username")){ header("Location:login.php"); } 上面是通過判斷session中是否註冊了username變數來實現的。 17,PHP中如何定義類及其成員屬性與操作,又如何調用? 直接舉一個例子,應該可以說明上面的問題: 定義一個字串處理工具類:StringUtils 複製代碼 代碼如下: <?php class StringUtils{ function StringUtils(){ } function getLength($str){ return strlen($str); } } ?> 在php頁面中調用方式為: 複製代碼 代碼如下: <?php include 'classes/com/xxx/StringUtils.php'; $length=StringUtils::getLength("abcde"); //或者 $instance=new StringUtils; $length=$instance->getLength("abcde"); ?> 對於一個類的方法,一般有兩種調用方式,一種是當作靜態方法進行調用,通過::串連符,一種是當作執行個體方法進行調用,通過->串連符。雖然調用可以使用兩種方式調用,但是實際中一個類的方法是否為靜態方法,往往是已經邏輯上定義好的,因此每一個方法,往往只使用某種方式調用,例如一個服務類中的方法,基本上應該都是執行個體方法,而一個工具類中的方法,基本上都是類方法或者說靜態方法,例如: 複製代碼 代碼如下: <?php class UserService{ var $dbhost = ""; var $dbuser = ""; var $dbpw = ""; var $dbname = ""; function UserService(){ } function login($username,$password){ $link = mysql_connect($this->dbhost, $this->dbuser, $this->dbpw) or die("Could not connect: ".mysql_error()); mysql_select_db($this->dbname); $rs=mysql_query("select count(*) as value from cieqas_users where userid='".$username."' and password='".$password."'"); $row=mysql_fetch_object($rs); $value=$row->value; mysql_close($link); settype($value,"integer"); if($value<=0){ return false; } return true; } ?> 另外,在執行個體方法中調用$this,才有實際的意義。 18,如何設定一個變數的類型? PHP可以算作是弱類型語言的一種,不需要對變數進行強制類型定義,例如: $username="admin"; $length=0; $obj=new MyClass; 許多時候,需要將一個字串變數轉換為int變數,或者反過來等等,該如何操作呢?其實可以使用settype方法,該方法可以指定變數的類型,簽名如下: settype(var,type) 其中類型的值有boolean(bool)、integer(int)、float、string、array、object、null 例如: $state="0"; settype($state,"int"); if($state==0){ ... } 19,如何將一個數組進行反向排列? 通過array_reverse方法實現,例如: 複製代碼 代碼如下: $arr=array(); $arr[0]=1; $arr[1]=2; $arr2=array_reverse($arr); 20,在PHP中如何將一個時間正確的進行顯示? 在php中通過time()方法返回自從 Unix 新紀元(格林威治時間 1970 年 1 月 1 日 00:00:00)到目前時間的秒數,那麼如何將該時間正確的顯示為本地正確時間,許多時候我們都使用php中的setLocale方法,指定當前的地區,但是我們往往得不到正確的時間,給大家介紹一個其它的解決方式,就是通過Javascript與php結合去解決,例如: 複製代碼 代碼如下: var time="<?php echo time() ?>"; var time=parseInt(time); var date=new Date(time*1000); var pattern="yyyy-MM-dd hh:mm:ss"; var df=new SimpleDateFormat(); var str=df.format(date); document.write(str); 因此,可以將php中time()的值傳遞給Javascript,並做為Date對象的參數,然後通過Javascript開源類庫JsJava的處理,即可。 21,PHP在當今是非常流行的一門語言,到目前為止已經形成了大量的函數庫,例如處理字串的、數學的、XML的、檔案的、SOAP的、網路的等等,不過其在物件導向方面,還有一定程度的欠缺,然而也並不是說非要物件導向才能算是一門如何如何的語言,然而在實際的網站或者項目開發中,僅僅是大量的函數庫有些時候感覺不是特殊的方便,尤其是有些時候,業務需要我們抽象出架構層次以及各個對象,這個時候定義一套合適的業務類庫就比較合適了,畢竟當我們面對更高業務層面的開發時,我們需要封裝的層次更高,那麼這個時候類和對象就提上議程了,不過目前使用php的各個函數,感覺也是非常方便的,而且非常強大,這又讓我多少有些埋怨類似Java這樣的物件導向的語言,做什麼邏輯都要藉助一大堆類來實現,看來語言之間是需要互相學習的,而不是互相攻擊,解決問題促進行業和社會的發展才是最根本的。 |