J'ai créé une classe d'assistance pour l'API PHP de Facebook afin d'éviter de réutiliser beaucoup de code. L'assistant fonctionne mais le seul problème est que c'est très lent ... et j'ai aussi compris pourquoi! quand j'initialise la classe, le constructeur est appelé deux fois! J'ai vérifié dans mon code et les autres éléments qui utilisent cette classe ne l'appellent qu'une fois (c'est quelque chose à l'intérieur de la classe elle-même) Pourriez-vous s'il vous plaît m'aider à comprendre ce que les problèmes pourraient être? Merci!Création d'un assistant pour mon application
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; }
}
}
Oui .. Je pense à ça aussi. Y at-il un moyen que je peux tracer qui appelle FbHelper ?? Merci – PirosB3
vous pouvez utiliser debug_print_backtrace() pour cela. – StasM
Merci pour vos réponses! J'ai trouvé le problème .. utilisait Codeigniter et chargé la classe deux fois! Merci pour toute l'aide! – PirosB3