1. 數組
php的數組其實是一個關聯數組,或者說是哈希表,php不需要預先聲明數組的大小,可以用直接賦值的方式來創建數組,例如:
- //最傳統,用數字做鍵,賦值
- $state[0]="beijing";
- $state[1]="hebei";
- $state[2]="tianjin";
- //如果鍵是遞增的數字,則可以省略
- $city[]="shanghai";
- $city[]="tianjin";
- $city[]="guangzhou";
- //用字符串做鍵
- $capital["china"]="beijing";
- $capital["japan"]="tokyo";
用array()來創建數組會更加方便一點,可以將數組元素作為array的參數傳遞給他,也可以用=>運算符創建關聯數組,例如:
- $p=array(1,3,5,7);
- $capital=array(“china”=>”beijing”, “japan=>”tokyo”);
array其實是一種語法結構,而不是函數,和array類似,還有一個list(),它可以用來提取數組中的值,并給多個變量賦值,例如:
- list($s,$t)=$city;
- echo $s,' ',$t;
輸出結果:shanghai tianjin
注意,list方法只能用于由數字索引的數組.
php內建了一些常用的數組處理函數,具體可以參考手冊,常用的函數舉例如下,count或者sizeof可以得到數組的長度,array_merge 可以合并兩個,或者多個數組,array_push(pop)可以像堆棧一樣使用數組.
- <?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)
- //開源代碼Vevb.com
- echo $elem.’<br/>’;
- ?>
- //輸出結果為:
- //3
- //shanghai
- //tianjin
- //guangzhou
- //beijing
- //tokyo
- //paris
2. 類和對象
php5開始對面向對象編程有了很好的支持,php中的類的概念和其他面向對象的語言比如c#是十分相似的,它也是一個值和方法的聚合體,使用class關鍵字定義,例如:
- <?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";
- ?>
上面是一個雖然沒有什么用但是語法結構上較為完整的類,首先使用class關鍵字定義類的名字,內部可以定義字段和方法,字段和方法的修飾詞可以是private,protected,public 和 final,僅方法有,其含義和其它語言一致,不再贅述,不同的地方在于,php不支持函數的重載,另外,php5的構造函數的定義是__construct,注意前綴是兩個下劃線。php4的構造函數的定義和其它語言一致,是和類名一樣的函數,php5也兼容這種寫法。php5還支持析構函數,名字是__destruct,在函數內部,可以使用$this變量來獲得當前對象的引用,php也支持靜態函數,同樣是使用static關鍵字修飾,示例中最后一個函數就靜態函數,靜態函數不能通過類的實例引用.
類的定義下面是使用類的代碼示例,php也是通過new關鍵字來實例化一個類,通過->運算符來引用對象的方法,注意其靜態類的引用方法是::,這是和c++一致的.
下面再簡單介紹下類的繼承,php中使用extends關鍵字來實現類的繼承,這是和java一致的,實例代碼如下:
- <?php
- class baseclass {
- function __construct() {
- print "in baseclass constructorn";
- }
- }
- class subclass extends baseclass {
- function __construct() {
- parent::__construct();
- print "in subclass constructorn";
- }
- }
- $obj = new baseclass();
- $obj = new subclass();
- ?>
- //輸出的結果是: in baseclass constructor in baseclass constructor in subclass constructor
要注意,php的子類的構造函數不會自動調用父類的構造函數,必須在程序中顯式地調用,使用parent關鍵字可以得到父類的引用,另外,由于php本身是弱類型的,所以“多態“的概念也不存在了,實際上,它永遠都是多態的.
接口:接口定義了一組方法,但不實現他們,其語法為:
- interface iinterfacename
- {
- //常量、函數定義
- }
類利用implements關鍵字來表面實現某個接口,這和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);
- ?>
新聞熱點
疑難解答