J'essaie d'écrire moi-même un système de blog. Lors de la navigation dans les articles, il y a certaines opérations que seul l'auteur est autorisé à effectuer, comme la suppression, la modification et la mise à jour des articles. J'ai pensé à l'héritage pour résoudre le problème. J'ai déjà publié un cours de session, mais c'est beaucoup plus simple maintenant. Définissez le niveau utilisateur en vous connectant, $session->. ;get_status() Si la valeur renvoyée est 0, cela signifie que l'utilisateur actuel n'est pas le blogueur et n'a donc pas l'autorisation de supprimer ou de modifier des articles. Si la valeur de retour est 1, cela indique qu'il s'agit du blogueur lui-même. D'accord
, arrête de dire des bêtises. Commençons par le 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 est une classe d'usine et aussi une classe statique . Autrement dit, il n'est pas nécessaire de construire un objet. Sa responsabilité est uniquement de déterminer s'il faut renvoyer une instance de la classe opérationLimit ou de la classe opérationUnlimit en fonction de la valeur d'autorisation de l'utilisateur entrant.
Il existe certaines opérations courantes, telles que lire davantage. La classe operationUnlimit hérite de cette méthode, puis crée de nouvelles méthodes, telles que le retour à la suppression et la mise à jour des liens.
Exemple d'utilisation
$limitObj = LimitFactory::getLimitObject($session->get_status()); echo $limitObj->getReadA('hi'); echo $limitObj->getDelectA('hah');
Parlons de quelque chose sans rapport. Au début, quand je n'avais pas écrit la méthode statique getObject() dans la classe operationUnlimit, j'ai trouvé que
return operationUnlimit :: getObject();
Ce qui est renvoyé est un objet de la super classe, ce qui semble étrange. J'utilise self dans la méthode getObject(); doit être restitué. Ce n'est OK que lorsque cette méthode statique est remplacée dans la classe sub-
. Plus tard, j'ai vérifié Google et j'ai vaguement compris que le compilateur liait la méthode getObject à la super classe au début, donc les appels
dans les sous-classes renvoient toujours l'objet superclasse.
De plus, si vous avez du mal à distinguer autant de caractères d'échappement dans la chaîne, utilisez
echo <<
Eeeeeee
C'est beaucoup plus rafraîchissant.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!