Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为我的应用程序创建帮助程序_Php_Class_Constructor_Instance - Fatal编程技术网

Php 为我的应用程序创建帮助程序

Php 为我的应用程序创建帮助程序,php,class,constructor,instance,Php,Class,Constructor,Instance,为了避免重用大量代码,我一直在为FacebookPHPAPI创建一个助手类。助手可以工作,但唯一的问题是速度很慢。。我也明白了原因!当我初始化类时,构造函数被调用两次!我检查了我的代码和其他使用这个类的元素只调用了一次(它是类本身内部的东西),你能帮我找出问题所在吗??谢谢 class FbHelper { private $_fb; private $_user; function __construct() { // Initalize Fa

为了避免重用大量代码,我一直在为FacebookPHPAPI创建一个助手类。助手可以工作,但唯一的问题是速度很慢。。我也明白了原因!当我初始化类时,构造函数被调用两次!我检查了我的代码和其他使用这个类的元素只调用了一次(它是类本身内部的东西),你能帮我找出问题所在吗??谢谢

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; }
    }

}
类FbHelper
{
私人$fb;
私人用户$\u;
函数_u构造()
{
//使用密钥初始化Facebook API
$this->_fb=新Facebook(阵列)(
“appId”=>“XXXXXXXXXX”,
“机密”=>“XXXXXXXXXXXXXXXXXXXXXXXXXX”,
“cookie”=>正确,
));
//设置_用户变量
//
$this->doLog(“称为构造函数”);
//
$this->_user=$this->UserSessionAuthorized();
退还$this;
}
函数doLog($text)
{
//打开日志文件_user;}
函数getLoginUrl(){返回$this->_fb->getLoginUrl();}
函数getLogoutUrl(){返回$this->_fb->getLogoutUrl();}
函数UserSessionAuthorized()
{
//检查用户是否已授权,是否已发回用户对象
$user=null;
$session=$this->\u fb->getSession();
如果(!$session)返回false;
试一试{
$uid=$this->\u fb->getUser();
$user=$this->\u fb->api('/me');
如果($user)返回$user;
否则返回false;
}
catch(FacebookApiException$e){return false;}
}
私人功能\u重建选定好友($selected\u friends)
{
//创建数据更少、更有用、恶意更少的新阵列
$new=array();
foreach($选定的朋友作为$朋友)
{
$f=array('id'=>$friend['id'],'name'=>$friend['name']);
$new[]=$f;
}
退回$new;
}
函数getThreOrandomFriends()
{
$friends=$this->\u fb->api('/me/friends');
$n=rand(1,count($friends['data'])-3);
$selected_friends=array_slice($friends['data',$n,3);
返回$this->\u重建选定的朋友($selected\u朋友);
}
函数UserExists($user\u id)
{
尝试{$this->_fb->api('/'.$user_id'/');返回true;}
catch(异常$e){return false;}
}
}

您必须调用
FbHelper
类两次,因为您的
doLog
函数在构造函数中,因此重复在应用程序中较高的位置,而不是在该类本身中。

是。。我也在考虑这个问题。有没有办法追踪谁打电话给FbHelper??谢谢您可以使用debug\u print\u backtrace()完成此操作。谢谢您的回答!我发现了问题。。使用Codeigniter并加载了两次类!谢谢你的帮助!