標籤:
用_ _set()方法設定屬性
boolean __set([string property_name] , [mixed value_to_assign])
自己寫了個容易理解的
<?phpclass Employee{ var $name; function __set($propName, $propValue) { echo ‘$name =‘ . $this->name . ‘<br/>‘; echo ‘$propName = ‘ . $propName . ‘<br/>‘; echo ‘$propValue = ‘ . $propValue . "<br/>"; $this->$propName = $propValue; } }$employee = new Employee();$employee->name = "Mario";$employee->title = "Exective chef";echo $employee->title;//輸出// $name =Mario// $propName = title// $propValue = Exective chef
__set()方法是預設的,我測試了一下,我不寫__set()方法,也可以實現
$employee->sex = ‘M‘;
echo $employee->sex;
__set()的方法可以限制一些屬性的設定,比如:
<?phpclass Employee{ var $name; function __set($propName, $propValue) { if ($propName == ‘age‘) { if ($propValue < 18 || $propValue > 60) { $this->$propName = null; } else { $this->$propName = $propValue; } } else { $this->$propName = $propValue; } }}$employee = new Employee();$employee->name = "Mario";$employee->age = "17";$employee->page = 1;echo ‘name = ‘ . $employee->name . ‘<br/>‘;echo ‘age = ‘ . $employee->age . ‘<br/>‘;echo ‘page = ‘ . $employee->page;//輸出 僱員的年齡小於18或大於60的時候age=null// name = Mario// age =// page = 1
用 _ _get()方法擷取屬性
boolean __get([string property_name])
測試
結論:
當屬性存在的時候,__set()和__get()是不僅過的。測試例子如下->
<?phpclass Employee{ public $name; public $city; protected $wage; function __set($propName, $propValue) { echo "__set called!<br/>";$this->$propName = $propValue; } function __get($propName) { echo "__get called!<br/>"; $vars = array( "name", "city" ); if (in_array($propName, $vars)) { return $this->$porpName; } else { return "No such variable!"; } } }$employee = new Employee();$employee->name = "Mario";$employee->city = "shan";echo $employee->name . "<br/>";echo $employee->city . "<br/>";// 輸出// Mario// shan
在下面加入下的代碼->
$employee->age = 20;echo $employee->age . "<br/>";// 輸出// __set called!// 20echo $employee->sex . "<br/>";//輸出// __get called!// No such variable!
如果在$vars數組中加入sex的話,程式報錯!
看下來感覺沒什麼亮點,用不起來。
《PHP與MySQL程式設計》第六章