如何使用PHP的__get()和__set()在我的类定义的字段?
-
19-09-2019 - |
题
我已经有 PHP规格的很好看的超载和大多数示例似乎旨在简单地允许自定义字段(类似于stdClass的)的定义。
但是,我们在我的类中定义的私有字段?应当如何进行这些检索/分配?我可以做可能值的开关和作用于一定值:
class A
{
private $name;
private $age;
public function __get( $var )
{
switch ( $var )
{
case 'name':
return $this->name;
break;
case 'age':
return $this->age+10; // just to do something different ;)
break;
default:
break;
}
}
}
这是最好的方法,或者有另一种普遍接受的最佳做法? (我不知道这是否是可能的环型变量的类里面,但无论是因为你不希望返回的一切不是在大多数情况下是合适的)
解决方案
这将有效地让他们公开,而且通常这获得你什么了简单地使用公共属性(但你付出的性能损失,并有写更多的代码,风险错误)。
使用,只有当你有现有的使用公共属性代码,你突然需要的getter / setter它(像age
你的例子)。
如果您需要时读出/写入属性执行一些代码(例如,使它只读或懒惰地从数据库获取),那么就应该使用正常getter / setter方法(getAge()
/ setAge()
)。
其他提示
我广泛使用__get()
和__set()
的,我有我的财产申报public
。我想两全其美的,所以当我输入一个类实例的名称我的IDE可以列出我的公共属性。我怎么会PHP的拦截工作方法,即使属性是公开的,可见的外部类?
未设置()属性我要被用于在类__get()
__set()
和__construct()
搞清楚这种方法进行了挫折的一对夫妇的夜晚: - 。)
我不认为使用它们很多人,但在这里就是我的想法。
有关检索私有变量,你可能想给定义的变量是能够通过外部访问的列表。然后,请检查所请求的变量是数组英寸如果是,允许它改变/得到。如果没有,或者错误或返回null。
诚实,这样做的实现是真的情况下,逐案。如果你有你存储所有的信息在一个阵列用户类,你可以有$用户>名字从$用户拉到>帐户[“名”],或者类似的东西。
此外,更逐情况下,你可以给他们的价值观,像哈希密码,然后做一些修改。