PHP學(xué)習(xí)筆記之二
更新時(shí)間:2011年01月17日 23:24:59 作者:
PHP學(xué)習(xí)筆記之二,開(kāi)始學(xué)習(xí)php的朋友可以看下。
1. 數(shù)組
PHP的數(shù)組其實(shí)是一個(gè)關(guān)聯(lián)數(shù)組,或者說(shuō)是哈希表。PHP不需要預(yù)先聲明數(shù)組的大小,可以用直接賦值的方式來(lái)創(chuàng)建數(shù)組。例如:
//最傳統(tǒng),用數(shù)字做鍵,賦值
$state[0]="Beijing";
$state[1]="Hebei";
$state[2]="Tianjin";
//如果鍵是遞增的數(shù)字,則可以省略
$city[]="Shanghai";
$city[]="Tianjin";
$city[]="Guangzhou";
//用字符串做鍵
$capital["China"]="Beijing";
$capital["Japan"]="Tokyo";
用array()來(lái)創(chuàng)建數(shù)組會(huì)更加方便一點(diǎn),可以將數(shù)組元素作為array的參數(shù)傳遞給他,也可以用=>運(yùn)算符創(chuàng)建關(guān)聯(lián)數(shù)組。例如:
$p=array(1,3,5,7);
$capital=array(“China”=>”Beijing”, “Japan=>”Tokyo”);
array其實(shí)是一種語(yǔ)法結(jié)構(gòu),而不是函數(shù)。和array類(lèi)似,還有一個(gè)list(),它可以用來(lái)提取數(shù)組中的值,并給多個(gè)變量賦值。例如:
list($s,$t)=$city;
echo $s,' ',$t;
輸出結(jié)果:Shanghai Tianjin
注意,list方法只能用于由數(shù)字索引的數(shù)組。
PHP內(nèi)建了一些常用的數(shù)組處理函數(shù),具體可以參考手冊(cè)。常用的函數(shù)舉例如下,count或者sizeof可以得到數(shù)組的長(zhǎng)度,array_merge 可以合并兩個(gè),或者多個(gè)數(shù)組,array_push(pop)可以像堆棧一樣使用數(shù)組。
<?php
$state[0]="Beijing";
$state[1]="Hebei";
$state[2]="Tianjin";
$city[]="Shanghai";
$city[]="Tianjin";
$city[]="Guangzhou";
$capital["China"]="Beijing";
$capital["Japan"]="Tokyo";
echo count($city),'<br/>';
array_push($capital,"Paris");
$newarray=array_merge($city,$capital);
foreach($newarray as $elem)
echo $elem.'<br/>';
?>
輸出結(jié)果為:
3
Shanghai
Tianjin
Guangzhou
Beijing
Tokyo
Paris
2. 類(lèi)和對(duì)象
PHP5開(kāi)始對(duì)面向?qū)ο缶幊逃辛撕芎玫闹С?。PHP中的類(lèi)的概念和其他面向?qū)ο蟮恼Z(yǔ)言比如C#是十分相似的,它也是一個(gè)值和方法的聚合體,使用class關(guān)鍵字定義。例如:
<?php
class AuthUser {
protected $userName;
protected $password;
public function __construct($userName,$password) {
$this->userName=$userName;
$this->password=$password;
}
public function GetUserName() {
return $userName;
}
public function ChangePassword($old,$new) {
if($this->password==$old) {
$this->password=$new;
return true;
}else
return false;
}
public function Login($password) {
return $this->password==$password;
}
public static function CreateUser($userName,$password) {
$user=new AuthUser($userName,$password);
return $user;
}
}
$user=AuthUser::CreateUser("Admin","123");
echo $user->GetUserName();
if($user->ChangePassword('abc', 'new'))
echo 'ChangePassword success';
else
echo 'Change Password fail';
$user->ChangePassword("123", "321");
if($user->Login("321"))
echo "Login";
else
echo "Login fail";
?>
上面是一個(gè)雖然沒(méi)有什么用但是語(yǔ)法結(jié)構(gòu)上較為完整的類(lèi)。首先使用class關(guān)鍵字定義類(lèi)的名字,內(nèi)部可以定義字段和方法。字段和方法的修飾詞可以是private,protected,public 和 final(僅方法有)。其含義和其它語(yǔ)言一致。不再贅述。不同的地方在于,PHP不支持函數(shù)的重載。另外,PHP5的構(gòu)造函數(shù)的定義是__construct,注意前綴是兩個(gè)下劃線。PHP4的構(gòu)造函數(shù)的定義和其它語(yǔ)言一致,是和類(lèi)名一樣的函數(shù),PHP5也兼容這種寫(xiě)法。PHP5還支持析構(gòu)函數(shù),名字是__destruct。在函數(shù)內(nèi)部,可以使用$this變量來(lái)獲得當(dāng)前對(duì)象的引用。 PHP也支持靜態(tài)函數(shù),同樣是使用static關(guān)鍵字修飾。示例中最后一個(gè)函數(shù)就靜態(tài)函數(shù)。靜態(tài)函數(shù)不能通過(guò)類(lèi)的實(shí)例引用。
類(lèi)的定義下面是使用類(lèi)的代碼示例,PHP也是通過(guò)new關(guān)鍵字來(lái)實(shí)例化一個(gè)類(lèi)。通過(guò)->運(yùn)算符來(lái)引用對(duì)象的方法。注意其靜態(tài)類(lèi)的引用方法是::,這是和C++一致的。
下面再簡(jiǎn)單介紹下類(lèi)的繼承。PHP中使用extends關(guān)鍵字來(lái)實(shí)現(xiàn)類(lèi)的繼承,這是和Java一致的:
<?php
class BaseClass {
function __construct() {
print "In BaseClass constructor\n";
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct();
print "In SubClass constructor\n";
}
}
$obj = new BaseClass();
$obj = new SubClass();
?>
輸出的結(jié)果是: In BaseClass constructor In BaseClass constructor In SubClass constructor
要注意,PHP的子類(lèi)的構(gòu)造函數(shù)不會(huì)自動(dòng)調(diào)用父類(lèi)的構(gòu)造函數(shù),必須在程序中顯式地調(diào)用。使用parent關(guān)鍵字可以得到父類(lèi)的引用。另外,由于PHP本身是弱類(lèi)型的,所以“多態(tài)“的概念也不存在了,實(shí)際上,它永遠(yuǎn)都是多態(tài)的。
接口
接口定義了一組方法,但不實(shí)現(xiàn)他們。其語(yǔ)法為:
interface IInterfaceName
{
//常量、函數(shù)定義
}類(lèi)利用implements關(guān)鍵字來(lái)表面實(shí)現(xiàn)某個(gè)接口,這和Java是一致的。
<?php
interface IAddable{
function Add($something);
}
class AddClass implements IAddable
{
private $data;
function AddClass($num){
$data=$num;
}
public function Add($something)
{
$data+=$something;
return $data;
}
}
$a=new AddClass (5);
echo $a instanceof IAddable;
echo $a->Add(10);
?>
其中 instanceof關(guān)鍵字是PHP5新增的,用來(lái)判斷一個(gè)對(duì)象是不是某個(gè)類(lèi)的實(shí)例,或者它的類(lèi)型是不撒實(shí)現(xiàn)了某個(gè)接口。
PHP的數(shù)組其實(shí)是一個(gè)關(guān)聯(lián)數(shù)組,或者說(shuō)是哈希表。PHP不需要預(yù)先聲明數(shù)組的大小,可以用直接賦值的方式來(lái)創(chuàng)建數(shù)組。例如:
//最傳統(tǒng),用數(shù)字做鍵,賦值
$state[0]="Beijing";
$state[1]="Hebei";
$state[2]="Tianjin";
//如果鍵是遞增的數(shù)字,則可以省略
$city[]="Shanghai";
$city[]="Tianjin";
$city[]="Guangzhou";
//用字符串做鍵
$capital["China"]="Beijing";
$capital["Japan"]="Tokyo";
用array()來(lái)創(chuàng)建數(shù)組會(huì)更加方便一點(diǎn),可以將數(shù)組元素作為array的參數(shù)傳遞給他,也可以用=>運(yùn)算符創(chuàng)建關(guān)聯(lián)數(shù)組。例如:
$p=array(1,3,5,7);
$capital=array(“China”=>”Beijing”, “Japan=>”Tokyo”);
array其實(shí)是一種語(yǔ)法結(jié)構(gòu),而不是函數(shù)。和array類(lèi)似,還有一個(gè)list(),它可以用來(lái)提取數(shù)組中的值,并給多個(gè)變量賦值。例如:
list($s,$t)=$city;
echo $s,' ',$t;
輸出結(jié)果:Shanghai Tianjin
注意,list方法只能用于由數(shù)字索引的數(shù)組。
PHP內(nèi)建了一些常用的數(shù)組處理函數(shù),具體可以參考手冊(cè)。常用的函數(shù)舉例如下,count或者sizeof可以得到數(shù)組的長(zhǎng)度,array_merge 可以合并兩個(gè),或者多個(gè)數(shù)組,array_push(pop)可以像堆棧一樣使用數(shù)組。
復(fù)制代碼 代碼如下:
<?php
$state[0]="Beijing";
$state[1]="Hebei";
$state[2]="Tianjin";
$city[]="Shanghai";
$city[]="Tianjin";
$city[]="Guangzhou";
$capital["China"]="Beijing";
$capital["Japan"]="Tokyo";
echo count($city),'<br/>';
array_push($capital,"Paris");
$newarray=array_merge($city,$capital);
foreach($newarray as $elem)
echo $elem.'<br/>';
?>
輸出結(jié)果為:
3
Shanghai
Tianjin
Guangzhou
Beijing
Tokyo
Paris
2. 類(lèi)和對(duì)象
PHP5開(kāi)始對(duì)面向?qū)ο缶幊逃辛撕芎玫闹С?。PHP中的類(lèi)的概念和其他面向?qū)ο蟮恼Z(yǔ)言比如C#是十分相似的,它也是一個(gè)值和方法的聚合體,使用class關(guān)鍵字定義。例如:
復(fù)制代碼 代碼如下:
<?php
class AuthUser {
protected $userName;
protected $password;
public function __construct($userName,$password) {
$this->userName=$userName;
$this->password=$password;
}
public function GetUserName() {
return $userName;
}
public function ChangePassword($old,$new) {
if($this->password==$old) {
$this->password=$new;
return true;
}else
return false;
}
public function Login($password) {
return $this->password==$password;
}
public static function CreateUser($userName,$password) {
$user=new AuthUser($userName,$password);
return $user;
}
}
$user=AuthUser::CreateUser("Admin","123");
echo $user->GetUserName();
if($user->ChangePassword('abc', 'new'))
echo 'ChangePassword success';
else
echo 'Change Password fail';
$user->ChangePassword("123", "321");
if($user->Login("321"))
echo "Login";
else
echo "Login fail";
?>
上面是一個(gè)雖然沒(méi)有什么用但是語(yǔ)法結(jié)構(gòu)上較為完整的類(lèi)。首先使用class關(guān)鍵字定義類(lèi)的名字,內(nèi)部可以定義字段和方法。字段和方法的修飾詞可以是private,protected,public 和 final(僅方法有)。其含義和其它語(yǔ)言一致。不再贅述。不同的地方在于,PHP不支持函數(shù)的重載。另外,PHP5的構(gòu)造函數(shù)的定義是__construct,注意前綴是兩個(gè)下劃線。PHP4的構(gòu)造函數(shù)的定義和其它語(yǔ)言一致,是和類(lèi)名一樣的函數(shù),PHP5也兼容這種寫(xiě)法。PHP5還支持析構(gòu)函數(shù),名字是__destruct。在函數(shù)內(nèi)部,可以使用$this變量來(lái)獲得當(dāng)前對(duì)象的引用。 PHP也支持靜態(tài)函數(shù),同樣是使用static關(guān)鍵字修飾。示例中最后一個(gè)函數(shù)就靜態(tài)函數(shù)。靜態(tài)函數(shù)不能通過(guò)類(lèi)的實(shí)例引用。
類(lèi)的定義下面是使用類(lèi)的代碼示例,PHP也是通過(guò)new關(guān)鍵字來(lái)實(shí)例化一個(gè)類(lèi)。通過(guò)->運(yùn)算符來(lái)引用對(duì)象的方法。注意其靜態(tài)類(lèi)的引用方法是::,這是和C++一致的。
下面再簡(jiǎn)單介紹下類(lèi)的繼承。PHP中使用extends關(guān)鍵字來(lái)實(shí)現(xiàn)類(lèi)的繼承,這是和Java一致的:
復(fù)制代碼 代碼如下:
<?php
class BaseClass {
function __construct() {
print "In BaseClass constructor\n";
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct();
print "In SubClass constructor\n";
}
}
$obj = new BaseClass();
$obj = new SubClass();
?>
輸出的結(jié)果是: In BaseClass constructor In BaseClass constructor In SubClass constructor
要注意,PHP的子類(lèi)的構(gòu)造函數(shù)不會(huì)自動(dòng)調(diào)用父類(lèi)的構(gòu)造函數(shù),必須在程序中顯式地調(diào)用。使用parent關(guān)鍵字可以得到父類(lèi)的引用。另外,由于PHP本身是弱類(lèi)型的,所以“多態(tài)“的概念也不存在了,實(shí)際上,它永遠(yuǎn)都是多態(tài)的。
接口
接口定義了一組方法,但不實(shí)現(xiàn)他們。其語(yǔ)法為:
interface IInterfaceName
{
//常量、函數(shù)定義
}類(lèi)利用implements關(guān)鍵字來(lái)表面實(shí)現(xiàn)某個(gè)接口,這和Java是一致的。
復(fù)制代碼 代碼如下:
<?php
interface IAddable{
function Add($something);
}
class AddClass implements IAddable
{
private $data;
function AddClass($num){
$data=$num;
}
public function Add($something)
{
$data+=$something;
return $data;
}
}
$a=new AddClass (5);
echo $a instanceof IAddable;
echo $a->Add(10);
?>
其中 instanceof關(guān)鍵字是PHP5新增的,用來(lái)判斷一個(gè)對(duì)象是不是某個(gè)類(lèi)的實(shí)例,或者它的類(lèi)型是不撒實(shí)現(xiàn)了某個(gè)接口。
相關(guān)文章
php接口數(shù)據(jù)加密、解密、驗(yàn)證簽名
這篇文章主要介紹了php接口數(shù)據(jù)加密、解密、驗(yàn)證簽名的相關(guān)資料,需要的朋友可以參考下2015-03-03php簡(jiǎn)單socket服務(wù)器客戶(hù)端代碼實(shí)例
這篇文章主要介紹了php簡(jiǎn)單socket服務(wù)器客戶(hù)端代碼實(shí)例,本文給出了兩個(gè)版本的服務(wù)器端口,對(duì)代碼的問(wèn)題和改進(jìn)做了說(shuō)明,并給出了使用這個(gè)socket服務(wù)器的客戶(hù)端代碼,需要的朋友可以參考下2015-05-05PHP GD庫(kù)相關(guān)圖像生成和處理函數(shù)小結(jié)
這篇文章主要介紹了PHP GD庫(kù)相關(guān)圖像生成和處理函數(shù),分類(lèi)總結(jié)并分析了php GD庫(kù)相關(guān)圖像處理函數(shù)的功能與用法,需要的朋友可以參考下2016-09-09php中XMLHttpRequest(Ajax)不能設(shè)置自定義的Referer的解決方法
php中XMLHttpRequest(Ajax)不能設(shè)置自定義的Referer的解決方法,需要的朋友可以參考下。2011-11-11phpmyadmin提示The mbstring extension is missing的解決方法
這篇文章主要介紹了phpmyadmin提示The mbstring extension is missing的解決方法,分析了錯(cuò)誤提示的原因與不同平臺(tái)的解決方法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12