使用setter和getter方法的目的是什么?

时间:2013-07-25 09:03:09

标签: php

我理解代码流但我从不使用它们因为我不知道它是什么...你能告诉我一个实用的方法吗?

setter和getter方法的目的是什么?

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

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

5 个答案:

答案 0 :(得分:4)

对于像这样的琐碎案例,除了对封装原则的严格解释之外,吸气剂和制定者都是无用的(无论如何我都认可)。

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

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

所有人都说,你应该总是使用getter和setter。它们将来可能会派上用场。

答案 1 :(得分:1)

getter setter方法的目的主要是数据传输对象(DTO),bean等我们想要将值从一个层传输到另一个层的对象

答案 2 :(得分:1)

两种语言的目的都不同:

  • 在Java中,setter和getter是“Java Bean”标准的一部分,用于定义公共属性(属性是 - 按照定义 - 暴露为getter和setter的东西);很多IDE,向导和库都期望这样的方法(顺便说一下,这是一种广泛使用且同样被误解的抽象方法)。

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

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

  • 在PHP和Java中,他们帮助人们使用IDE猜测“如何配置这个对象” - 通常你只需输入set,按ctrl + space并浏览可配置的东西。

  • 在这两种语言中,他们添加了一些封装并帮助保护代码免受更改(这可以说 - 在PHP中不那么重要,无论如何你可以使用魔法__get方法)。

    < / LI>

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

一个优点是你可以使用getter和setter来控制值:

<?php 
class car{
    var $engineSize;

    function setEngineSize($size) { 
        if($size > 0){
            $this->engineSize = $size;
    }
} 
?>