Setters / Getters,可见性[OOP] in PHP

我正在对我的班级进行格式化(见下文) - 我认为我犯了一个错误,即在我的班级中设置了所有具有相同可见性的内容,而属性应该是私人的,并且在大多数情况下,getter / setter应该是公开的。

为了获得一个属性,我只是做了$ path-> propertyname,但我注意到它更具实用性,让setter / getters成为可能。 如果我要实施获得者,我应该为每个财产制定一个,还是我可以为整个班级制定一个? 所以例如说我想获得控制器名称...

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

在你的情况下让setter和getter成为毫无意义的事情。

如果除了返回控制器之外你必须做任何事情,你不需要getter,因为如果你在属性设置后没有对属性做任何事情,你就不需要setter。

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


看看在PHP中重载:http://php.net/overload

有两种神奇的方法__get()__set() ,它们可能正是你想要的


PHP对象有一些很好的魔术方法(尽管我没有使用它们,因为它可能会让人困惑)。 你可能正在寻找的是__get()和__set()。 如果您选择将数据字段设置为私有的(如果您的其他代码没有正确访问字段,那么您仍然必须重构所有代码)。以这种方式进行此操作有助于使代码变得更好,更轻松保持。

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

链接地址: http://www.djcxy.com/p/53945.html

上一篇: Setters/Getters, Visibility [ OOP ] in PHP

下一篇: Are getters and setters poor design? Contradictory advice seen