Php Magic Method __get __set - 如何在特定字段上设置边界而不是其他字段
Php Magic Method __get __set - how to set boundaries on specific fields but not others
我有 class 个完全私有的变量;只有某些变量需要在输入时进行一些数据验证。
现在我有:
public class Example
{
//**** Variables / Properties ****/
private $one;
private $two;
private $three;
//**** getter **** //
public function __get( $property )
{
if(property_exists($this,$property) {
return $this->$property;
}
}
// **** setter **** //
public function __set($property, $value)
{
if(property_exists($this,$property)) {
$this->$property = $value;
}
}
}
如果我想对 $two 进行数据验证,但只有 return $one 和 $three 没有任何数据验证怎么办?
我问这个是因为我的 class 有比这更多的变量,我讨厌为 class 的每个 属性 编写单独的 set 和 get 方法,因为只有其中一些需要特定的行为。
我在@JohnConde 的帮助下弄明白了。
首先在数组中声明哪些字段需要校验
private $dateArr = array("two");
然后
public function __set($property,$value) {
if(property_exists($this,$property)) {
foreach($dateArr as $dateProperty) {
if($property == $dateProperty) {
cleanDate($property,$value);
return;
}
}
return $this->$property;
}
}
这样做是委托特定字段进行验证,但 returns 其他字段照原样。
这很有用,因为我不必手动编写 getter 和 setter。
我有 class 个完全私有的变量;只有某些变量需要在输入时进行一些数据验证。
现在我有:
public class Example
{
//**** Variables / Properties ****/
private $one;
private $two;
private $three;
//**** getter **** //
public function __get( $property )
{
if(property_exists($this,$property) {
return $this->$property;
}
}
// **** setter **** //
public function __set($property, $value)
{
if(property_exists($this,$property)) {
$this->$property = $value;
}
}
}
如果我想对 $two 进行数据验证,但只有 return $one 和 $three 没有任何数据验证怎么办?
我问这个是因为我的 class 有比这更多的变量,我讨厌为 class 的每个 属性 编写单独的 set 和 get 方法,因为只有其中一些需要特定的行为。
我在@JohnConde 的帮助下弄明白了。
首先在数组中声明哪些字段需要校验
private $dateArr = array("two");
然后
public function __set($property,$value) {
if(property_exists($this,$property)) {
foreach($dateArr as $dateProperty) {
if($property == $dateProperty) {
cleanDate($property,$value);
return;
}
}
return $this->$property;
}
}
这样做是委托特定字段进行验证,但 returns 其他字段照原样。
这很有用,因为我不必手动编写 getter 和 setter。