欢迎来到这里,地球人,从现在开始,这里将会记录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());