gabrieljmj/prototype

dev-master 2014-11-01 01:31 UTC

This package is auto-updated.

Last update: 2024-05-16 02:37:22 UTC


README

Total Downloads Latest Unstable Version License Scrutinizer Code Quality

This library allows you to create prototypes almost like in JavaScript.

##Tests Sorry, I know that it is wrong, but I left the tests to do after the library. Why? Because I am having problems to write them.

##1. Creating an object Objects are created with functions. These functions will return an object. All objects are registred on a class called \Gabrieljmj\Prototype\Prototype.

require_once 'autoload.php';

use Gabrieljmj\Prototype\Prototype;

function Person() {
    return Prototype::getInstance()->prot('Person');
}

To set methods, you need set as global the variable $self and use like you use $this on OOP:

Person()->on = 1;

Person()->setName = function ($name) {
    global $self;
    $self->name = $name;
};

Person()->getName = function() {
    global $self;
    return $self->name;
};

So you can instance this and execute the methods and get the propeties:

$user1 = new Person();
$user1->setName('Hansel');

$user2 = new Person();
$user2->setName('Gretel');

echo $user1->getName() . ' and ' . $user2->getName(); //Hansel and Gretel

##2. Extending The extending is almost the same of JavaScript. Just set the property $prototype:

function Employee() {
    return Prototype::getInstance()->prot('Employee');
}

Employee()->prototype = new Person();

Employee()->setJobTitle = function ($jobtitle) {
    global $self;
    $self->jobTitle = $jobtitle;
};

Employee()->getJobTitle = function () {
    global $self;
    return $self->jobTitle;
};

$employee = new Employee();
$employee->setName('Jhon');
$employee->setJobTitle('Developer');

echo 'Hi! My name is ' . $employee->getName() . ' and I work as ' . $employee->getJobTitle() . '.';
//Hi! My name is Jhon and I work as Developer.

###2.1. Instanceof

var_dump($person instanceof Employee); //bool(false)
var_dump($employee instanceof Person); //bool(true)