程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP初學者常見問題集合 修正版(21問答)

PHP初學者常見問題集合 修正版(21問答)

編輯:關於PHP編程

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 = "../../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這樣的面向對象的語言,做什麼邏輯都要借助一大堆類來實現,看來語言之間是需要互相學習的,而不是互相攻擊,解決問題促進行業和社會的發展才是最根本的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved