Соглашения о постоянных PHP - PullRequest
4 голосов
/ 17 мая 2011

Привет 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;
}

Очевидно, что это работает, но, похоже, существует множество вариантов, когда речь идет о группировании связанных констант, и я уверен, что это хуже, чем у большинства. Как бы вы это сделали?

Ответы [ 3 ]

4 голосов
/ 17 мая 2011

Существует множество конвенций PHP, и все они противоречат друг другу. Но я использую аналогичные обозначения, хотя мне нравится группировать константы по классам, поэтому у меня будет класс Высота (или MySquare_Height), которая имеет константы. Таким образом, я могу использовать его как своего рода Enum, как и на других языках. Особенно, когда вы используете редактор с подсветкой.

<?
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;
}


?>
3 голосов
/ 17 мая 2011

Как вариант, вы можете создать несколько интерфейсов, в которых вы можете определять константы. Больше кода, но ... сгруппировано :)

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
{

}
1 голос
/ 17 мая 2011

Поскольку у PHP нет перечислений, ваш способ сделать это прекрасно.

...