PHP覆盖get set方法

时间:2010-12-03 00:56:46

标签: php

是否可以覆盖我已经设置的参数的get和set方法?所以每次我设置一个参数我都可以使用它/验证它吗?

class User {

   public $username;

   function custom_set($name, $value) {
      if(strlen($value) < 5) {
        return "not long enough";
      } else {
        $this->$name = $value;
      }

   }  
}

$u = new User();
$u->username = "ted";
echo $u->username;

输出:“不够长”

这是一个非常简单的例子,我刚刚写出来并且可能包含错误,它只是为了表达我想要做的事情。

基本上每当我拨打$u->username = "anything";时,我都希望调用custom_set方法。

我不想在构造函数中进行验证,我不想创建像$u->setVal("ted");这样的单独方法

这可能吗?

3 个答案:

答案 0 :(得分:3)

实施__set方法。尝试访问不可访问的属性时会调用此方法。

function __set($name, $value) {
    $this->custom_set($name, $value);
}

但请注意,$username是公共属性,因此除非声明为privateprotected,否则无法使用。

答案 1 :(得分:2)

制作这些属性protectedprivate然后__get__set将被调用,您可以委托任何您想要的逻辑。

就个人而言,我还没有看到一个案例,我会考虑使用public属性做任何事情。

答案 2 :(得分:0)

您在谈论Magic Methods吗?