PHP挂起循环,永远不会发出请求

时间:2014-11-11 10:40:24

标签: php rest oop

我有一个RESTful API,我需要使用CURL进行交互。我创建了一个包装类,它具有一个带CURL代码的静态函数。

class ApiInvoke
{

    public static function execute($username, $password, $endpoint, $data = array(), $options = array())
    {
       //Rest of the CURL code goes here.....
    }
 }

我创建了一个类,我调用静态APIInvokve类方法来实际执行API调用。下面是上面的ApiInvoke类的消费者类。

需要“api_invoke.php”

 class FlowgearConnect
 {

    //Properties go gere

    public function getResults($model, $workflow, $data)
    {

       $endpoint = $this->getEndpoint($model, $workflow);

       $results = array();

       if(!is_null($endpoint)){

          $results = ApiInvoke::execute('username', 'password', $endpoint, $data array('timeout' => 30));
       }

      return $results;
    }

   //....
 }

然后我有一个ParentClass类,它创建一个FlowgearConnect对象的实例,该实例可用于子类。但是,所有子类都在同一父类中处理。

class ParentClass
{
  private $Flowgear;

  public function init()
  {
     $this->Flowgear = new FlowGearConnect(); //Assuming it has been required somewhere
  }
}

然后我们可能有ChildClassA和ChildClassB,它扩展了ParentClass。通过扩展父类的子类的vartue,他们可以访问$ this-> Flowgear对象的实例,因为下面是使用FlowgearConnect类的方法:

class ChildClassA
{

  public function getResults()
  {
    $results = $this->Flowgear->getResults('child_a', 'latestEvents', array());
   }

 }

ChildClassB具有相同的功能或相当精确,除了它可能负责获取订单列表。

如何在父类中处理这些子类如下所示:

 //A function inside the ParentClass to process ChildClassA and ChildClassB
 public function processModules()
 {
   $modules = $request->getModules(); 

   foreach($modules as $module){

      require_once "modules/' . $module;

      $Module = new $module();
      $Module ->getResults();
   }
}

沿着这些方向的东西是不对的......基本上,扩展类创建了一个由子类使用的类的实例。在某处某处有些东西不在这里,我想这与我不使用辛格尔顿的设备有关。如果我新的如何关注CURL,我可以。

1 个答案:

答案 0 :(得分:0)

由于Rayhan的Http Client类(http://raynux.com/blog/2009/06/13/http-client-class-for-php-development/),我无法想象我永远无法创建一个curl对象的实例。

基本上我想要的是创建一个CURL SINGLETON类,这样我就不会一遍又一遍地创建同一个对象的实例。

以下是我如何实现这一目标的框架:

class Flowgear
{
  static private $_instance;

  //Rest properties here...


  public function __cosntsruct()
  { $this->_token = $this->_username .':'. $this->_passoword; }

  public function execute()
  {
    //Call a class that handles the actual API invocation passing all relevant data
  }

  static public function &getInstance()
  {
    if(self::$_instance == null){
       self::$_instance = new self;
     }

    return self::$_instance;
  }
}

然后我通过调用Flowgear :: getInstance()获得该类的单个实例;