在class中使用public variable及__getter,__setter與getVariable,setVariable的差異

class Test1{
   public $name;
   public $id;
}
class Test2{
   private $name;
   private $id;

    function __set($property_name, $value) { 
        $this->$property_name = $value; 
    }
    function __get($property_name) {  
        return isset($this->$property_name) ? $this->$property_name : null;
    }
}
class Test3{
   private $name;
   private $id;

   public setName($_name){
      $this->name=$_name;
   }
   public setId($_id){
      $this->id=$_id;
   }
   public getName(){
      return $this->name
   }
   public getId(){
      return $this->id
   }
}

請教各位,就保護資料正確性而言,Test3可以針對各屬性的setter做輸入值的過瀘判斷,應該較符合getter,setter object的原義,但就我在網路上找到類似物件的寫法大都是Test1,Test2的寫法。這樣還有getter,setter object的意義嗎?

再者,若是使用Test2的寫法,跟Test1又有何差異呢?除非有所有屬性都要做統一判斷,這樣就可以寫在__set,如所有屬性不得為空值:
class Test4{
   private $name;
   private $id;

    function __set($property_name, $value) { 
        if($value!=null){$this->$property_name = $value; }
    }
    function __get($property_name) {  
        return isset($this->$property_name) ? $this->$property_name : null;
    }
}

但在實務上似乎很少有這種情形發生,如此一來,為何大家不乾脆直接使用Class1的寫法就好呢?

不好意思,可能是我這PHP新手才會有這種疑問
標籤:
Sign In or Register to comment.