exos/proto

因为女人们喜欢原型模式使用PHP中的原型模式,模拟作用域和基于原型的对象、克隆等。

dev-master 2013-06-13 00:00 UTC

This package is not auto-updated.

Last update: 2024-09-28 15:17:57 UTC


README

因为女人们喜欢原型模式

在PHP中使用原型模式,模拟作用域和基于原型的对象、克隆等。

<?php

require('lib/autoload.php');

use \Proto\Scope;
use \Proto\ScopeVar;
use \Proto\Object;

作用域

远离PHP命名空间,使用作用域!

<?php

$casa = new Scope();

$casa->puerta = "casa.puerta";

$casa->dormitorio = new Scope();

$casa->dormitorio->tele = "casa.dormitorio.tele";

$casa->dormitorio->cajonera = new Scope(array(
        'cajon1' => new Scope(),
        'cajon2' => new Scope(),
        'cajon3' => new Scope()
));

$casa->dormitorio->cajonera->cajon1->medias = "casa.dormitorio.cajonera.cajon1.medias";

$casa->dormitorio->cajonera->abrir = function ($self, $cajon) {

        if ($cajon < 0 || $cajon > 3) {
                throw new Exception("Only cajon 1,2 and 3");
        }

        $name = 'cajon' . $cajon;

        return $self->$name;

};

$casa->dormitorio->cajonera->cajon1->getTele = function ($self) {
        return $self->tele;
};

$cajon = $casa->dormitorio->cajonera->abrir(1);

print_r($cajon->listMembers());
/*

Array
(
    [medias] => string
    [getTele] => object
)

*/

echo "Aca la tele: " . $cajon->getTele() ."\n";
// Aca la tele: casa.dormitorio.tele

基于类的继承

原型...实例...

<?php

$car = Object::create(function ($self,$model,$color) {
        $self->model = new ScopeVar($model);
        $self->color = new ScopeVar($color);
});


$car->prototype->avanzar = function ($self,$velocidad) {
        echo "avanzo a {$velocidad}km por hora\n";
};

$ka = $car(2005,'azul');

$ka->avanzar(25);
// avanzo a 25km por hora

扩展原型对象

<?php

$timeMachine = $car->extend(array(

        'fechaActual' => time(),

        'viajarPorElTiempo' => function ($self, $fecha) {
                $self->avanzar(80);
                echo "viajando a " . date('d/i/Y \a \l\a\s H:i:s',$fecha) . "\n";
                $self->fechaActual = $fecha;
        }

));

$delorean = $timeMachine(1985,'gris');

$delorean->viajarPorElTiempo( time() + 3600 ); // Una hora en el futuro
//avanzo a 80km por hora
//viajando a 24/57/2012 a las 23:57:11

就像JavaScript一样!

查看这个:http://github.com/exos/PHP-Proto/wiki/From-JavaScript

文档和讨论