2009-04-29 03:30

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

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

  1. <?php 
  2. class DataCheck { 
  3.    // 成員變數 
  4.    public $value=null; 
  5.  
  6.    // 建構子 
  7.    public function __construct($value) { 
  8.        $this->value=$value; 
  9.        return $this; 
  10.    } 
  11.  
  12.    // 成員函數 
  13.    public function getValue() { 
  14.        return $this->value; 
  15.    }     
  16. } 
  17.  
  18.  
  19. // PHP 物件的使用方式 
  20. $a = new DataCheck("test");  
  21. $v = $a->getValue(); 
  22.  
  23.  
  24. // 一般物件的使用方式 
  25. $v = new DataCheck("test")->getValue(); //Error 
  26. /* 但這樣做在 PHP5 中是不可行 
  27. * PHP5 對物件的架構還不是很完善 
  28. * 為了達到這樣的使用方式 
  29. * 建議使用物件中的靜態成員函數去達成 
  30. * 會比在 new 外加一個 () 要好多了 
  31. * 也可以在生成物件前做一些前置處理 
  32. * */ 
  33.  
  34.  
  35. /**######################################################*/ 
  36. class DataCheck { 
  37.    // 靜態函數建立物件 
  38.    public static function Value($value) { 
  39.        return (new DataCheck($value)); 
  40.    } 
  41.  
  42.    // 成員變數 
  43.    public $value=null; 
  44.  
  45.    // 建構子 
  46.    public function __construct($value) { 
  47.        $this->value=$value; 
  48.        return $this; 
  49.    } 
  50.  
  51.    // 成員函數 
  52.    public function getValue() { 
  53.        return $this->value; 
  54.    }     
  55. } 
  56.  
  57.  
  58. // 利用靜態函數建立物件 
  59. $v = DataCheck::Value("test")->getValue(); 
  60. /* 這樣就可以達成我們期望的方式 
  61. * 但最好還是希望 PHP 能夠對物件有更好的架構出現 
  62. * */ 

0 回應: