【问题标题】:Setters/Getters, Visibility [ OOP ] in PHP设置器/获取器,PHP 中的可见性 [OOP]
【发布时间】:2010-11-20 03:48:25
【问题描述】:

我正在重新格式化我的类(见下文) - 我认为我犯了一个错误,即在我的类中设置所有内容都具有相同的可见性,而属性实际上应该是私有的,而 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
    }
}

【问题讨论】:

  • 您能否更新您的问题以使问题更明显?在知道您要什么之前,没有人会查看所有代码。
  • 好的 - 将我的问题更新为更简单的问题。

标签: php oop visibility setter getter


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    有两种神奇的方法__get()__set() 可以完全满足您的需求

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-10-25
        • 2011-06-10
        • 2011-10-23
        • 1970-01-01
        • 2019-12-09
        • 2014-07-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多