PHP重写获取集方法
是否可以覆盖我已经设置的参数的get和set方法?所以每次我设置一个参数,我都有权使用它/验证它PHP重写获取集方法,php,Php,是否可以覆盖我已经设置的参数的get和set方法?所以每次我设置一个参数,我都有权使用它/验证它 class User { public $username; function custom_set($name, $value) { if(strlen($value) < 5) { return "not long enough"; } else { $this->$name = $value; }
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;
类用户{
公共$username;
函数自定义设置($name,$value){
如果(strlen($value)<5){
返回“不够长”;
}否则{
$this->$name=$value;
}
}
}
$u=新用户();
$u->username=“ted”;
echo$u->username;
输出:“不够长”
这是一个非常简单的例子,我刚刚写了出来,可能包含错误,这只是为了传达我想做的
基本上每次我调用$u->username=“任何东西”
我希望调用custom\u set
方法
我不想在构造函数中进行验证,也不想创建单独的方法,比如$u->setVal(“ted”)代码>
这可能吗?你在说什么?你在说什么?实施该方法。当试图访问不可访问的属性时,将调用此函数
function __set($name, $value) {
$this->custom_set($name, $value);
}
但是,请注意,$username
是一个公共属性,因此除非声明为private
或protected
以实现该方法,否则该属性将不起作用。当试图访问不可访问的属性时,将调用此函数
function __set($name, $value) {
$this->custom_set($name, $value);
}
但是,请注意,$username
是一个公共属性,因此除非声明它为private
或protected
将这些属性设置为protected
或private
,否则此属性将不起作用,然后将调用\u get
和\u set
,并且您可以委托给任何您想要的逻辑
个人,我还没有看到一个案例,我会考虑使用<代码>公共>代码>属性。
< p>使那些属性<代码>保护或<代码>私有< /代码>,然后<代码>
个人,我还没有看到一个案例,我会考虑使用<代码>公共< /COD>属性来做任何事情。
为什么不使用一个简单的数组来存储参数,而不是真正使用真正的对象属性呢?这样,您的\u集
和\u获取
魔术方法将始终被调用,为什么不使用简单数组存储参数,也不真正使用真实对象属性?这样,您的\u集
和\u获取
魔术方法将始终被调用为no,因为这些方法只会为未定义的属性调用:“当您尝试检索未定义属性的数据时,会自动调用此方法”。我说的是我在上面的例子中已经定义的属性,比如$username
。不,因为这些属性只会被未定义的属性调用:“当您尝试检索未定义属性的数据时,会自动调用此方法”。我说的是我已经定义的属性,比如上面示例中的$username
。欢迎来到正确编码的世界。DTO/VO是一种正确的用法,但我很少在PHP中使用这些模式,除非您想计算内部类,如StdClass
、SoapVar
和SoapParam
。我想说这是可悲的(关于稀有性)。人们应停止将数据存储与数据操作混为一谈,并应将这些内容分为不同的对象。即使VO成员不是公共的,他们也只能在施工任务中被保护/私有,否则它就不是一成不变的,据我所知,这是VO模式的关键要求。就DTO而言,这是一组完全不同的“如何/何时使用”问题,当然不符合SOC WRTG存储/操作的笼统陈述。此外,就分离这些内容而言,域对象直接提供给存储层用于持久化的数组与使用DO IMO一样有效(至少在狂野的西方世界的PHP…YMMV在其他语言中)欢迎来到正确的编码世界。DTO/VO是一个正确的用法,但我很少看到在PHP中使用这些模式,除非你想计算像StdClass
、SoapVar
和SoapParam
这样的内部类。我想说这是可悲的(关于稀有性)。人们应停止将数据存储与数据操作混为一谈,并应将这些内容分为不同的对象。即使VO成员不是公共的,他们也只能在施工任务中受到保护/私有,否则这将不是一成不变的,据我所知,这是VO patt的关键要求ern.就DTO而言,这是一组完全不同的如何/何时使用的问题,当然不能符合SOC WRTG存储/操作的笼统陈述。此外,就分离这些内容而言,域对象直接提供给存储层用于持久化的数组与使用DO IMO一样有效(至少在狂野的西方世界的PHP…YMMV在其他语言)。也许有更多的经验,我会改变我的想法,但还没有。