php继承的一个应用

  这样我

  想到了继承来解决,前面发表过一个会话类,这下简单多了,通过登录来设置用户的级别,$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 '<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是一个工厂类,兼静态类。 即不需要构造对象,它的职责只是根据传入的用户权限值,来判断该返回 operationLimit类 还是 operationUnlimit类 的实例。

  有一些共用的操作,比如阅读更多,operationUnlimit类继承了这个方法,而后又创造了一些新方法,比如返回删除,更新链接的方法。

  用法示例

  

复制代码 代码如下:

  $limitObj = LimitFactory::getLimitObject($session->get_status());

  echo $limitObj->getReadA('hi');

  echo $limitObj->getDelectA('hah');

  下面谈点无关的,刚开始当我没有在operationUnlimit类中写getObject() 静态方法,发现调用

  return operationUnlimit::getObject();

  返回的却是超类的对象,感觉奇怪,我在getObject();方法中用的是self来表示当前的类,没有指明一定要返回超类的对象啊。当在子

  类中重写了这个静态方法才OK。后来查了下google,依稀理解,编译器在刚开始的时候就把getObject方法和超类绑定在一起,因此

  在子类中的调用依然是返回超类对象。

  还有,是否觉得字符串中那么多转义符很难分辨,那么改用

  echo <<<Eeeeeee

  <a href='foodstory.me/post/{$name}.php' >read more</a>

  Eeeeeee;

  这样清爽了很多