php 抽象类的简单应用

  All right, 父类postParent定义为抽象,规定子类必须重新实现 buildHTML()方法,这个方法并没有花括号,如果有不管有没有内容都会报错的。

  现在越看越觉得这代码完全没必要用抽象类,用继承也都很鸡肋,好吧,也没啥好说的好像。。。。。

  另外我把mysql 分开在外面了,所以调用方法很麻烦

  1,先实例化 readArticle

  2,mysql查询,参数来自 readArticle::getSQL();

  3,返回mysql结果资源给 readArticle::fetchResult( $result );

  4,readArticle::buildHTML(); 返回HTML

  如果是列表循环输出的话,把 3 和 4 重复调用就可以了

  

复制代码 代码如下:

  abstract class postParent

  {

  protected $querySQL;

  public $fetchResult;

  public $timeAgo; // eg : 2 days ago

  abstract protected function buildHTML();

  public function getSQL()

  {

  return $this->querySQL;

  }

  public function fetchResult( $result )

  {

  $this->fetchResult = mysql_fetch_assoc( $result );

  }

  public function error()

  {}

  }

  class readArticle extends postParent

  {

  public function __construct( $id )

  {

  $this->querySQL =<<<eof

  SELECT title, author, text, unixtime FROM post

  WHERE id = $id ORDER BY unixtime DESC;

  eof;

  }

  public function buildHTML()

  {

  return <<<eof

  <div id="post-text">

  <div class="post-title-div">

  <h4>

  <a href="http://foodstory.me/post.php?id={$this->fetchResult['id']}"

  class="post-title-a" > {$this->fetchResult['title']}

  </a>

  </h4>

  </div>

  <div class="post-info-div">

  <span class='post-info-author'>{$this->fetchResult['author']}</span> at

  <time class='post-info-time'>{$this->timeAgo}</time>

  </div>

  <div class="post-p-div">

  {$this->fetchResult['text']}

  </div>

  </div>

  eof;

  }

  }