找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1575|回复: 0
打印 上一主题 下一主题

php继承的一个应用

[复制链接]

2560

主题

2560

帖子

7622

积分

论坛元老

Rank: 8Rank: 8

积分
7622
跳转到指定楼层
楼主
发表于 2018-2-14 08:32:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            这样我
想到了继承来解决,前面发表过一个会话类,这下简单多了,通过登录来设置用户的级别,$session->get_status()的返回
值如果是0,则表明当前用户并不是博主,因此并不具有删除,编辑文章的权限。如果是返回值是1,则表明是博主本人。好
了,废话少扯。先上代码
[U]复制代码[/U] 代码如下:
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 'readmore';
}
}
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 '[url=]'.php?do=update\' id=\''.$name.'\' >update[/url]';
}
public function getDelectA($name)
{
return '[url=].');\' id=\'delectPOST\' >delect[/url]';
}
}
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类继承了这个方法,而后又创造了一些新方法,比如返回删除,更新链接的方法。
用法示例
[U]复制代码[/U] 代码如下:
$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
您可能感兴趣的文章:
  • php面向对象全攻略 (七) 继承性
  • PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
  • php类中private属性继承问题分析
  • PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
  • PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
  • PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
  • PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
  • PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
  • php构造函数的继承方法
  • php类的扩展和继承用法实例
  • php类的定义与继承用法实例
  • PHP类的封装与继承详解
  • PHP面向对象程序设计OOP继承用法入门示例
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端