Следует понимать, что «принципы ООП» не отправляются в камень.
Они больше похожи на эмпирические правила.
Так, например, в python все переменные-члены являются открытыми. Там нет реальных частных переменных.
В Smalltalk все переменные являются закрытыми, нет открытых переменных, если вы хотите предоставить доступ к переменной, вам нужен метод получения. По сути, именно здесь возникла практика геттеров и сеттеров.
Так что магические геттеры и сеттеры в php могут быть полезны при многих обстоятельствах.
Например:
- ORMappers
- Когда вы создаете объект для отправки во внешний API
- Когда вы хотите идентифицировать, кто-то получил доступ к переменной.
- и т.д.
Теперь, если вы хотите сохранить приватные переменные и по-прежнему использовать магические методы получения и установки
еще раз для конкретного случая вашего приложения вы можете изменить свой код
использовать соглашение о подчеркивании '_' для частных переменных.
<?php
class Person {
private $_firstname;
private $_lastname;
function __set($name, $value) {
if (!strpos('_', $name) === 0) {
$this->$name = $value;
} else {
throw new Exception ("trying to assign a private variable");
}
}
function __get($name) {
if (!strpos('_', $name) === 0) {
retrun $this->$name;
} else {
throw new Exception ("trying to read a private variable");
}
}
}
?>