这样我
想到了继承来解决,前面发表过一个会话类,这下简单多了,通过登录来设置用户的级别,$session->get_status()的返回
值如果是0,则表明当前用户并不是博主,因此并不具有删除,编辑文章的权限。如果是返回值是1,则表明是博主本人。好
了,废话少扯。先上代码
<BR>class operationLimit <BR>// operating limit. When no user login or is not this user <BR>{ <BR>/* for limit the user operat at post. <BR>* @author:xiaoai 8.12 2011 <BR>*/ <BR>static $limitObject; <BR>public function __construct() {} <BR>// when call the function but does not exist <BR>public static function getObject() <BR>{ <BR>if( !(self::$limitObject instanceof self)) <BR>self::$limitObject = new self; <BR>return self::$limitObject ; <BR>} <BR>protected function setLimit() {} <BR>public function getReadA($postName) <BR>{ <BR>return ''.php\' class=\'readmoreLink\'>readmore'; <BR>} <BR>} <BR>class operationUnlimit extends operationLimit <BR>// when is this user <BR>{ <BR>public static function getObject() <BR>{ <BR>if( !(self::$limitObject instanceof self)) <BR>self::$limitObject = new self; <BR>return self::$limitObject ; <BR>} <BR>public function getUpdateA($name) <BR>{ <BR>return ''.php?do=update\' id=\''.$name.'\' >update'; <BR>} <BR>public function getDelectA($name) <BR>{ <BR>return '.');\' id=\'delectPOST\' >delect'; <BR>} <BR>} <BR>class LimitFactory <BR>{ <BR>public static function getLimitObject($userStatus) <BR>// $userStatus = $session->get_status(); <BR>{ <BR>switch ( $userStatus ) <BR>{ <BR>case 0: <BR>return operationLimit::getObject(); <BR>case 1: <BR>return operationUnlimit::getObject(); <BR>defaul<a>本2文来*源gao($daima.com搞@代@#码(网</a><strong>搞gaodaima代码</strong>t: <BR>return limit::getObject(); <BR>} <BR>} <BR>} <BR>
LimitFactory是一个工厂类,兼静态类。 即不需要构造对象,它的职责只是根据传入的用户权限值,来判断该返回 operationLimit类 还是 operationUnlimit类 的实例。
有一些共用的操作,比如阅读更多,operationUnlimit类继承了这个方法,而后又创造了一些新方法,比如返回删除,更新链接的方法。
用法示例
<BR>$limitObj = LimitFactory::getLimitObject($session->get_status()); <BR>echo $limitObj->getReadA('hi'); <BR>echo $limitObj->getDelectA('hah'); <BR>
下面谈点无关的,刚开始当我没有在operationUnlimit类中写getObject() 静态方法,发现调用
return operationUnlimit::getObject();
返回的却是超类的对象,感觉奇怪,我在getObject();方法中用的是self来表示当前的类,没有指明一定要返回超类的对象啊。当在子
类中重写了这个静态方法才OK。后来查了下google,依稀理解,编译器在刚开始的时候就把getObject方法和超类绑定在一起,因此
在子类中的调用依然是返回超类对象。
还有,是否觉得字符串中那么多转义符很难分辨,那么改用
echo <<<Eeeeeee
read more
Eeeeeee;
这样清爽了很多