2010-12-10 104 views
0

我一直在爲PHP PHP API創建一個幫助程序類,以避免重複使用大量代碼。該幫手的作品,但唯一的問題是,它非常緩慢..我也想出了爲什麼!當我初始化類時,構造函數被調用兩次!我檢查了我的代碼,其他使用這個類的元素只調用它一次(這是類內部的東西)你能幫我弄清楚問題可能是什麼?謝謝!爲我的應用程序創建幫助程序

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

您必須兩次調用FbHelper類作爲您的doLog功能是在構造函數中,因此重複是在這個類本身中較高的應用程序,而不是。

+0

是的..我也在想這個。有沒有一種方法可以追蹤誰叫FbHelper?謝謝 – PirosB3 2010-12-10 19:51:38

+0

你可以使用debug_print_backtrace()。 – StasM 2010-12-11 03:07:20

+0

謝謝你的回答!我發現問題..使用Codeigniter並加載了兩次這個類!感謝所有幫助! – PirosB3 2010-12-12 23:39:15

相關問題