2010年11月11日

PHP 的類別, 繼承, 抽象類別, 介面

我對PHP CLASS的認識, 記錄一下.

//public 可隨意存取
//private 僅對本身內部開放, 不能繼承
//protected 僅對本身內部開放, 可以繼承

//類別
class myclass
{
public $var1='1';
private $var2='2';
protected $var3='3';

//建構函式
//物件建立時會行此函數如有參數,建立物件時需給參數....new myclass($v1,$v2)
function __construct()
{
//物件產生時要執行的程式碼
//如:設定初始值、預設值、連接資料庫.
// $this->var1 = $v1;
//$this->var2 = $v2;
echo "物件產生";
}

//解構函式
//物件消失前會執行此函數
function __destruct()
{
//物件銷毀前要執行的動作
//如:關閉資料庫.
echo "物件消失";
}
//clone函數:物件被複製時會執行此函數
function __clone()
{
//
}
//類別的方法
public function myfun( $par1, $par2 )
{
$this->var1+$this->var2+$this->var3;
return $par1+$par2;
}
public function a()
{
echo "aa";
$this->var1='222aa';
}
}
//物件複製
$cloneobj = clone $obj;

//繼承
class extclass1 extends myclass//可以為空
{}
class extclass2 extends myclass
{
public function a()
{
parent::a(); //呼叫父類別被覆蓋的方法.
echo $this->var1;
}
public $other_var1; //新增父類別沒有的變數
function other_fun () //新增父類別沒有的方法
{
//
}
function myfun() //改寫父類別已有的方法
{
//
}

}

//抽象類別,抽象方法
abstract class abstract_class_name //**只要裡面有抽象的方法,這個類別就要宣告成抽象類別(abstract class)
{
public $a;

//抽象方法
abstract function abstract_function1();//無{}內的內容,直接加分號
abstract function abstract_function2();//無{}內的內容,直接加分號

//一般的方法
function myfunction()
{
//
}
}
//繼承抽象的類別
class myclass extends abstract_class_name
{
public function abstract_function1() //必需重寫抽象方法
{
//
}
public function abstract_function2() //必需重寫抽象方法
{
//
}
}
//介面
interface interface_name
{
//介面中不可以宣告屬性(public $var;)
public function interface_function1();//介面中所有成員都必需是public
public function interface_function2();//介面中所有成員都必需是public
}
//實現介面
//class 類別名 implements 介面名
class myclass implements interface_name
{
public $any_var;
public function interface_function1()
{}
public function interface_function2()
{}
}

沒有留言:

張貼留言