The object oriented javascript style php class definition for PHP 5.3

#!/usr/bin/php
<?php
/**
* Mootools-style php scripting at version 5.3
* Hash-based class definition, avoiding namespaces
*/

#################################################################################
# Start Core
#################################################################################
class P{
private static $map;
private static $current_class;

public function mclass($class_name, $class_hash){
$class_name = self::clean_class_name($class_name);
self::$map["$class_name"] = $class_hash;
#a hook after the class has been made
print "The class $class_name has been made!\n";
}

/**
* create a singleton of the P object
*/
public function getInstance($class_name){
static $instance;
$class_name = self::clean_class_name($class_name);
self::$current_class = $class_name;
if(!is_object($instance)){
$instance = new P();
}
return $instance;
}

public static function this(){
return self::getInstance(self::$current_class);
}

public function __call($name, $params = array()){
$map = self::$map;
$current_class = self::$current_class;
if(array_key_exists($name, $map[$current_class]) && !in_array($name, self::getPreservedWords())){
if(count($params) > 0){
$map[$current_class][$name]($params[0]);
}
else{
$map[$current_class][$name]();
}
}
else{
print "Method $name in class $current_class does not exist!\n";
}
}

private static function clean_class_name($class_name){
$class_name = trim($class_name);
#make class name less error-prone
$class_name_comps = @explode(">",$class_name);
$class_name_comps_length = count($class_name_comps);
for($k = 0; $k < $class_name_comps_length; $k++){
$class_name_comps[$k] = trim($class_name_comps[$k]);
}
$class_name = @implode(">",$class_name_comps);
return $class_name;
}

/**
* Preserved key words
*/
private static function getPreservedWords(){
return array(
'public','private','protected','extends','variables','implements'
);
}
}

/**
* The O function, return a P::getInstance
*/
function O($class_name){
return P::getInstance($class_name);
}

/**
* The C function, same as P::mclass
*/
function C($class_name, $class_hash){
P::mclass($class_name, $class_hash);
}

########################################################################################
# End Core
########################################################################################

/* define a class */
C('Car', array(

//define "class" variables
'variables' => array(

),

//access control, default function is protected
'public' => array(), # an array of public methods
'private' => array(), # an array of private methods

'extends' => 'ObjectBase', #we can extends one base class
'implements' => array('Observable, Sortable'), #implements an array of interface

'hello' => function($params){
P::this()->greet($params);
},

'greet' => function($params){
print "greeting from Car\n";
},

));

C('Car > Japanese', array(
'hello' => function(){
print "hello from a japanese car\n";
}
));

/* we can achieve class overriding here, which is not possible in normal php class definition */
/*
C('Car', array(

'hello' => function($params){
P::this()->greet($params);
},

'greet' => function($params){
print "greeting from car in second\n";
},

));
*/

C('Car > American', array(

'engine' => function(){
print "American Car Engine\n";
},

));

$car = O('Car');
$car->hello(array('size' => 10));
$car->greet(array());

$car = O('Car > Japanese');
$car->hello();
$car->bar();

O('Car > American')-> engine();
O('Car')->public();

//we might achieve dynamic extend and implement !!!