【问题标题】:Returning strings vs integers? [closed]返回字符串与整数? [关闭]
【发布时间】:2012-09-11 03:09:26
【问题描述】:

假设我有一个名为checkTemperature($temp) 的函数,它可以返回三种不同的可能性:

  1. 太热了
  2. 好的
  3. 太冷了

您会返回整数,如-1, 0, 11, 2, 3(等)还是字符串,如上述?

什么是最佳实践?

【问题讨论】:

  • 使用枚举会让你的代码更具可读性。
  • 取决于你想对返回的数据做什么。
  • 返回应用程序上下文中对您有意义的内容
  • 取决于您希望如何返回结果,作为字符串(描述性)或作为整数(特定)。

标签: php function return return-value


【解决方案1】:

您通常会使用枚举,但 PHP 并不直接支持枚举构造。但是,我们当然可以效仿他们。

class Temperatures
{
    const TooHot = 1;
    const OK = 2;
    const TooCold = 3;
}

那你就可以了

return Temperatures::TooHot;

比较

if ($retval == Temperatures::OK)

您为变量分配的值并不重要,只要它们不同即可。您可以根据您的应用和上下文将这些值用于有趣的事情。

【讨论】:

  • +1 如果您支持 OOP,这最终会更可读和简单。否则,我会提倡返回字符串。
  • 我刚试过这样做,但是当我定义“public const TooHot = 1;”时我收到错误“意外的公共关键字”。我需要从其他类调用函数,所以如果常量不能在 php 中公开(?)那么你的方法将不起作用?
  • 常量已经是public了,不需要public关键字(错误已经给大家解释过了​​)。在@Xeon06 示例中,您在哪里看到 public const TooHot = 1; ???
【解决方案2】:

在这种情况下没有“最佳实践”。在某些情况下返回一个字符串会更有意义,而其他时候一个整数会完成这项工作

【讨论】:

    【解决方案3】:

    就个人而言,我倾向于在有意义的地方使用数字和可比较。向类中添加常量以避免“幻数”效应。

    <?php
    
    if ($result == 2) { ... }
    // vs 
    if ($result == Temp::TOO_HOT) { ... }
    
    // Though can result in some odd code
    if ($result > Temp::OK) { echo "that's bad"; }
    

    【讨论】:

      【解决方案4】:

      -1 通常是我遇到的约定中对“未找到”或无效阅读的引用。字符串很容易理解,并且有许多方法可以将字符串分配给数值。比如太冷=-100,太热=100,刚刚好=75。

      我会在这个上投票字符串而不是整数。

      【讨论】:

      • 是的!再次投票给我上面的枚举。 @Xeon06 好接电话的人。
      【解决方案5】:

      为了减少开销,您可以使用#define

      define('TEMP_HOT',  1);
      define('TEMP_OK',   2);
      define('TEMP_COLD', 3);
      

      只有在你已经使用类的情况下才有意义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-13
        • 1970-01-01
        • 2018-05-13
        • 2017-04-05
        • 2020-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多