In PHP you can "overload" objects, registering special handlers which can catch property accesses and method calls.

Overloading
<?php
function debug ($data)
{
    $fp = fopen('php://stderr', 'w');
    fwrite($fp, "$data\n");
    fclose($fp);
}

class OverloadMe 
{
    var $props = array ();
    var $methods = array(
                         'convn2br' => 'nl2br'
                        );

    function __get ($propname, &$value) {
        debug ("Fetching $propname..");

        $value = $this->props[$propname];

        return true;
    }

    function __get_foo (&$value) {
        debug ("Fetching foo...");
        $value = 'BAR';
    }


    function __set ($propname, $value) {
        debug ("Setting $propname to $value...");

        $this->props[$propname] = $value;

        return true;
    }

    function __call ($methodname, $args, &$ret) {
        debug ("Calling $methodname...");

        $func = $this->methods[$methodname];
        if (isset($func))
            $ret = call_user_func_array ($func, $args);

        return true;
    }
}

overload ('OverloadMe');

$obj = &new OverloadMe;

// Property overloading
$obj->someprop = 'BAM BAM GO BAM';
print $obj->someprop;

// Print out property $foo which is a special case and 
// directly handled
print $obj->foo;

// Method overloading
print $obj->convn2br ("\n\nYABBADABBADOOOOO\n\n");
?>