0

我了解代码流,但我从不使用它们,因为我不知道它的用途。你能告诉我一个实用的使用方法吗?

setter 和 getter 方法的用途?

<?php 
class person {
        var $name; 
        function set_name($new_name) { 
                $this->name = $new_name;  
        }

   function get_name() {
                return $this->name;
        }
} 
?> 
4

5 回答 5

4

对于像这样的微不足道的情况,getter 和 setter 坦率地说是无用的,除了对封装原则的严格解释(无论如何我都赞同)。

当访问具有要跟踪的副作用的变量或不应由用户直接处理而只能通过严格的定义过程处理的变量时,它们变得有用:例如多线程环境中的全局计数器。

setter 方法的另一个有用方面是数据验证:假设变量只能包含大于 100 且小于 200 的奇数。没有 setter 我可以放置我想要的任何值,使用 setter 我可以清理在对象本身内部而不是外部输入。

总而言之,您应该始终使用 getter 和 setter。他们将来可能会派上用场。

于 2013-07-25T09:09:30.277 回答
1

getter setter 方法的目的主要是在数据传输对象(DTO)、bean 等中,我们希望将具有值的对象从一层传输到另一层

于 2013-07-25T09:05:08.430 回答
1

两种语言的目的不同:

  • 在 Java 中,setter 和 getter 是“Java Bean”标准的一部分,用于定义公共属性(根据定义,属性是公开为 getter 和 setter 的东西);许多 IDE、向导和库都期望这样的方法(顺便说一下,这是一种广泛有用但同样被误解的抽象)。

  • 在 PHP 中它们不太有用,但它们确实使控制属性的类型变得更容易(您可以在方法上使用类型提示,但不能在属性上使用它们)

  • 在 PHP 和 Java 中,它们允许您将某些内容设为“只写”

  • 在 PHP 和 Java 中,它们帮助使用 IDE 的人猜测“如何配置此对象”——通常您只需键入 set,按 ctrl+space 并浏览可配置的内容。

  • 在这两种语言中,它们都添加了一些封装并有助于保护您的代码免受更改(可以说,这在 PHP 中不太重要,无论如何您都可以使用魔术 __get 方法)。

大多数情况下,它们只是风格和统一性的问题。

于 2013-07-25T09:11:19.093 回答
0

getterandsetter方法使您可以集中控制特定字段的初始化、访问和提供给客户端的方式,从而使验证和调试更加容易。您可以简单地放置一个断点或打印语句来查看哪些线程正在访问以及哪些值正在输出。

于 2013-07-25T09:07:58.090 回答
0

一个优点是您可以使用 getter 和 setter 来控制传入的值:

<?php 
class car{
    var $engineSize;

    function setEngineSize($size) { 
        if($size > 0){
            $this->engineSize = $size;
    }
} 
?> 
于 2013-07-25T09:08:07.193 回答