【问题标题】:PHP methods: getMyVariable() vs myVariable()PHP 方法:getMyVariable() 与 myVariable()
【发布时间】:2010-08-21 00:56:24
【问题描述】:

我想知道用 PHP 编码时什么更好或更容易被接受。在 Java 中,我被教导获取和设置变量的类方法应该以“get”和“set”为前缀。不过,我想知道的是,我是否应该在常规 PHP 函数中使用这些前缀。

例如,要从会话变量中检索用户名,我可以使用
getUsername()

username()

有哪些优势和最佳做法。我知道使用“get”更容易助记,但它相当多余(特别是对于我不希望让其他人阅读的个人项目),但为了良好的实践,我想把它做好。

当我谈到它时,变量的正确命名约定是什么?下划线分隔还是驼峰式?我环顾四周,看到两者兼而有之。 Wordpress 倾向于在其函数名称中使用下划线,但许多其他网站说骆驼大小写是最好的。

【问题讨论】:

标签: php naming-conventions


【解决方案1】:

我个人尽量远离 getter/setter。我更喜欢使用魔法方法,这样我就可以在不需要显式调用函数的情况下执行$foo->myVar(我认为它使代码更具可读性)。

话虽如此,在某些情况下我会使用显式的 getter 和 setter(基本上是在直接使用变量的结果不明确的情况下。就像我将魔术方法映射到内部数组并有其他需要的成员变量一样访问)。在这种情况下,我使用$foo->getMyVar() 作为函数签名。

恕我直言,$foo->myVar() 如果您知道它是一个变量,那么它是有意义的。但是如果你看到$foo->show() 会发生什么。这是否意味着执行表演动作?或者这是否意味着获取 show 变量的当前设置?

我总是尝试用可以识别它们所做的事情来命名所有方法。 $foo->var() 没有说明发生了什么。但是$foo->showVar() 确实如此(至少更是如此)。

至于命名约定,这完全取决于您阅读的人。我更喜欢驼色箱。但是下划线并没有错。选择一个,并坚持下去。一致性比选择本身更重要...

【讨论】:

  • “但是 $foo->showVar() 确实如此(至少更是如此)” - 我认为它更糟,因为它听起来会使用 echo 或类似的东西打印它。 show 应该是 void
【解决方案2】:

一般来说,方法最好包含动词。

查看 PHP 的 PEAR 命名约定:http://pear.php.net/manual/en/standards.naming.php

他们鼓励 getter 方法使用“get”前缀。我会修改它以使用“is”作为布尔类属性的前缀。

PEAR 还鼓励使用驼峰式(或“studly caps”)而不是下划线。

【讨论】:

    【解决方案3】:

    我个人觉得“get”前缀很有帮助。虽然这取决于您的 IDE 和偏好。如果您的 IDE 提供 cmets 和工具提示,那么它可以通过简单的鼠标悬停提醒您 myFunction 执行此操作或执行那个操作。

    我经常使用其他有用的前缀:getsetvalidate(或只是val)、parseshow。我发现在功能的海洋中,小描述符有很大帮助。

    【讨论】:

    • 我在 Mac OS X 上使用 TextMate,我认为它没有任何鼠标悬停定义功能。
    【解决方案4】:

    首先$_SESSION 是一个全局变量,你真的不需要getter。根据更好的命名约定,最好使用 getUsername()。

    休息是个人的选择或意见。最好选择适合您的命名约定并坚持下去。

    【讨论】:

      【解决方案5】:

      当我在做的时候,什么是正确的 变量的命名约定? 下划线分隔还是驼峰式?

      任何你最喜欢的,只要你与它一致。下划线风格更老派和 C 风格,而驼峰式风格显然是受 Java 启发的。用下划线分隔会使你的名字变长。

      【讨论】:

        【解决方案6】:

        我个人认为方法和变量名越明确、越容易解释越好。如果除您之外的任何人都将查看代码,这一点非常重要。随着项目规模的扩大,它也会有所帮助。

        另一个关键是一致性...选择并坚持下去。

        【讨论】:

          猜你喜欢
          • 2011-05-03
          • 2022-07-02
          • 2012-02-18
          • 2012-08-27
          • 1970-01-01
          • 2020-11-07
          • 1970-01-01
          • 2019-04-08
          • 2010-12-26
          相关资源
          最近更新 更多