class に public な変数(プロパティ)を定義することは、オブジェクト指
向のカプセル化の観点から論外ですが、private なプロパティを定義して、
get_プロパティ名(), set_プロパティ名() とかを作るのもイケてなかった
のですね。(薄々気づいてはいましたが…。)
PHP には __get() と __set() という特殊メソッドがあります。
例えば
$myclass = new MyClass;
$myclass->hoge = 1;
の場合、定義していれば MyClass::__set() が呼ばれます。
以下のように private なプロパティを定義し、__get(), __set() を介し
てアクセス制御すると良いでしょう。このプロパティは読み取り専用、こ
のプロパティは両方大丈夫とか。
class Post {
  private $title;
  private $content;
  private $author;
  private $comments;
  private $_getters = array('title', 'content', 'author', 'comments');
  private $_setters = array('title', 'content', 'author');
  public function __get($property) {
    if(in_array($property, $this->_getters)) {
      return $this->$property;
    }
    if(in_array($property, $this->_setters)) {
      throw new Exception('Property "' . $property . '" is write-only.');
    }
    throw new Exception('Property "' . $property . '" is not accessible.');
  }
  public function __set($property, $value) {
    if(in_array($property, $this->_setters)) {
      $this->$property = $value;
      return;
    }
    if(in_array($property, $this->_getters)) {
      throw new Exception('Property "' . $property . '" is read-only.');
    }
    throw new Exception('Property "' . $property . '" is not accessible.');
  }
}
$post = new Post;
$post->title = "タイトルだよ〜ん\n";
//=> エラーが発生することなく、代入できる。
print_r($post->title);
//=> エラーが発生することなく、「タイトルだよ〜ん」と表示される。
$post->comments = "コメントだよ〜ん\n";
//=> エラーが発生することなく、代入できる。
print_r($post->comments);
//=> 例外が発生する。PHP Fatal error:  Uncaught exception 'Exception' with message 'Property "comments" is read-only.'
プロパティによっては、加工してから get/set したいものもあるかもしれ
ません。その場合も __get(), __set() を拡張すれば良いです。PHP マニュ
アルのオーバーロードの項
が参考になると思います。ただし、今回参考に
したコード
は間違っているので、注意が必要です。。。
PHP 5.4 からは trait が使えるので、trait 化して自作の各 class に組
み込むと良いと思います(まだ環境を作ってないので、未確認..)。