Лучший способ определить информационный массив с классом - PullRequest
0 голосов
/ 02 апреля 2011

У меня есть таблица базы данных, в которой хранится «тип» для проекта, который хранит 1, 2 или 3, где:

1 = "Активно" 2 = "Неактивно" 3 = "Отменено"

В настоящее время я храню это отображение в массиве в моем config.php, что делает его глобальной переменной, доступной из всего моего приложения. Это выглядит примерно так:

$project_types = array(1 => "Active", 2 => "Inactive", 3 => "Cancelled");

Теперь у меня есть класс Project, в котором есть методы get_type () и set_type () для изменения целочисленного значения, как и ожидалось. Я хочу иметь метод get_type_name (). Может кто-нибудь здесь объяснить, как этот метод должен выглядеть? В настоящее время у меня есть что-то похожее на это:

public function get_type_name() {
    global $project_types;
    return $project_types[$this->get_type()];
}

Я выше должен каким-то образом располагаться в моем классе Project, но я просто не уверен, какой путь выбрать.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 02 апреля 2011

Глобальные значения плохие, и в вашем случае создает ненужную зависимость для вашего класса Project.

Решение (одно из многих) довольно простое:
Создайте свойство класса, содержащее типысделайте поиск по нему.

class Project {

    /**
     * @param array Holds human translations of project types.
     */
    protected $_types = array(
        1 => 'Active',
        2 => 'Inactive',
        3 => 'Cancelled',
    );

    /**
     * Get a human-readable translation of the project's current type.
     *
     * If a translation can't be found, it returns NULL.
     *
     * @return string|null
     */
    public function get_human_type() {
        $type = $this->get_type();
        return isset($this->_types[$type]) ? $this->_types[$type] : NULL;
    }

}
4 голосов
/ 02 апреля 2011

Лично я объявил бы его как свойство статического класса, возможно, используя константы класса для различных значений:

class Project
{
    /**    constants */
    const STATUS_ACTIVE         = 'Active';
    const STATUS_INACTIVE       = 'Inactive';
    const STATUS_CANCELLED      = 'Cancelled';

    protected static $projectTypes    = array( 1 => self::STATUS_ACTIVE,
                                               2 => self::STATUS_INACTIVE,
                                               3 => self::STATUS_CANCELLED
                                             );

    public function getTypeName() {
        return self::$projectTypes[$this->get_type()];
    } 

}

Эти константы могут быть доступны с помощью

self :: STATUS_ACTIVE

из класса или

Проект :: STATUS_ACTIVE

снаружи;

и массив можно получить с помощью

самостоятельно :: $ project_types

...