gabrieljmj / prototype
dev-master
2014-11-01 01:31 UTC
Requires (Dev)
- phpunit/phpunit: 3.7.*
This package is auto-updated.
Last update: 2025-01-16 04:00:45 UTC
README
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)