我已经有 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。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top