是否可以覆盖我已经设置的参数的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");
这样的单独方法
这可能吗?
答案 0 :(得分:3)
实施__set
方法。尝试访问不可访问的属性时会调用此方法。
function __set($name, $value) {
$this->custom_set($name, $value);
}
但请注意,$username
是公共属性,因此除非声明为private
或protected
,否则无法使用。
答案 1 :(得分:2)
制作这些属性protected
或private
然后__get
和__set
将被调用,您可以委托任何您想要的逻辑。
就个人而言,我还没有看到一个案例,我会考虑使用public
属性做任何事情。
答案 2 :(得分:0)
您在谈论Magic Methods吗?