php继承的一个应用


Posted in PHP onSeptember 06, 2011

这样我
想到了继承来解决,前面发表过一个会话类,这下简单多了,通过登录来设置用户的级别,$session->get_status()的返回
值如果是0,则表明当前用户并不是博主,因此并不具有删除,编辑文章的权限。如果是返回值是1,则表明是博主本人。好
了,废话少扯。先上代码

class operationLimit 
// operating limit. When no user login or is not this user 
{ 
/* for limit the user operat at post. 
* @author:xiaoai 8.12 2011 
*/ 
static $limitObject; 
public function __construct() {} 
// when call the function but does not exist 
public static function getObject() 
{ 
if( !(self::$limitObject instanceof self)) 
self::$limitObject = new self; 
return self::$limitObject ; 
} 
protected function setLimit() {} 
public function getReadA($postName) 
{ 
return '<a herf=\'http://foodstory.me/post/'.$postname. 
'.php\' class=\'readmoreLink\'>readmore</a>'; 
} 
} 
class operationUnlimit extends operationLimit 
// when is this user 
{ 
public static function getObject() 
{ 
if( !(self::$limitObject instanceof self)) 
self::$limitObject = new self; 
return self::$limitObject ; 
} 
public function getUpdateA($name) 
{ 
return '<a href=\'http://foodstory.me/post/'.$name. 
'.php?do=update\' id=\''.$name.'\' >update</a>'; 
} 
public function getDelectA($name) 
{ 
return '<a href=\'javascript:delectPOST('.$name 
.');\' id=\'delectPOST\' >delect</a>'; 
} 
} 
class LimitFactory 
{ 
public static function getLimitObject($userStatus) 
// $userStatus = $session->get_status(); 
{ 
switch ( $userStatus ) 
{ 
case 0: 
return operationLimit::getObject(); 
case 1: 
return operationUnlimit::getObject(); 
default: 
return limit::getObject(); 
} 
} 
}

LimitFactory是一个工厂类,兼静态类。 即不需要构造对象,它的职责只是根据传入的用户权限值,来判断该返回 operationLimit类 还是 operationUnlimit类 的实例。
有一些共用的操作,比如阅读更多,operationUnlimit类继承了这个方法,而后又创造了一些新方法,比如返回删除,更新链接的方法。
用法示例
$limitObj = LimitFactory::getLimitObject($session->get_status()); 
echo $limitObj->getReadA('hi'); 
echo $limitObj->getDelectA('hah');

下面谈点无关的,刚开始当我没有在operationUnlimit类中写getObject() 静态方法,发现调用
return operationUnlimit::getObject();
返回的却是超类的对象,感觉奇怪,我在getObject();方法中用的是self来表示当前的类,没有指明一定要返回超类的对象啊。当在子
类中重写了这个静态方法才OK。后来查了下google,依稀理解,编译器在刚开始的时候就把getObject方法和超类绑定在一起,因此
在子类中的调用依然是返回超类对象。

还有,是否觉得字符串中那么多转义符很难分辨,那么改用
echo <<<Eeeeeee
<a href='foodstory.me/post/{$name}.php' >read more</a>
Eeeeeee;
这样清爽了很多

PHP 相关文章推荐
用PHP调用数据库的存贮过程!
Oct 09 PHP
支持php4、php5的mysql数据库操作类
Jan 10 PHP
php 更新数据库中断的解决方法
Jun 05 PHP
PHP Class&amp;Object -- 解析PHP实现二叉树
Jun 25 PHP
ThinkPHP实现将本地文件打包成zip下载
Jun 26 PHP
详解PHP导入导出CSV文件
Nov 03 PHP
PHP判断是否连接上网络的方法
Jul 01 PHP
ThinkPHP中调用PHPExcel的实现代码
Apr 08 PHP
详解yii2使用多个数据库的案例
Jun 16 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
php提高脚本性能的4个技巧
Aug 18 PHP
php 抽象类的简单应用
Sep 06 #PHP
PHP中PDO基础教程 入门级
Sep 04 #PHP
PHP中PDO的错误处理
Sep 04 #PHP
php中将网址转换为超链接的函数
Sep 02 #PHP
php ajax 静态分页过程形式
Sep 02 #PHP
php中防止伪造跨站请求的小招式
Sep 02 #PHP
10个实用的PHP代码片段
Sep 02 #PHP
You might like
以文本方式上传二进制文件的PHP程序
2006/10/09 PHP
一个好用的分页函数
2006/11/16 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
围观tangram js库
2010/12/28 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
javascript属性访问表达式用法分析
2015/04/25 Javascript
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
AngularJS使用angular-formly进行表单验证
2015/12/27 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
2016/01/21 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
JavaScrip数组删除特定元素的几种方法总结
2017/09/06 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
Vue实现多标签选择器
2019/11/28 Javascript
JavaScript监听一个DOM元素大小变化
2020/04/26 Javascript
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
Pyramid Mako模板引入helper对象的步骤方法
2013/11/27 Python
Python中使用SAX解析xml实例
2014/11/21 Python
Python中的浮点数原理与运算分析
2017/10/12 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
英国婴儿和儿童服装网站:Vertbaudet
2018/04/02 全球购物
高二英语教学反思
2014/01/19 职场文书
清明节扫墓活动方案
2014/03/02 职场文书
2014年乡镇安全生产工作总结
2014/12/02 职场文书
高中班主任评语
2014/12/30 职场文书
员工手册董事长致辞
2015/07/29 职场文书
分布式Redis Cluster集群搭建与Redis基本用法
2022/02/24 Redis
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫