【问题标题】:php terminology: difference between getters and public methods?php 术语:getter 和 public 方法的区别?
【发布时间】:2011-04-08 14:21:42
【问题描述】:

我的问题更多是关于术语而不是技术性(或者是吗?)。

类中的getter方法和公共方法有什么区别?它们是同一个还是它们之间有区别?

我之所以问,是因为我正在努力学习最佳编码实践,而这个领域对我来说似乎是灰色的。我正在注释我的代码,并注意到我有一个名为“Getters”的大节和另一个名为“Public Methods”的大节,然后我就像......“有什么区别?!”。

谢谢!

【问题讨论】:

    标签: php oop methods terminology getter


    【解决方案1】:

    简单来说,PHP 中的 getter 只是一种允许代码的其他部分访问某个类属性的方法。

    例如:

    <?php
    
    class Person {
        private $name;
    
        public function __construct($name) {
            $this->name = $name;
        }
    
        // Getter
        public function getName() {
            return $this->name;
        }
    }
    
    $bob = new Person('Bob');
    echo $bob->getName(); // Bob
    
    ?>
    

    一个方法不一定被设计成只返回一个属性;您可以创建其他方法,以便您的班级可以做一些时髦的事情

    为了扩展上面的例子,让我们给Person类一个名为say()的方法,并给它一个函数/方法参数来表示要说什么:

        public function say($what) {
            printf('%s says "%s"', $this->name, $what);
        }
    

    并在我们从类中创建一个对象后调用它:

    $bob = new Person('Bob');
    echo $bob->getName(), "\n"; // Bob
    $bob->say('Hello!');        // Bob says "Hello!"
    

    请注意,在say() 方法中,我引用了$this-&gt;name。没关系,因为 $name 属性位于同一类中。 getter(及其对应的 setter,如果有的话)的目的是允许代码的其他部分访问此属性。

    【讨论】:

    • 这很有意义。感谢您的出色解释。
    • 好信息,您的第一个示例打印“
      致命错误:无法访问 [...][ 中的私有财产 Person::$name。 ..]17
      "。这是故意的吗?
    • @SSH 这个:我不这么认为!感谢您指出。迟到总比没有好。
    【解决方案2】:

    公共方法可以从类外部更新,类不一定要知道。

    公共 getter 或 setter 为您提供更大的灵活性 - 即,当我们尝试读取 $obj-&gt;$property 时,变量可能还没有准备好。但是,如果我们使用$obj-&gt;getSomething(),我们可以对那个变量做任何事情,让它准备好,

    不同之处在于公共 getter 通常返回一个私有变量。这意味着从对象中获取属性状态的唯一方法是通过方法获取它,这可能会也可能不会做额外的事情。

    【讨论】:

      【解决方案3】:

      Getter 是返回私有变量值的公共方法。同样,setter 是允许修改或“设置”私有变量的公共方法。

      【讨论】:

      • 对此进行扩展:getter 和 setter 用于完成data encapsulation
      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 2018-08-19
      相关资源
      最近更新 更多