php繼承的一個(gè)應(yīng)用
更新時(shí)間:2011年09月06日 23:33:15 作者:
正在嘗試自己寫(xiě)一個(gè)博客系統(tǒng),想當(dāng)瀏覽文章的時(shí)候,有些操作是只有作者才有權(quán)限進(jìn)行,比如刪除,編輯更新文章。
這樣我
想到了繼承來(lái)解決,前面發(fā)表過(guò)一個(gè)會(huì)話(huà)類(lèi),這下簡(jiǎn)單多了,通過(guò)登錄來(lái)設(shè)置用戶(hù)的級(jí)別,$session->get_status()的返回
值如果是0,則表明當(dāng)前用戶(hù)并不是博主,因此并不具有刪除,編輯文章的權(quán)限。如果是返回值是1,則表明是博主本人。好
了,廢話(huà)少扯。先上代碼
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是一個(gè)工廠類(lèi),兼靜態(tài)類(lèi)。 即不需要構(gòu)造對(duì)象,它的職責(zé)只是根據(jù)傳入的用戶(hù)權(quán)限值,來(lái)判斷該返回 operationLimit類(lèi) 還是 operationUnlimit類(lèi) 的實(shí)例。
有一些共用的操作,比如閱讀更多,operationUnlimit類(lèi)繼承了這個(gè)方法,而后又創(chuàng)造了一些新方法,比如返回刪除,更新鏈接的方法。
用法示例
$limitObj = LimitFactory::getLimitObject($session->get_status());
echo $limitObj->getReadA('hi');
echo $limitObj->getDelectA('hah');
下面談點(diǎn)無(wú)關(guān)的,剛開(kāi)始當(dāng)我沒(méi)有在operationUnlimit類(lèi)中寫(xiě)getObject() 靜態(tài)方法,發(fā)現(xiàn)調(diào)用
return operationUnlimit::getObject();
返回的卻是超類(lèi)的對(duì)象,感覺(jué)奇怪,我在getObject();方法中用的是self來(lái)表示當(dāng)前的類(lèi),沒(méi)有指明一定要返回超類(lèi)的對(duì)象啊。當(dāng)在子
類(lèi)中重寫(xiě)了這個(gè)靜態(tài)方法才OK。后來(lái)查了下google,依稀理解,編譯器在剛開(kāi)始的時(shí)候就把getObject方法和超類(lèi)綁定在一起,因此
在子類(lèi)中的調(diào)用依然是返回超類(lèi)對(duì)象。
還有,是否覺(jué)得字符串中那么多轉(zhuǎn)義符很難分辨,那么改用
echo <<<Eeeeeee
<a href='foodstory.me/post/{$name}.php' >read more</a>
Eeeeeee;
這樣清爽了很多
想到了繼承來(lái)解決,前面發(fā)表過(guò)一個(gè)會(huì)話(huà)類(lèi),這下簡(jiǎn)單多了,通過(guò)登錄來(lái)設(shè)置用戶(hù)的級(jí)別,$session->get_status()的返回
值如果是0,則表明當(dāng)前用戶(hù)并不是博主,因此并不具有刪除,編輯文章的權(quán)限。如果是返回值是1,則表明是博主本人。好
了,廢話(huà)少扯。先上代碼
復(fù)制代碼 代碼如下:
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是一個(gè)工廠類(lèi),兼靜態(tài)類(lèi)。 即不需要構(gòu)造對(duì)象,它的職責(zé)只是根據(jù)傳入的用戶(hù)權(quán)限值,來(lái)判斷該返回 operationLimit類(lèi) 還是 operationUnlimit類(lèi) 的實(shí)例。
有一些共用的操作,比如閱讀更多,operationUnlimit類(lèi)繼承了這個(gè)方法,而后又創(chuàng)造了一些新方法,比如返回刪除,更新鏈接的方法。
用法示例
復(fù)制代碼 代碼如下:
$limitObj = LimitFactory::getLimitObject($session->get_status());
echo $limitObj->getReadA('hi');
echo $limitObj->getDelectA('hah');
下面談點(diǎn)無(wú)關(guān)的,剛開(kāi)始當(dāng)我沒(méi)有在operationUnlimit類(lèi)中寫(xiě)getObject() 靜態(tài)方法,發(fā)現(xiàn)調(diào)用
return operationUnlimit::getObject();
返回的卻是超類(lèi)的對(duì)象,感覺(jué)奇怪,我在getObject();方法中用的是self來(lái)表示當(dāng)前的類(lèi),沒(méi)有指明一定要返回超類(lèi)的對(duì)象啊。當(dāng)在子
類(lèi)中重寫(xiě)了這個(gè)靜態(tài)方法才OK。后來(lái)查了下google,依稀理解,編譯器在剛開(kāi)始的時(shí)候就把getObject方法和超類(lèi)綁定在一起,因此
在子類(lèi)中的調(diào)用依然是返回超類(lèi)對(duì)象。
還有,是否覺(jué)得字符串中那么多轉(zhuǎn)義符很難分辨,那么改用
echo <<<Eeeeeee
<a href='foodstory.me/post/{$name}.php' >read more</a>
Eeeeeee;
這樣清爽了很多
您可能感興趣的文章:
- PHP面向?qū)ο笕筇攸c(diǎn)學(xué)習(xí)(充分理解抽象、封裝、繼承、多態(tài))
- php類(lèi)中private屬性繼承問(wèn)題分析
- php構(gòu)造函數(shù)的繼承方法
- php面向?qū)ο笕ヂ?(七) 繼承性
- PHP類(lèi)的封裝與繼承詳解
- php類(lèi)的擴(kuò)展和繼承用法實(shí)例
- php類(lèi)的定義與繼承用法實(shí)例
- PHP 面向?qū)ο蟪绦蛟O(shè)計(jì)(oop)學(xué)習(xí)筆記 (五) - PHP 命名空間
- PHP 面向?qū)ο蟪绦蛟O(shè)計(jì)(oop)學(xué)習(xí)筆記 (四) - 異常處理類(lèi)Exception
- PHP 面向?qū)ο蟪绦蛟O(shè)計(jì)(oop)學(xué)習(xí)筆記(三) - 單例模式和工廠模式
- PHP 面向?qū)ο蟪绦蛟O(shè)計(jì)(oop)學(xué)習(xí)筆記 (二) - 靜態(tài)變量的屬性和方法及延遲綁定
- PHP 面向?qū)ο蟪绦蛟O(shè)計(jì)(oop)學(xué)習(xí)筆記(一) - 抽象類(lèi)、對(duì)象接口、instanceof 和契約式編程
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)OOP繼承用法入門(mén)示例
相關(guān)文章
php實(shí)現(xiàn)的中秋博餅游戲之繪制骰子圖案功能示例
這篇文章主要介紹了php實(shí)現(xiàn)的中秋博餅游戲之繪制骰子圖案功能,涉及php圖形繪制中位置、顏色、形狀等相關(guān)屬性設(shè)置操作技巧,需要的朋友可以參考下2017-11-11
淺談PHP正則表達(dá)式中修飾符/i, /is, /s, /isU
我們?cè)赑HP正則表達(dá)式的學(xué)習(xí)中會(huì)碰到修飾符,那么關(guān)于PHP正則表達(dá)式修飾符的理解以及使用我們需要注意什么呢?那么我們來(lái)具體的看看它的概念以及相關(guān)內(nèi)容。2014-10-10
PHP 配置文件中open_basedir選項(xiàng)作用
open_basedir: 將用戶(hù)可操作的文件限制在某目錄下2009-07-07
PHP實(shí)現(xiàn)的常規(guī)正則驗(yàn)證helper公共類(lèi)完整實(shí)例
這篇文章主要介紹了PHP實(shí)現(xiàn)的常規(guī)正則驗(yàn)證helper公共類(lèi),結(jié)合完整實(shí)例形式分析了php針對(duì)常規(guī)的電話(huà)、手機(jī)、郵箱、賬號(hào)等進(jìn)行正則驗(yàn)證的操作技巧,需要的朋友可以參考下2017-04-04
使用php實(shí)現(xiàn)快錢(qián)支付功能(涉及到接口)
本篇文章是對(duì)使用php實(shí)現(xiàn)快錢(qián)支付功能的代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07
學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)訪問(wèn)者模式(Visitor)
這篇文章主要介紹了php設(shè)計(jì)模式中的訪問(wèn)者模式,使用php實(shí)現(xiàn)訪問(wèn)者模式,感興趣的小伙伴們可以參考一下2015-12-12
php $_SERVER當(dāng)前完整url的寫(xiě)法
php當(dāng)前完整url的寫(xiě)法,需要的朋友可以參考下。2009-11-11

