Ich versuche, selbst ein Blog-System zu schreiben. Beim Durchsuchen von Artikeln gibt es einige Vorgänge, zu deren Ausführung nur der Autor berechtigt ist, z. B. das Löschen, Bearbeiten und Aktualisieren von Artikeln. Ich habe über Vererbung nachgedacht, um das Problem zu lösen, aber jetzt ist es viel einfacher, die Benutzerebene festzulegen, $Sitzung-> ;get_status() Wenn der zurückgegebene -Wert 0 ist, bedeutet dies, dass der aktuelle Benutzer nicht der Blogger ist und daher nicht über die Berechtigung zum Löschen oder Bearbeiten von Artikeln verfügt. Wenn der Rückgabewert 1 ist, bedeutet dies, dass es sich um den Blogger selbst handelt. Okay
, hör auf, Unsinn zu reden. Beginnen wir mit dem Code
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 ist eine Factory-Klasse und auch eine statische-Klasse. Das heißt, es ist nicht erforderlich, ein Objekt zu erstellen. Seine Aufgabe besteht lediglich darin, anhand des eingehenden Benutzerberechtigungswerts zu bestimmen, ob eine Instanz der OperationLimit-Klasse oder der OperationUnlimit-Klasse zurückgegeben werden soll.
Es gibt einige allgemeine Vorgänge, z. B. das Lesen weiterer Methoden. Die OperationUnlimit-Klasse erbt diese Methode und erstellt dann einige neue Methoden, z. B. das Zurückkehren zum Löschen und Aktualisieren von Links.
Anwendungsbeispiel
$limitObj = LimitFactory::getLimitObject($session->get_status()); echo $limitObj->getReadA('hi'); echo $limitObj->getDelectA('hah');
Lassen Sie uns über etwas sprechen, das nichts damit zu tun hat. Als ich zunächst nicht die statische Methode getObject() in der Klasse operationUnlimit schrieb, stellte ich fest, dass
operationUnlimit zurückgegeben wurde: getObject();
Was zurückgegeben wird, ist ein Objekt der Superklasse, was sich seltsam anfühlt. Ich habe self in der Methode getObject(); verwendet und nicht angegeben, dass das Objekt der Superklasse sein muss zurückgegeben werden. Es ist nur in Ordnung, wenn diese statische Methode in der Unterklasse
überschrieben wird. Später habe ich bei Google nachgesehen und vage verstanden, dass der Compiler die getObject-Methode zu Beginn an die Superklasse gebunden hat, sodass Aufrufe von
in einer Unterklasse immer noch das Superklassenobjekt zurückgeben.
Wenn Sie außerdem Schwierigkeiten haben, so viele Escape-Zeichen in der Zeichenfolge zu unterscheiden, verwenden Sie
echo <<
Eeeeee; Das ist viel erfrischender.
Das obige ist der detaillierte Inhalt vonWie erbe ich eine Anwendung in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!