继承的一个应用

简介:这是继承的一个应用的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=343923' scrolling='no'>

正在尝试自己写一个博客系统,想当浏览文章的时候,有些操作是只有作者才有权限进行,比如删除,编辑更新文章。这样我

想到了继承来解决,前面发表过一个会话类,这下简单多了,通过登录来设置用户的级别,$session->get_status()的返回

值如果是0,则表明当前用户并不是博主,因此并不具有删除,编辑文章的权限。如果是返回值是1,则表明是博主本人。好

了,废话少扯。先上代码

 1 class operationLimit  
2 // operating limit. When no user login or is not this user
3 {
4 /* for limit the user operat at post.
5 * @author:xiaoai 8.12 2011
6 */
7 static $limitObject;
8
9 public function __construct() {}
10 // when call the function but does not exist
11 public static function getObject()
12 {
13 if( !(self::$limitObject instanceof self))
14 self::$limitObject = new self;
15
16 return self::$limitObject ;
17 }
18 protected function setLimit() {}
19 public function getReadA($postName)
20 {
21 return '<a herf=\'http://foodstory.me/post/'.$postname.
22 '.php\' class=\'readmoreLink\'>readmore</a>';
23
24 }
25 }
26
27
28 class operationUnlimit extends operationLimit
29 // when is this user
30 {
31 public static function getObject()
32 {
33 if( !(self::$limitObject instanceof self))
34 self::$limitObject = new self;
35
36 return self::$limitObject ;
37 }
38 public function getUpdateA($name)
39 {
40 return '<a href=\'http://foodstory.me/post/'.$name.
41 '.php?do=update\' id=\''.$name.'\' >update</a>';
42 }
43 public function getDelectA($name)
44 {
45 return '<a href=\'javascript:delectPOST('.$name
46 .');\' id=\'delectPOST\' >delect</a>';
47 }
48 }
49
50
51 class LimitFactory
52 {
53 public static function getLimitObject($userStatus)
54 // $userStatus = $session->get_status();
55 {
56 switch ( $userStatus )
57 {
58 case 0:
59 return operationLimit::getObject();
60 case 1:
61 return operationUnlimit::getObject();
62 default:
63 return limit::getObject();
64 }
65 }
66 }

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;

这样清爽了很多

爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

http://biancheng.dnbcw.info/php/343923.html pageNo:5
原文地址:https://www.cnblogs.com/ooooo/p/2241957.html