在设置对象的公共属性之前如何做某事?

时间:2013-06-07 06:33:57

标签: php class oop

如果我上课的话看起来像这样:

class a {
    public $aa;
    public $ab;
}
$t = new a();

现在, 如果我输入$t->,我会在zend Studio下找到一个提示列表,但现在我需要做这样的事情:

class a {
    public $aa;
    public $ab;
    public function __get( $name ){
        $this->$name = x;
        return $this->$name;
    }
}

所以,我该怎么办?首先,我仍然希望获得该提示列表,并且只能列出公共属性。对此有何看法?

1 个答案:

答案 0 :(得分:0)

在我看来,你在这里遇到两个相互关联的问题。

如果向类中添加公共字段,则可以在自动完成建议中看到它们,并且编写代码更容易,但如果这样做,则不会执行__get,因为这是一个可见属性,而__get是只调用不可见的属性。

如果删除公共字段(或将其设为私有字段以使其不可见),则会执行__get,但由于没有可见字段,因此您无法获得任何自动填充建议。这样你的代码就可以运行,但是由于没有自动完成建议,你很难编写代码。

所以我对你的建议是完全忘记__get功能。假装它不存在(因为它不会做你想做的事情)。使用成员函数而不是公共属性,您将获得自动完成建议以及您执行的代码。是的,你必须以这种方式实施更多的方法,但这就是生活,你不能总是拥有你想要的一切,你必须妥协。

您可以使用Java书中的内容并定义getter和setter的方法(因此function getName()function setName($value)或者如果您愿意,可以使用function name($value = null)并设置或者取决于传入的值)或者你可以在构造函数中分配这些值,如果你不关心懒惰部分,你唯一要做的就是分配值。