exos / proto
因为女人们喜欢原型模式使用PHP中的原型模式,模拟作用域和基于原型的对象、克隆等。
dev-master
2013-06-13 00:00 UTC
Requires
- php: >=5.3
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
文档和讨论
- 文档: http://github.com/exos/PHP-Proto/wiki
- 帮助和讨论的邮件列表: http://groups.google.com/group/php-proto
- 有关问题、错误和想法: http://github.com/exos/PHP-Proto/issues