代码之家  ›  专栏  ›  技术社区  ›  axsuul

直接或通过函数访问对象变量是更好的做法?[副本]

  •  0
  • axsuul  · 技术社区  · 15 年前


    Why use getters and setters?

    哪种方法更适合练习?

    $user = new User();
    $user->username = "bob";
    $user->password = "password";
    $user->age = 42;
    
    echo $user->username;
    

    $user = new User();
    $user->setUsername("bob")->setPassword("password")->setAge(42);
    
    echo $user->getUsername();
    

    通过方法访问和设置对象变量是更好的实践还是 ? 用户是用户的对象模型 。提前谢谢。

    3 回复  |  直到 9 年前
        1
  •  2
  •   Rene Terstegen    15 年前

    最好使用封装,这是OOP最大的优点之一。将属性设为私有,并使用setter和getter访问属性。

    如果要确保$id属性是一个整数,可以在setter中检查它。如果使用对属性的直接访问,则不能。如果要更改对属性的检查,则只需在一个位置更改它。

    请看一下神奇的seter()和get()方法,在setter和getter方面使您的生活更轻松。

    有关“设置”和“获取”(以及其他魔术方法)的详细信息: http://www.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.members

    我同意戈登的看法。但仍然值得注意的是使用魔法方法的可能性。

    @阿克苏: 定义属性时,请使用private、public或protected关键字。例如:

    protected $id;
    

    private $id;
    

    http://php.net/manual/en/language.oop5.visibility.php

    “类属性必须定义为public、private或protected。如果使用不带显式可见性关键字的var声明,则该属性将被定义为public。”

        2
  •  2
  •   Mark Baker    15 年前

    使用带有setter的私有属性可以实现对属性的一些基本验证,因此,如果(例如)name和password是必需的,则可以检查是否使用有效值调用它们,如果不是,则抛出异常。否则,您必须在代码的其他地方执行此操作。

    强制使用getter还允许您在返回值之前执行其他任务(例如,格式化电话号码,或确保名称以大写字母开头的字符显示)。

        3
  •  0
  •   oezi    15 年前

    使用方法(getter和setter,使attibutes私有)是调用 encapsulation

    推荐文章