gabrieljmj/prototype

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

This package is auto-updated.

Last update: 2024-09-16 03:21:23 UTC


README

Total Downloads Latest Unstable Version License Scrutinizer Code Quality

此库允许您创建原型,几乎与JavaScript中的方式相同。

## 测试 对不起,我知道这是错误的,但我在库之后留下了测试。为什么?因为我写测试时遇到了问题。

## 1. 创建对象 对象是通过函数创建的。这些函数将返回一个对象。所有对象都注册在名为 \Gabrieljmj\Prototype\Prototype 的类中。

require_once 'autoload.php';

use Gabrieljmj\Prototype\Prototype;

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

要设置方法,需要将变量 $self 设置为全局,并像在面向对象编程中使用 $this 一样使用它。

Person()->on = 1;

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

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

因此,您可以实例化它并执行方法,然后获取属性

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

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

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

## 2. 扩展 扩展几乎与JavaScript相同。只需设置属性 $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)