怎么使用继承的一个实例
正在嘗試自己寫一個博客系統,想當瀏覽文章的時候,有些操作是只有作者才有權限進行,比如刪除,編輯更新文章。這樣我
想到了繼承來解決,前面發表過一個會話類,這下簡單多了,通過登錄來設置用戶的級別,$session->get_status()的返回
值如果是0,則表明當前用戶并不是博主,因此并不具有刪除,編輯文章的權限。如果是返回值是1,則表明是博主本人。好
了,廢話少扯。先上代碼
?
1 class operationLimit2 // 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 publicfunction __construct() {}
10 // when call the function but does not exist
11 publicstaticfunction getObject()
12 {
13 if( !(self::$limitObject instanceof self))
14 self::$limitObject=new self;
15
16 return self::$limitObject ;
17 }
18 protectedfunction setLimit() {}
19 publicfunction 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 publicstaticfunction getObject()
32 {
33 if( !(self::$limitObject instanceof self))
34 self::$limitObject=new self;
35
36 return self::$limitObject ;
37 }
38 publicfunction getUpdateA($name)
39 {
40 return'<a href=\'http://foodstory.me/post/'.$name.
41 '.php?do=update\' id=\''.$name.'\' >update</a>';
42 }
43 publicfunction getDelectA($name)
44 {
45 return'<a href=\'javascript:delectPOST('.$name
46 .');\' id=\'delectPOST\' >delect</a>';
47 }
48 }
49
50
51 class LimitFactory
52 {
53 publicstaticfunction getLimitObject($userStatus)
54 // $userStatus = $session->get_status();
55 {
56 switch ( $userStatus )
57 {
58 case0:
59 return operationLimit::getObject();
60 case1:
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;
這樣清爽了很多
轉載于:https://www.cnblogs.com/in-loading/archive/2012/01/10/2318352.html
總結
以上是生活随笔為你收集整理的怎么使用继承的一个实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机硬件
- 下一篇: Windows Mobile中实现统计图