ホームページ > バックエンド開発 > PHPチュートリアル > PHPでアプリケーションを継承するにはどうすればよいですか?

PHPでアプリケーションを継承するにはどうすればよいですか?

伊谢尔伦
リリース: 2023-03-12 06:40:02
オリジナル
1120 人が閲覧しました

自分でブログシステムを書こうとしていますが、記事を閲覧する際、記事の削除、編集、更新など、作成者のみが実行できる操作がいくつかあります。 以前にセッションクラスを公開したので、継承を考えました。ログインしてユーザーレベルを設定します。 $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 はファクトリー クラスであり、

static クラスでもあります。 つまり、オブジェクトを構築する必要はなく、受信したユーザー権限値に基づいて、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 <<続きを読む これはかなり新鮮です。

以上がPHPでアプリケーションを継承するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート