如何使用PHP的__get()和__set()在我的类定义的字段?(How do I use PHP

2019-09-20 19:24发布

我已经有一个良好的阅读超载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;
        }
    }
}

这是最好的方法,还是有另一个普遍接受的最佳做法? (我不知道这是否是可能的环型变量的类里面,但无论是因为你不希望返回的一切不是在大多数情况下是合适的)

Answer 1:

这将有效地让他们公开,而且通常这获得你什么了简单地使用公共属性(但你付出的性能损失,并有写更多的代码,风险漏洞)。

使用仅是在现有的使用公共属性代码,你突然需要它的getter / setter(如你的榜样age )。

如果您需要执行时读/写性能的一些代码(例如使它只读或懒洋洋地从数据库中提取),那么你应该使用正常的getter / setter方法( getAge() / setAge()



Answer 2:

我广泛使用的__get()__set()我有我的财产申报public 。 我想两全其美的,所以当我输入一个类实例的名称我的IDE可以列出我的公共属性。 我怎么会PHP的拦截工作方法,即使属性是公开的,可见的外部类?

未设置()属性__get()__set()中的类将被用于__construct()

搞清楚这个方法出了无奈的一对夫妇晚上:-)



Answer 3:

我没有看到很多人使用它们,但这里是我的想法。

对于检索私有变量,你可能想给定义的变量是能够通过外部访问的列表。 然后,请检查所请求的变量是数组英寸 如果是,允许它改变/得到。 如果没有,要么错误或返回null。

老实说,这种情况的实现是真的情况下,逐案。 如果你有你存储所有的信息在一个阵列用户类,你可以有$用户>名字从$用户拉到>帐户[“名”],或者类似的东西。

此外,更逐情况下,你可以给他们的价值观,像哈希密码,然后做一些修改。



文章来源: How do I use PHP's __get() and __set() for defined fields in my class?