PHP: сеттеры-геттеры и магия, best practices.

Рейтинг: 1Ответов: 2Опубликовано: 29.11.2014

Предположим, есть некоторый класс, который выполняет роль простой структуры:

class ProcessStatus
{
    protected $command;
    protected $pid;
    protected $running;
    protected $signaled;
    ...
}

Его дальнейшая судьба неизвестна, может, завтра нужно будет впихнуть кучу логики в геттеры, может, ему вообще нужны были бы публичные свойства, а не геттеры и сеттеры, но в данный момент решено все делать через protected-свойства. Остается вопрос с обеспечением доступа к данным, и тут есть три варианта:

а) Code -> Generate -> Getters & Setters: создать необходимые геттеры и сеттеры простыми методами getX() / setX(). Плюсы: автокомплит в IDE любой убогости, скорость. Минусы: невозможно разом переписать несколько геттеров/сеттеров.

б) написать автоматические геттеры и сеттеры через __call() и прописать их в @method в phpdoc-шапке. Плюсы: выглядит, как настоящие геттеры и сеттеры, проще поддерживать, описываются единым списком в шапке. Минусы: возможно, скорость, гибкость меньше, чем при отдельных геттерах и сеттерах, легко забыть описать нужный метод, или, наоборот, описать несуществующий, чтобы по-человечески совместить getMixed() и isBool(), надо солидно покорячиться.

в) написать прямой доступ к полям через __set() или __get(), прописать аналогично через @property. Плюсы: как в предыдущем + легко интерполировать в строках. Минусы: опять же, как в предыдущем, выглядит не очень интуитивно - если IDE видит свойство, то почему я не могу присвоить ему значение?

Все три варианта на самом деле отвратительны, но по ряду параноидальных причин мне не импонируют открытые свойства, поэтому приходится выбирать. Мне больше всего импонирует второй с __call(), но все равно есть чувство отвратного.

Есть ли какие-нибудь гайдлайны по этому вопросу?

Ответы

Ответов пока нет.