函数中的Php remove()使其更易于使用

I am creating a little system which will allow users to extend the system with their own classes.

Class Core {
static $confArray;
static $extendArray;
protected static $instance;
public function read($name)
{
    return self::$confArray[$name];
}
public function put($name, $value)
{
    self::$confArray[$name] = $value;
}
public function extend($function, $handler, $args=null){

    self::$extendArray[$function] = new $handler($args);
}
public function __call($method, $args){
    return self::$extendArray[$method];
}
public static function getInstance()
{
    if (!isset(self::$instance))
    {
        $object =__CLASS__;
        self::$instance= new $object;
    }
    return self::$instance;
}
}

With That, now a user can come and register a simple extension from such a class:

class WorkersTest{
function isWorking($who){
    echo "$who is working";
}
function isNotWorking($who){
    echo "$who is not working";
}
}

To call the function (isworking/ isNotWorking), a the programmer needs to register the test class through:

Core::getInstance->extend("worker","WorkersTest");

Then it can now be called through:

Core::getInstance->worker()->isWorking("George");

This is working perfectly. My question is how i can remove the () in the call (dont worry why) and have:

Core::getInstance->worker->isWorking("George");

Is it possible?

You can use the magic __get() method, just like __call():

public function __get($name)
{
    return $this->$name();
}

Try overriding the magic __get() method to return what you need:

Class Core {

   // (...)

   public function __get($name) {
      if (isset( self::$extendArray[$function] )) {
         return $this->$name();
      }
      //if there is no function registered under named "$name"
      //throwing Exception is by design better, as @scragar suggested
      throw new Exception("No function registered under named {$name}");
      //return NULL;
   }
}