2013年3月13日 星期三

PHP的物件模式


在這裡介紹一下一些PHP物件的模式:


__construct 建構子:會在物件宣告時執行,如果需要代入參數,在宣告時必須一併帶入。
__destruct 解構子:在物件被釋放的時候會執行。

__clone 複製整個物件


class point
{
var $x;
var $y;

function __construct($var1=0, $var2=0)
{
$this->x = $var1;
$this->y = $var2;
}

function show_center()
{
echo "<BR>The center is: ".$this->x."|".$this->y;
}

}

$a = new point(2,3);
$b = $a->_clone();  //複製物件, b 的中心點一樣會是 2,3

物件保護模式

public (公有模式):任何人都可以使用
private(私有模式):只有物件內自己可以使用
protected (保護模式):只有物件以及子物件可以使用



__call() 使用方法:
當__call函式存在時,如果不存在的物件函式被呼叫,就會觸發__call(),這樣可以防止錯誤的呼叫。


class point
{
var $x;
var $y;

function __construct($var1=0, $var2=0)
{
$this->x = $var1;
$this->y = $var2;
}

function show_center()
{
echo "<BR>The center is: ".$this->x."|".$this->y;
}


function __call($name, $arg)
{
echo "<BR>".$name." does not exist! ";
}

}


$point1 = new point;
$point1->test1();

就會出現 test1 does not exist!的訊息


_set 以及 _get 的用法
這兩個方法可以用來預防錯誤的參數存取,如果再上面的類別加上下面這兩個函式。



function __set($name, $val){
echo "I'm sorry, but ".$name." is not exist, you can't set it to ".$val;
}

function __get($name){
echo "I'm sorry, but ".$name." is not exist";
}

當嘗試錯誤存取的時候就會顯示訊息:

$point1->xxx = 10;  會顯示 I'm sorry, but  xxx is not exist, you can't set it to 10
echo $point->yyy; 會顯示 I'm sorry, but yyy is not exist













沒有留言:

張貼留言