首頁 >後端開發 >php教程 >php如何繼承一個應用?

php如何繼承一個應用?

伊谢尔伦
伊谢尔伦原創
2017-06-30 09:18:561107瀏覽

正在嘗試自己寫一個部落格系統,想當瀏覽文章的時候,有些操作是只有作者才有權限進行,例如刪除,編輯更新文章。 想到了繼承來解決,前面發表過一個會話類,這下簡單多了,透過登入來設定使用者的級別,$session->get_status()的回傳 值如果是0,則表示目前使用者並不是博主,因此不具有刪除,編輯文章的權限。如果是回傳值是1,表示是博主本人。好 

了,廢話少扯。先上程式碼 

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 &#39;<a herf=\&#39;http://foodstory.me/post/&#39;.$postname. 
&#39;.php\&#39; class=\&#39;readmoreLink\&#39;>readmore</a>&#39;; 
} 
} 
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 &#39;<a href=\&#39;http://foodstory.me/post/&#39;.$name. 
&#39;.php?do=update\&#39; id=\&#39;&#39;.$name.&#39;\&#39; >update</a>&#39;; 
} 
public function getDelectA($name) 
{ 
return &#39;<a href=\&#39;
javascript
:delectPOST(&#39;.$name 
.&#39;);\&#39; id=\&#39;delectPOST\&#39; >delect</a>&#39;; 
} 
} 
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類別繼承了這個方法,而後又創造了一些新方法,例如返回刪除,更新連結的方法。
用法範例 

$limitObj = LimitFactory::getLimitObject($session->get_status()); 
echo $limitObj->getReadA(&#39;hi&#39;); 
echo $limitObj->getDelectA(&#39;hah&#39;);

下面談點無關的,剛開始當我沒有在operationUnlimit類別中寫getObject() 靜態方法,發現呼叫
return operationUnlimit::getObject();
返回的卻是超類別的對象,感覺奇怪,我在getObject();方法中用的是self來表示當前的類,沒有指明一定要返回超類的對像啊。當在子
類別中重寫了這個靜態方法才OK。後來查了下google,依稀理解,編譯器在剛開始的時候就把getObject方法和超類別綁定在一起,因此
在子類別中的呼叫依然是傳回超類別物件。

還有,是否覺得字串中那麼多轉義符很難分辨,那麼改用
echo 47a50357de5e4ef51aae22a5342320cfread more5db79b134e9f6b82c0b36e0489ee08ed
Eeeeeee;
這樣清爽了很多。    

#

以上是php如何繼承一個應用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn