SEO対策ならSEO knowledge

TOPプログラムPHP>symfony

symfonyでTwitterを作ってみる 番外編: 静的メソッド内でのクラスからの参照

Twitterを作る際に、ユーザーとfollowingのアーカイブを作る場合で以下のような例で静的メソッドで呼び出す場合、

$user->getFollowings()

の様に呼び出す必要があり、

User::getFollowings($user)

の様には書けない。

/lib/model/User.php

class User extends BaseUser
{
  public function getFollowings()
  {
    // get user id
    $user_id = $this->getId();
    
    // followしているユーザーのIDを取得
    $c = new Criteria();
    $c->add(FollowingPeer::FOLLOWERID, $user_id);
    // following テーブルから follower idと一致するレコードを取得
    $followeds = FollowingPeer::doSelect($c);
    // 取得したfollowingのfollowed id と一致するuser テーブルのレコードを取得
    $c2 = new Criteria();
    foreach($followeds as $followed)
    {
      $c2->add(UserPeer::Id, $followed->getId());
    }
    $followeds = UserPeer::doSelect($c2);
    return $followeds;
  }
}

/lib/model/StatusPeer.php

  public static function getRecentByUserWithFriendsPager($page, $user, $max = 0) // 静的メソッド
  {
        if(!$max)
          $max = sfConfig::get('app_pager_recent_max');
    
        $c = new Criteria();
    $c->addDescendingOrderByColumn(self::CREATED_AT);
    // 自分の発言
    $c->add(StatusPeer::USER_ID, $user->getId() );
    // 他人の発言
    foreach($user->getFollowings() as $followed)
    {
      $c->add(StatusPeer::USER_ID, $followed->getId() );
    }

    // pager
    $pager = new sfPropelPager('Status', $max);
        $pager->setCriteria($c);
        $pager->setPage($page);
        $pager->init();

        return $pager;
  }

静的メソッドで呼び出す場合、上記のように 「::」演算子を使うことはできず、「->」演算子を使って呼び出す必要がある。

 このエントリをはてなブックマークに登録 このエントリをlivedoorクリップに登録 Yahoo!ブックマークに登録 このエントリを del.icio.us に登録 Google Bookmarks に追加
[ 新規 | 編集 | 削除 | 凍結 ]    [ 新着 | 履歴 | ヘルプ ]

この記事に関連する求人

携帯サイト

携帯サイトはこちら

QRコード

http://it.kndb.jp/m

記事を書く

関連エントリ

関連ブックマーク

ページ上部へ