Proxy Dispatcher implemented in PHP

I want to share a piece of code which might be very usefull when you have to deal with objects introspection in PHP. I played for years with the python’s introspection system and I loved it.

But now I’m back on PHP. A language that have very good metaprogramming tools but which is less pragmatic than python or ruby in this aspects (and maybe in almost all aspects) under my point of view.

In this piece of code I’m trying to replace the *args of python with the php function call_user_func_array. The functionally behind this differents implementations is very similar in the end. But I ever think python’s approach is far better =).

Let the code talk:

/**
* Proxy Dispatcher using php call_user_func_array (http://us2.php.net/manual/en/function.call-user-func-array.php)
* */

class Foo {

    function bar1($arg, $arg2, $arg3, $arg4) {
         return "arg: $arg, arg2: $arg2, arg3: $arg3, arg4: $arg4\n";
    }
    function bar2($arg, $arg2) {
        return "arg: $arg, arg2: $arg2\n";
    }
    function bar3($arg) {
        return "arg: $arg\n";
    }
}

class FooWrapper {

    public function __construct() {
        $this->_foo = new Foo();
    }

    public function __call($method, $arguments) {
        return call_user_func_array(array($this->_foo, $method), $arguments);
    }
}

$fooWrapper = new FooWrapper();
echo $fooWrapper->bar1(1,2,3,4);
echo $fooWrapper->bar2(1,2);
echo $fooWrapper->bar3(1);

And here is the python’s code for the same:

class Foo(object):

    def bar1(self, arg, arg2, arg3, arg4):
        print "arg: %s, arg2: %s, arg3: %s, arg4: %s" % (arg, arg2, arg3, arg4)

    def bar2(self, arg, arg2):
        print "arg: %s, arg2: %s" % (arg, arg2)

    def bar3(self, arg):
        print "arg: %s" % arg


class FooWrapper(object):

    foo = Foo()

    def __getattr__(self, name):
        return lambda *args, **kwargs: getattr(self.foo, name)(*args, **kwargs)


fooWrapper = FooWrapper()
fooWrapper.bar1(1,2,3,4)
fooWrapper.bar2(1,2)
fooWrapper.bar3(1)
Advertisements

Just Another Real Time Chat Built Over Node-js and Socket.io

I recently wrote another real time chat built over Node-js and Socket.io. Here is the link: https://github.com/jmg/node-simple-chat

I was researching so much about node-js lately and it turned out amazing when I have to deal with real time applications. But I think python’s Eventlet could achieve a very good performance too. I really need to reimplement this using eventlet websockets and then do some sort of benchmarks.

Probably the topic for my next post =). Keep reading.

New year’s Post (Part II)

I started this blog exectly one year ago and loved so much sharing posts and getting feedback from people who read me. Also I think I made the better choice when I decide start blogging with WordPress. WordPress have very nice features to help me to write posts and include code snipets in them (by the way, almost all of my posts are about software programming).

This was my first year as a blogger. I learned too much the past year and I’m really glad to have a place which allows me to share my acquired knowledge. I hope will be able to continue doing that in this brand new year.

I’m sure this will be a great year for my professional carrer and I will have too much to share here. I started a Company, got more jobs and more interesting activities to do. That’s awesome to me but I wish won’t make me stop writing by lack of time.

Anyway, don’t worry, I’ll always find time to write. I love so much this and I’ll ever be back here, the place I discovered exactly one year ago.

Now, One year after my first post, I promised myself to write one post every first day of every new year. Just for remember, just for recall the time when I started…