Magic Getters and Setters is an actively used design pattern.

?Years Old
  • Magic Getters and Setters does not currently rank in our top 50% of entities I track
  • I have 11 facts about Magic Getters and Setters. what would you like to know? email me and let me know how I can help.
  • Read more about Magic Getters and Setters

Languages without Magic Getters and Setters include cpp

Languages with Magic Getters and Setters include javascript, php

Example from javascript:

// Can be implemented in ES6 using proxies:
"use strict";
if (typeof Proxy == "undefined") {
    throw new Error("This browser doesn't support Proxy");
}
let original = {
    "foo": "bar"
};
let proxy = new Proxy(original, {
    get(target, name, receiver) {
        let rv = Reflect.get(target, name, receiver);
        if (typeof rv === "string") {
            rv = rv.toUpperCase();
        }
        return rv;
      }
});
console.log(`original.foo = ${original.foo}`); // "original.foo = bar"
console.log(`proxy.foo = ${proxy.foo}`);       // "proxy.foo = BAR"

Example from php:

    public function __set($name, $value)
   {
       echo "Setting '$name' to '$value'\n";
       $this->data[$name] = $value;
   }

   public function __get($name)
   {
       echo "Getting '$name'\n";
       if (array_key_exists($name, $this->data)) {
           return $this->data[$name];
       }

       $trace = debug_backtrace();
       trigger_error(
           'Undefined property via __get(): ' . $name .
           ' in ' . $trace[0]['file'] .
           ' on line ' . $trace[0]['line'],
           E_USER_NOTICE);
       return null;
   }

Last updated November 6th, 2019