Framework DSW项目周记0
欢迎来到这里,地球人,从现在开始,这里将会记录Framework DSW的成长历程…… ;-)
- Framework DSW是什么?
呃……不解释。就给出一个公式:
Framework DSW = ( 纯OOP + 可持久化的应用 + 数据库抽象层 + ORM + MVC + Model/Service运行模式 + 可选的性能提升和缓存 + 跨平台 + 跨Web或者桌面应用开发 + 分布式平台 + 只需要会PHP开发AJAX + 简单的GUI组件使用 + 完全的业务与表现层分离 + 与其他语言的整合(JAVA/ErLang...) + ... ) * PHP5.3以及未来版本的支持!
解释下不解释的原因:各种比赛或者项目答辩解释的烦死我了……
- 为什么会有项目周记?
因为这个框架已经通过了“上海市第三批创新项目”市级项目的立项申请,所以要写周记,因为要检查……-_-|||
- 现在已经做了些什么?
目前为止,已经可以支持让PHP的应用像一直驻留在内存一样,而不是像其他框架(如Zend Framework),用户请求一次就去run一下你的Web应用,而是持续不断的(有点ASP.net的Application对象的意思,但是比他好用,因为不是一个“数组”);已经有了对象的通信机制,类似QT的信号和槽(综合对比其他的实现方式,发现消息循环太麻烦,Java的事件处理机制也是);支持使用枚举类型(不再需要那些大写的常量了~)、委托类型、集合类型还有记录类型(不是恼人的复制引用~)。
- 信号和槽机制代码示例
<?php include 'FrameworkDSW/System.php'; class TTest extends TObject { protected function signalProtected($a, $b, $c) { } //定义一个信号叫Protected public function signalPublic($a, $b) { } //定义一个信号叫Public protected function slotProtected($a, $b, $c) { var_dump($a, $b, $c); } //定义一个槽叫Proteced public function slotPublic($a, $b) { var_dump($a, $b); } //定义一个槽叫Public } class TChild extends TTest { } $obj = new TTest(); $obj2 = new TChild(); TObject::Connect(array ($obj, 'Protected'), array ($obj, 'Protected')); //连接$obj的Proteced信号到$obj的Proteced槽 TObject::Disconnect(array ($obj, 'Protected'), array ($obj, 'Protected')); //断开连接的 TObject::Connect(array ($obj, 'Protected'), array ($obj, 'Protected')); TObject::Connect(array ($obj, 'Protected'), array ($obj, 'Public')); TObject::Dispatch(array ($obj, 'Protected'), array (10, 'text', $obj)); //就是QT的emit,发出信号 TObject::Connect(array ($obj2, 'Public'), array ($obj, 'Protected')); TObject::Dispatch(array ($obj2, 'Public'), array (1, 2, 3)); TObject::Disconnect(array ($obj, 'Protected'), array ($obj, 'Protected')); TObject::Connect(array ($obj, 'Protected'), array ($obj, 'Protected')); TObject::Disconnect(array ($obj, 'Protected'), array ($obj, 'Protected')); TObject::Connect(array ($obj, 'Protected'), array ($obj, 'Protected')); TObject::Connect(array ($obj, 'Protected'), array ($obj, 'Protected')); TObject::Connect(array ($obj, 'Protected'), array ($obj, 'Protected')); TObject::Connect(array ($obj, 'Protected'), array ($obj, 'Protected')); TObject::Connect(array ($obj, 'Protected'), array ($obj, 'Public')); TObject::Dispatch(array ($obj, 'Protected'), array (10, 'text', $obj)); TObject::Connect(array ($obj2, 'Public'), array ($obj, 'Protected')); TObject::Dispatch(array ($obj2, 'Public'), array (1, 2, 3));
- 枚举类型代码示例
<?php require_once '../FrameworkDSW/System.php'; final class TDay extends TEnum { const AM = null, PM = null; } $aDay = TDay::AM(); $bDay = TDay::PM(); if ($aDay instanceof TDay) { echo 'correct', "\n"; } $bDay = TDay::AM(); if ($aDay == $bDay) { echo 'same day section.'; } echo "================================\n"; final class THappyColor extends TEnum { const clRed = 1, clGreen = 1, clBlue = 1; } $mColor1 = THappyColor::clRed(); $mColor2 = THappyColor::clGreen(); if ($mColor1 instanceof THappyColor) { echo 'I am a value in TColor.'; } if ($mColor1 != $mColor2) { echo 'It is not the same.'; } if ($mColor1 == THappyColor::clRed()) { echo 'I am red.'; } echo "The code of red is {$mColor1->Value()}.";
- 委托类型代码示例
<?php interface TNotifyEvent extends IDelegate { /** * * @param TObject $Sender */ public function Invoke($Sender); } $d=new TDelegate(function ($Sender) { echo 'happy!'; }, 'TNotifyEvent'); //当然不是匿名函数也支持的 $d(new TObject());