Пример #1
0
 /**
  * Creates the global constructor used in user-land
  * @return Func
  */
 static function getGlobalConstructor()
 {
     $Boolean = new Func(function ($value = false) {
         $self = Func::getContext();
         if ($self instanceof Bln) {
             $self->value = $value ? true : false;
             return $self;
         } else {
             return $value ? true : false;
         }
     });
     $Boolean->instantiate = function () {
         return new Bln();
     };
     $Boolean->set('prototype', Bln::$protoObject);
     $Boolean->setMethods(Bln::$classMethods, true, false, true);
     return $Boolean;
 }
Пример #2
0
 /**
  * Creates the global constructor used in user-land
  * @return Func
  */
 static function getGlobalConstructor()
 {
     $String = new Func(function ($value = '') {
         $self = Func::getContext();
         if ($self instanceof Str) {
             $self->value = to_string($value);
             return $self;
         } else {
             return to_string($value);
         }
     });
     $String->instantiate = function () {
         return new Str();
     };
     $String->set('prototype', Str::$protoObject);
     $String->setMethods(Str::$classMethods, true, false, true);
     return $String;
 }
Пример #3
0
 /**
  * Creates the global constructor used in user-land
  * @return Func
  */
 static function getGlobalConstructor()
 {
     $Number = new Func(function ($value = 0) {
         $self = Func::getContext();
         if ($self instanceof Number) {
             $self->value = to_number($value);
             return $self;
         } else {
             return to_number($value);
         }
     });
     $Number->instantiate = function () {
         return new Number();
     };
     $Number->set('prototype', Number::$protoObject);
     $Number->setMethods(Number::$classMethods, true, false, true);
     //constants
     $Number->set('NaN', NAN);
     $Number->set('MAX_VALUE', INF);
     $Number->set('MIN_VALUE', -INF);
     $Number->set('NEGATIVE_INFINITY', -INF);
     $Number->set('POSITIVE_INFINITY', INF);
     return $Number;
 }
Пример #4
0
Date::$classMethods = array('now' => function () {
    return Date::now();
}, 'parse' => function ($str) {
    $date = new Date($str);
    return $date->value;
}, 'UTC' => function () {
    $date = new Date();
    $date->_initFromParts(func_get_args(), 'UTC');
    return $date->value;
});
Date::$protoMethods = array('valueOf' => function () {
    $self = Func::getContext();
    return $self->value;
}, 'toJSON' => function () {
    $self = Func::getContext();
    //2014-08-09T12:00:00.000Z
    return $self->toJSON();
}, 'toUTCString' => function () {
    //todo
}, 'toString' => function () {
    $self = Func::getContext();
    //Sat Aug 09 2014 12:00:00 GMT+0000 (UTC)
    return str_replace('~', 'GMT', $self->date->format('D M d Y H:i:s ~O (T)'));
});
Date::$protoObject = new Object();
Date::$protoObject->setMethods(Date::$protoMethods, true, false, true);
//get the local timezone by looking for constant or environment variable; default to UTC
Date::$LOCAL_TZ = defined('LOCAL_TZ') ? constant('LOCAL_TZ') : getenv('LOCAL_TZ');
if (Date::$LOCAL_TZ === false) {
    Date::$LOCAL_TZ = 'UTC';
}
Пример #5
0
            $methods['defineProperty']($obj, $key, $prop->value);
        }
    }
});
Object::$protoMethods = array('hasOwnProperty' => function ($key) {
    $self = Func::getContext();
    $key = (string) $key;
    return array_key_exists($key, $self->data);
}, 'toString' => function () {
    $self = Func::getContext();
    if ($self === null) {
        $className = 'Undefined';
    } else {
        if ($self === Object::$null) {
            $className = 'Null';
        } else {
            $obj = objectify($self);
            $className = $obj->className;
        }
    }
    return '[object ' . $className . ']';
}, 'valueOf' => function () {
    return Func::getContext();
});
class Null
{
}
Object::$null = new Null();
//the methods are not set on Object.prototype until *after* Func class is defined
Object::$protoObject = new Object();
Object::$protoObject->proto = Object::$null;