Прежде всего, я НАСТОЯТЕЛЬНО рекомендую не returning
, если префикс или переменные свойства не установлены. Это сделает отладку ОЧЕНЬ сложной. Вместо этого замените return;
на throw new BadMethodCallException('Method Does Not Exist: '.$method);
Во-вторых, разве это не победить точку защищенных переменных? Это позволяет читать и писать для всех свойств без какой-либо проверки. Если вы собираетесь это сделать, вы можете также сделать их публичными.
Лично я считаю $foo->bar = 'baz';
более читабельным, чем $foo->setBar('baz');
. Не потому, что это «легче» понять, а потому, что второе излишне многословно.
Лично я бы предложил сделать __get
и __set
и добавить проверку. Весь смысл защиты переменных заключается в доверии (чтобы вы могли доверять настройкам). Конечно, вы можете использовать рефлексию или подклассификацию, чтобы изменить их, но я обычно предполагаю, что если кто-то заходит так далеко, он заслуживает каких-либо непреднамеренных захватов, если они испортят переменную.
И помните, что если вы используете какой-либо магический метод, вам нужно будет добавить элементы документации, если вы хотите, чтобы ваша IDE подсказывала вам методы / переменные ...
EDIT:
И не забывайте, если вы объявляете методы __get
/ __set
, вы можете переопределить их в дочерних классах. Поэтому, если дочерний элемент объявляет новые переменные, вы можете обработать их там, а затем вызвать parent::__get
для обработки переменных по умолчанию. Поэтому не используйте массив только для того, чтобы у вас был один метод для всех детей. Проведите валидацию для членов, о которых вы знаете, и пусть ваши дети справятся со своей валидацией ...