如何在我的类中使用PHP的__get()和__set()来定义字段?

Dis*_*oat 3 php getter setter overloading

我已经很好地阅读了关于重载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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是最好的方法,还是有另一种普遍接受的最佳做法?(我不知道是否可以在类中循环类变量,但是在大多数情况下这是不合适的,因为你不想返回所有内容.)

gra*_*rks 9

我广泛使用__get()__set()AND我声明了我的属性public.我想要两全其美,所以当我输入类实例的名称时,我的IDE可以为我列出公共属性.我是如何让PHP拦截器方法工作的,即使属性是公共的并且在类外可见?

unset()我想要的属性__get()以及__set()在类中使用的属性__construct().

弄清楚这种方法需要几个晚上的挫折:-)