В настоящее время мне нужно расширить класс, чтобы добавить к нему функциональность (у меня нет доступа к базовому классу, чтобы изменить его), и у меня возникла проблема с ним.
По сути, мне нужно, чтобы функция Magic Getter возвращала набор частных переменных, если они запрашиваются, но в противном случае по умолчанию используется поведение по умолчанию. Мне нужно, чтобы эти свойства были закрытыми, чтобы использовать функцию Magic Setter для автоматической синхронизации некоторых данных.
Тем не менее, вот пример кода:
class newClass extends baseClass {
private $private1;
private $private2;
...
public function __get($name) {
if($name == 'private1') return $this->private1;
if($name == 'private2') return $this->private2;
... (and so on)
// and here, it should default back to it's default behavior (throwing
// an error on getting invalid/inaccessable property, etc.)
// I cannot just use property_exists, because there may or may not be
// private variables in the base class that should not be exposed.
}
public function __set($name,$val) {
// I use this to do some automatic syncing when the two private variables
// above are set. This needs to be triggered, hence the private variables
// in the first place.
}
}
Я знаю, я мог бы использовать функции getProperty/setProperty, но я хотел бы, чтобы это оставалось как можно более интуитивно понятным, несмотря на аргумент, что выполнение таких операций противоречит здравому смыслу. Две частные собственности очень тесно связаны друг с другом. Когда один из них установлен, он логически повлияет на другие.
На данный момент это единственный логичный способ, который я могу придумать, чтобы избежать функций получения/установки и поддерживать тесно связанную синхронизацию между свойствами. Если вы, ребята, можете придумать что-нибудь еще, что может быть жизнеспособным решением, не стесняйтесь предлагать варианты :)