You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Yasuo Ohgaki db8bb9f23c Added async query functions 25 years ago
..
CREDITS *** empty log message *** 25 years ago
EXPERIMENTAL Adding user-space object overloading extension. 25 years ago
Makefile.in Adding user-space object overloading extension. 25 years ago
README Adjust to account for latest changes. 25 years ago
config.m4 Enable it for real. 25 years ago
overload.c * use macros in error messages 25 years ago
overload.dsp fix CFLAGS, how could this have worked before? 25 years ago
php_overload.h All right, let people RTFM. 25 years ago

README

This extension is experimental.

That's all I'm required to say, as you should know the consequences, but
I'll go ahead and add a few more notes.

The purpose of this extension is to allow user-space overloading of object
property access and method calls. It has only one function, overload() which
takes the name of the class that should have this functionality enabled. But
the class has to define appropriate methods if it wants to have this
functionality: __get(), __set(), and __call(). So, overloading can be
selective.

Inside each handler the overloading is disabled so you can access object
properties normally.


Usage
-----
<?php

class OO {
var $a = 111;
var $elem = array('b' => 9, 'c' => 42);

function OO($aval = null)
{
$this->a = $aval;
}

function __get($prop_name, &$prop_value)
{
if (isset($this->elem[$prop_name])) {
$prop_value = $this->elem[$prop_name];
return true;
} else
return false;
}

function __set($prop_name, $prop_value)
{
$this->elem[$prop_name] = $prop_value;
return true;
}

function __call($method, $args)
{
print '-- OO::' . $method . "() was called.--\n";
return call_user_func_array(array(&$this, 'my_' . $method), $args);
}

function my_whatever($f1, $f2, $f3)
{
var_dump($f1, $f2, $f3);
return $f1 + $f2;
}
}

overload('OO');

$o = new OO;
print "\$o->a: $o->a\n";
print "\$o->b: $o->b\n";
print "\$o->c: $o->c\n";
print "\$o->d: $o->d\n";

$val = new stdclass;
$val->prop = 555;

$o->a = array($val);
var_dump($o->a[0]->prop);

var_dump($o->whatever(1, 2, 'a'));

?>

What works
----------
Whatever you can get it to do.


What doesn't work
-----------------
Invoking original overloading handlers, if the class had any.
__set() only works to one level of property access, no chains yet
Whatever else I am forgetting about here.


What might change
-----------------
Hell, anything, even the name of extension and its only function.

Feedback, please.