手机
当前位置:查字典教程网 >编程开发 >php教程 >初次接触php抽象工厂模式(Elgg)
初次接触php抽象工厂模式(Elgg)
摘要:想实现这样一个功能:开展一个网站邀请活动,然后参与者(owner)将推广的网站地址链接发给好友,好友点击链接后在网站注册成功,owner的邀...

想实现这样一个功能:开展一个网站邀请活动,然后参与者(owner)将推广的网站地址链接发给好友,好友点击链接后在网站注册成功,owner的邀请日志记录条数加1。

活动类 Activity

复制代码 代码如下:

class Activity extends ElggEntity {

private $strategy; //用于保存策略实例

public function __construction($guid) {

...

$this->load($guid); //载入实体

}

public function addLog($data) {

$this->strategy->addLog($data); //实际是 DEFAULTActivityStrategy::addLog($data)

}

public function load ($guid) {

if (parent::load($guid)) { //此过程会将本实例的所有属性从数据库中赋值,因此 $this->strategyName的值已经被赋上了。

if ($this->strategyName != '') {

$this->strategy = AbstractActivityStrategy::getInstance($this->strategyName); //加载策略类

}

return true;

}

return false;

}

}

日志类 ActivityLog

复制代码 代码如下:

class ActivityLog extends ElggEntity {

$private countValue; //邀请记录数

...

}

策略类

说明:ElggEntity:所有实体基类。AbstractActivityStrategy:活动抽象类

)首先创建一个活动:

复制代码 代码如下:

$activity = new Activity();

$activity->name = 'KKND'; //活动名称

$activity->strategyName = 'DEFAULT'; //策略名称

$activity->save(); //将活动类保存至数据库,新添加的属性(比如strategyName)也会保存

)别人收到邀请,点击链接后,owner的邀请记录条目+1

比如邀请网址是 http://www.xinwusi.com/KKND/1234

其中/KKND/是活动名称,1234是owner的guid,假设该活动的guid为 8888,则

$activity = new Activity(8888); //获取活动实体

$activity->addLog($data); //添加邀请记录。$data包括owner的guid,活动的guid,活动名name等。

最后2行代码的过程,就是读取了该活动实体的策略名,并根据这个策略名生成一个策略实体,保存在自己的$stragety属性里,再调用其中的addLog方法增加日志记录。

以后有新活动的时候,直接把活动实例属性的策略名改了,就可以调用对应新策略中的方法了。

复制代码 代码如下:

class DEFAULTActivityStrategy extends AbstractActivityStrategy {

...

public function addLog($data) {

$activityLog = new ActivityLog();

...

$activityLog->save();

$activityLogAmount = new ActivityLogAmount(); //计数类

...

$activityLogAmount->countValue += 1;

$activityLogAmount->save();

}

}

【初次接触php抽象工厂模式(Elgg)】相关文章:

Zend公司全球首推PHP认证

实现“上一页”和“下一页按钮

PHP编程与应用

php中文件上传的安全问题

十天学会php之第一天

用Socket发送电子邮件(利用需要验证的SMTP服务器)

网站当前的在线人数

2.PHP入门

第1次亲密接触PHP5(1)

PHP实现将textarea的值根据回车换行拆分至数组

精品推荐
分类导航