Как я могу обойти без массивов как константы класса в PHP? - PullRequest
2 голосов
/ 13 мая 2010

У меня есть класс со статическим методом.Существует массив для проверки того, что переданный строковый аргумент является членом набора.Но, используя статический метод, я не могу ссылаться на свойство класса в необъявленном классе, и при этом я не могу иметь массив в качестве константы класса.

Полагаю, я мог бы жестко кодировать массив в статическом методе,но затем, если мне нужно изменить это, я должен был бы помнить, чтобы изменить это в двух местах.Я бы хотел этого избежать.

Ответы [ 3 ]

6 голосов
/ 13 мая 2010

Вы можете создать приватную статическую функцию, которая будет создавать массив по требованию и возвращать его:

class YourClass {
    private static $values = NULL;
    private static function values() {
        if (self::$values === NULL) {
            self::$values = array(
                'value1',
                'value2',
                'value3',
            );
        }
        return self::$values;
    }
}
0 голосов
/ 13 мая 2010

У меня действительно действительно трудное время, чтобы понять ваш вопрос.Вот по сути то, что я понял:

Мне нужно поддерживать правильный набор, в котором нет двух одинаковых элементов.

PHP не имеет тип набора, недаже в SPL!Мы можем подражать функциональности набора, но любое решение, которое я могу придумать, не является приятным.Вот что я считаю самым чистым:

<?php

class Set {

    private $elements = array();

    public function hasElement($ele) {
        return array_key_exists($ele, $elements);
    }

    public function addElement($ele) {
        $this->elements[$ele] = $ele;
    }

    public function removeElement($ele) {
        unset($this->elements[$ele]);
    }

    public function getElements() {
        return array_values($this->elements);
    }

    public function countElements() {
        return count($this->elements);
    }

}

Пример использования:

<?php

$animals = new Set;
print_r($animals->getElments());
$animals->addElement('bear');
$animals->addElement('tiger');
print_r($animals->getElements());
$animals->addElement('chair');
$animals->removeElement('chair');
var_dump($animals->hasElement('chair'));
var_dump($animals->countElements());
0 голосов
/ 13 мая 2010

Я помещаю массивы в другой файл и затем включаю файл туда, где он мне нужен.

...