Re: Add methods to object dinamically

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Francisco M. Marzoa Alonso wrote:
I've seen that's possible to add members to objects dinamically, in example:

class MyClass {
   private $a;
}

$MyObject = new MyClass ();
$MyObject->b = 1;

Now $MyObject has a public member called 'b' that has a value of '1'.

The question is, is it possible to add methods in the same way?

I meant something such as:

function sum ( $this ) {
   return $this->a+$this->b;
}

$MyObject->sum = sum;

Note that code will not work, but it illustrates what I'm asking for.

Sort of :)

In PHP5, this will work.

<?php
class DoesStuff
{
    private $_methods = array();
    public function __call($method, $params)
    {
        if (isset($this->_methods[$method])) {
            $call = $this->_methods[$method];
            return $call($this);
        }
    }

    public function __set($var, $value)
    {
        if (is_string($value) && is_callable($value)) {
            $this->_methods[$var] = $value;
        } else {
            $this->$var = $value;
        }
    }
}

function test($o)
{
    return $o->val;
}
$o = new DoesStuff;
$o->val = 4;
$o->test = 'test';
echo $o->test();
?>

However, you won't have access to private or protected data members. It is always better to rigidly define your methods, and extend the class as someone else suggested.

Greg

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux