2009-04-29

[PHP] 透過靜態成員函數建立物件

PHP5 對物件建立的架構還不是很完善
有些物件的操作方式是不允許的
  • 在新增物件時不能直接呼叫成員函數
  • 要透過函數才能建立匿名函數


<?php
class DataCheck {
// 成員變數
public $value=null;

// 建構子
public function __construct($value) {
$this->value=$value;
return $this;
}

// 成員函數
public function getValue() {
return $this->value;
}
}


// PHP 物件的使用方式
$a = new DataCheck("test");
$v = $a->getValue();


// 一般物件的使用方式
$v = new DataCheck("test")->getValue(); //Error
/* 但這樣做在 PHP5 中是不可行
* PHP5 對物件的架構還不是很完善
* 為了達到這樣的使用方式
* 建議使用物件中的靜態成員函數去達成
* 會比在 new 外加一個 () 要好多了
* 也可以在生成物件前做一些前置處理
* */


/**######################################################*/
class DataCheck {
// 靜態函數建立物件
public static function Value($value) {
return (new DataCheck($value));
}

// 成員變數
public $value=null;

// 建構子
public function __construct($value) {
$this->value=$value;
return $this;
}

// 成員函數
public function getValue() {
return $this->value;
}
}


// 利用靜態函數建立物件
$v = DataCheck::Value("test")->getValue();
/* 這樣就可以達成我們期望的方式
* 但最好還是希望 PHP 能夠對物件有更好的架構出現
* */

0 回應: