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

