【问题标题】:PHP Constant ConventionsPHP 常量约定
【发布时间】:2011-05-16 21:30:45
【问题描述】:

问候 StackOverflow

我正在做一些房屋清洁工作,并认为在我重构课程时我会要求一些建议的 PHP 实践。特别是,我有一些属于类别的类常量,我想知道一些好的方法来对具有共同目的的常量进行分组。

一个例子:

class MySquare {
  // Colors
  const COLOR_GREEN = "green";
  const COLOR_RED = "red";

  // Widths
  const WIDTH_SMALL = 100;
  const WIDTH_MEDIUM = 500;
  const WIDTH_BIG = 1000;

  // Heights
  const HEIGHT_SMALL = 100;
  const HEIGHT_MEDIUM = 300;
  const HEIGHT_BIG = 500;
}

显然这是可行的,但似乎在对相关常量进行分组时可能有很多选择,我敢打赌这不如大多数。你会怎么做?

【问题讨论】:

  • 这基本上就是我的做法。
  • 较新的推荐方法是使用命名空间而不是类来保存一系列值。类方法有效,但它是对 OOP 系统的滥用。
  • @MarcB 这个建议让我很感兴趣,但不幸的是我不确定它实际上会是什么样子。 (如果您没有时间,不要乞求答案,但如果您有时间并且可以举一个很棒的例子)。同时,我将阅读 PHP 命名空间。

标签: php class-design


【解决方案1】:

有许多 PHP 约定,它们都相互矛盾。但是我确实使用了类似的符号,虽然我喜欢对每个类的常量进行分组,所以我会有一个类 具有常量的高度(或 MySquare_Height)。这样,我可以像使用其他语言一样将它用作一种枚举。尤其是当您使用带有突出显示的编辑器时。

<?
abstract class MySquare_Color
{
  const GREEN = 'Green';
  const RED = 'Red';
}

abstract class MySquare_Height 
{
  const SMALL = 100;
  const MEDIUM = 300;
  const BIG = 500;
}

如果您使用的是 PHP 5.3,您只需将类命名为 Color 和 Height 并将它们放在 MySquare 命名空间中:

<?php
// Namespace MySquare with subnamespace Width containing the constants.
namespace MySquare\Width
{
    const SMALL = 100;
    const MEDIUM = 300;
}

namespace
{
  // Refer to it fromout another namespace
  echo MySquare\Width\SMALL;
}


?>

【讨论】:

  • 应要求添加了命名空间解决方案。
【解决方案2】:

作为变体,您可以创建一些接口,您可以在其中定义常量。更多代码,但是...分组:)

interface IColorsConstants
{
    const COLOR_GREEN = "green";
    const COLOR_RED = "red";
}

interface IWidths
{
    const WIDTH_SMALL = 100;
    const WIDTH_MEDIUM = 500;
    const WIDTH_BIG = 1000;
}

interface IHeights
{
    const HEIGHT_SMALL = 100;
    const HEIGHT_MEDIUM = 300;
    const HEIGHT_BIG = 500;
}

class MySquare implements IColorsConstants, IHeights, IWidths
{

}

【讨论】:

  • 不错的解决方案,它也有效。太糟糕了,我的工具(PHPDesigner 7)的代码完成不能识别接口常量,而只能识别类常量。 :(
  • @GolezTrol 尝试使用 NetBeans 或 PhpStorm。我希望 PHP Designer 有朝一日能成为这些 IDE 的替代品。
【解决方案3】:

由于 PHP 没有枚举,因此您可以使用它完全没问题。

【讨论】:

    猜你喜欢
    • 2010-09-19
    • 1970-01-01
    • 2012-09-13
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 2015-12-29
    相关资源
    最近更新 更多