0

如果我得到一个看起来像这样的课程:

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;
    }
}

所以我该怎么做?首先,我仍然想得到那个提示列表,并且只能列出公共属性。和想法?

4

1 回答 1

0

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

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

如果您删除公共字段(或将它们设为私有以使其不可见),那么您的 __get 将被执行,但您不会收到任何自动完成建议,因为没有可见字段。这样你的代码就可以工作,但是你编写代码会更难,因为你没有得到自动完成的建议。

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

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

于 2013-06-07T07:08:08.687 回答