1

我正在重新格式化我的类(见下文) - 我认为我犯了一个错误,即在我的类中设置具有相同可见性的所有内容,而属性实际上应该是私有的,而 getter/setter 在大多数情况下应该是公共的。

要获取一个属性,我只需 $path->propertyname 但我注意到拥有 setter/getter 更实用。如果我要实现 getter,我应该为每个属性制作一个,还是可以为整个班级制作一个?因此,例如说我想获取控制器名称...

public function getController( ) {
    return $this->controller;
}

那会返回控制器的私有财产吗?拥有更通用的 getter/setter 甚至是为我获取设置的混合方法是否很常见?

这是类结构(只是属性/方法):

class urlParser {

    public static $url      = '';
    public static $controller   = '';
    public static $baseController = '';
    public static $urls     = '';
    public static $template     = '';
    public static $captures     = '';
    public static $contentXML   = '';

    function __construct( $urls ) {

        $this->urls = $urls;

        $this->baseController = $urls['default'];

        $this->get_url();
    }

    public function get_url() {
        // sets following properties:
        // url, template, controller, contentXML, baseController
    }
}
4

3 回答 3

1

在你的情况下拥有 setter 和 getter 是没有意义的。

如果除了返回控制器之外您必须做任何事情,则不需要 getter,因为如果在设置属性后不对其进行任何操作,则不需要 setter。

如果您真的想要 getter 和 setter,您可以对所有属性使用 __get 和 __set 魔术方法。但如果情况如我上面所述,那是完全没有意义的。

于 2009-08-17T12:31:48.183 回答
0

看看 php 中的重载:http: //php.net/overload

有两种神奇的方法__get()__set()它们可能完全符合您的要求

于 2009-08-17T12:30:38.463 回答
0

PHP 对象有一些很好的魔术方法(尽管我没有使用所有这些方法,因为它会让人感到困惑)。您可能正在寻找的是__get()__set()。如果您选择将数据字段设为私有,您仍然需要重构所有代码(您应该这样做,这样您的其他代码就不会错误地访问字段。这样做有助于使您的代码更好、更容易一些维持。

虽然,我通常会尝试为每个私有数据字段设置 getter 和 setter,因为您可以轻松查看每个字段的任何验证。另外,我更像是 Java 开发人员而不是 PHP 开发人员。

于 2009-08-17T12:31:02.673 回答