Создание помощника для моего приложения - PullRequest
0 голосов
/ 10 декабря 2010

Я создавал вспомогательный класс для API PHP Facebook, чтобы избежать повторного использования большого количества кода. Помощник работает, но единственная проблема в том, что он очень медленный .. и я также понял, почему! когда я инициализирую класс, конструктор вызывается дважды! Я проверил свой код, и другие элементы, которые используют этот класс, вызывают его только один раз (это что-то внутри самого класса) Спасибо!

class FbHelper
{
    private $_fb;
    private $_user;

    function __construct()
    {
        // Initalize Facebook API with keys

        $this->_fb = new Facebook(array(
          'appId'  => 'xxxxxxxxxxx',
          'secret' => 'xxxxxxxxxxxxxxxxxxxxxx',
          'cookie' => true,
        ));

        // set the _user variable
        //
        $this->doLog("Called Constructor");
        //
        $this->_user = $this->UserSessionAuthorized();

        return $this;
    }

    function doLog($text)
    {
      // open log file  <----- THIS GETS CALLED TWICE EVERY TIME I INITIALIZE THE CLASS!!
      $filename = "form_ipn.log";
      $fh = fopen($filename, "a") or die("Could not open log file.");
      fwrite($fh, date("d-m-Y, H:i")." - $text\n") or die("Could not write file!");
      fclose($fh);
    }


    function getUser() { return $this->_user; }

    function getLoginUrl() { return $this->_fb->getLoginUrl(); }
    function getLogoutUrl() { return $this->_fb->getLogoutUrl(); }

    function UserSessionAuthorized()
    {
        // Checks if user is authorized, if is sends back user object

        $user = null;

        $session = $this->_fb->getSession();
        if (!$session) return false;
        try {
            $uid = $this->_fb->getUser();
            $user = $this->_fb->api('/me');
            if ($user) return $user;
            else return false;
            }
        catch (FacebookApiException $e) { return false; }
    }

    private function _rebuildSelectedFriends($selected_friends)
    {
        // Creates a new array with less data, more useful and less malicious

        $new = array();
        foreach ($selected_friends as $friend)
        {
            $f = array('id' => $friend['id'], 'name' => $friend['name']);
            $new[] = $f;
        }

        return $new;
    }

    function GetThreeRandomFriends()
    {
        $friends = $this->_fb->api('/me/friends');
        $n = rand(1, count($friends['data']) - 3);

        $selected_friends = array_slice($friends['data'], $n, 3);
        return $this->_rebuildSelectedFriends($selected_friends);
    }

    function UserExists($user_id)
    {
        try { $this->_fb->api('/' . $user_id . '/'); return true; }
        catch (Exception $e) { return false; }
    }

}

1 Ответ

1 голос
/ 10 декабря 2010

Вы должны вызывать класс FbHelper дважды, так как ваша функция doLog находится в конструкторе, поэтому повторение где-то выше в вашем приложении, а не в этом классе.

...