PHP中的Setters / Getters,Visibility [OOP]

时间:2009-08-17 06:08:53

标签: php oop visibility setter getter

我正在重新格式化我的课程(见下文) - 我认为我错误地在课堂上设置了相同的可见性,而属性应该是私有的,而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
    }
}

3 个答案:

答案 0 :(得分:1)

在你的情况下拥有制定者和吸气剂是毫无意义的。

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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