diff --git a/functions/overload.xml b/functions/overload.xml new file mode 100644 index 0000000000..7acb42b555 --- /dev/null +++ b/functions/overload.xml @@ -0,0 +1,140 @@ + + + + Object property and method call overloading + Object overloading + + + &warn.experimental; + + The purpose of this extension is to allow overloading of object + property access and method calls. Only one function is defined + in this extension, overload which + takes the name of the class that should have this functionality + enabled. The class named has to define appropriate methods if + it wants to have this functionality: __get(), + __set() and __call() + respectively for getting/setting a property, or calling a method. + This way overloading can be selective. Inside these handler + functions the overloading is disabled so you can access object + properties normally. + + + Some simple examples on using the overload + function: + + Overloading a PHP class + + 9, 'c' => 42); + + // Callback method for getting a property + function __get($prop_name, &$prop_value) + { + if (isset($this->elem[$prop_name])) { + $prop_value = $this->elem[$prop_name]; + return true; + } else { + return false; + } + } + + // Callback method for setting a property + function __set($prop_name, $prop_value) + { + $this->elem[$prop_name] = $prop_value; + return true; + } +} + +// Here we overload the OO object +overload('OO'); + +$o = new OO; +print "\$o->a: $o->a\n"; // print: $o->a: +print "\$o->b: $o->b\n"; // print: $o->b: 9 +print "\$o->c: $o->c\n"; // print: $o->c: 42 +print "\$o->d: $o->d\n"; // print: $o->d: + +// add a new item to the $elem array in OO +$o->x = 56; + +// instantiate stdclass (it is built-in in PHP 4) +$val = new stdclass; +$val->prop = 555; + +// Set "a" to be an array with the $val object in it +// But __set() will put this in the $elem array +$o->a = array($val); +var_dump($o->a[0]->prop); + +?> +]]> + + + + + As this is an experimental extension, not all things + work. There is no __call() support + currently, you can only overload the get and set + operations for properties. You cannot invoke the + original overloading handlers of the class, and + __set() only works to one level + of property access. + + + + + + overload + Enable property and method call overloading for a class + + + Description + + + void + overload + + string + + class_name + + + + + + The overload function will enable + property and method call overloading for a class identified + by class_name. + See an example + in the introductory section of this part. + + + + + +