Я хочу дать доступ к защищенным свойствам другому классу - PullRequest
0 голосов
/ 03 июня 2011

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

У меня есть один класс

abstract class Form_Abstract {
    protected $formAttributes = array();
    protected $fields = array();
}

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

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

Что я рассмотрел:

Использование метода __get для доступа к защищеннымсвойства вне класса, таким образом, в основном делая класс только для чтения.Однако для доступа к переменным требуется примерно 350% больше времени.

Наличие метода, который выводит все переменные класса в многомерный массив.Хотя это, кажется, лучший способ скрыть внутреннее содержимое класса, это не очень эффективно для генерации этих массивов, возможно, несколько раз за экземпляр скрипта.

Выполнение некоторой уловки наследования, которая позволяетдоступ к классам, которые расширяют определенный базовый класс или что-то.Это кажется классным вариантом, но создает зависимости таким образом, которого я бы хотел избежать.Также требуются специальные методы для получения переменных.

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

Любые идеи или мыслиоценили.

1 Ответ

1 голос
/ 03 июня 2011

Я, вероятно, что-то упускаю, но мне кажется, что все, что вы хотите сделать, это расширить класс Form_Abstract ...

abstract class Form_Abstract {
    protected $formAttributes = array('apple', 'orange');
    protected $fields = array();
}

class My_Form extends Form_Abstract
{
    function __construct() { }

    function displayFormAttribute($num)
    {
        return $this->formAttributes[$num];
    }
}

$x = new My_Form;

echo $x->displayFormAttribute(0); // apple
echo $x->displayFormAttribute(1); // orange

Расширение дает вам доступ ко всем public иprotected переменные и функции, но не private.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...