2017-11-11 8 views
-1

私は非常にOOPに新しいと私は一度私のコンストラクタを呼び出すしようとしています。PHPコールコンストラクタ一度

私はGuzzleクライアントを持つコンストラクタを持つクラスを持っており、Webサイトにもログインしています。今私は2つの他のクラスがあります:注文とコンストラクタでクラスを拡張している注文(私はそれを右にやっているかどうかはわかりません)、これは私がこれは私のコンストラクタを一度呼び出すと思ったので、これを行ったが、依然として複数のクライアントを作成する

このような私のコードを見て:

RequestController.php:(それと建設業者ががつがつ食うクライアントを作る)

namespace App\Http\Controllers\Scraper; 

use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use GuzzleHttp\Client; 
use Symfony\Component\DomCrawler\Crawler; 

class RequestController extends Controller 
{ 
    public static $_instance = null; 
    public $client; 

    public function __construct(){ 
     $headers = [ 
      'user-Agent' => '', 
      'Host' => 'orders.example.com', 
      'Origin' => 'https://orders.example.com', 
      'Referer' => 'https://orders.example.com', 
     ]; 

     $form_params = [ 
      'form_params' => [ 
       'username' => env('USERNAME'), 
       'password' => env('PASSWORD'), 
       'login' => 'true', 
       'language' => 'en' 
      ] 
     ]; 

     $this->client = new Client([ 
      'headers' => $headers, 
      'cookies' => new \GuzzleHttp\Cookie\CookieJar 
     ]); 

     echo 'new client has created <br>'; 

     $this->client->post('https://orders.example.com/', $form_params); 

     return $this->client; 
    } 
} 

OrdersController.php:

<?php 

namespace App\Http\Controllers\Scraper; 

use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use App\Http\Controllers\Scraper\RequestController; 
use App\Http\Controllers\Scraper\OrderController; 
use Symfony\Component\DomCrawler\Crawler; 
// use GuzzleHttp\Client; 

class OrdersController extends RequestController 
{ 
    public $order_ids = []; 

    public function orders(){ 
     $response = $this->client->post('https://orders.example.com/orders/orders'); 
     $crawler = new Crawler((String) $response->getBody()); 

     $order_ids = $crawler->filterXPath('//tbody[contains(@class, "wide")]')->extract(['_text', 'rel']); 

     foreach($order_ids as $order_id){ 
      $order = new OrderController(); 
      $order->order(substr($order_id[1], 2)); 
     } 
    } 
} 

OrderController.php:

<?php 

namespace App\Http\Controllers\Scraper; 

use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use App\Http\Controllers\Scraper\RequestController; 

class OrderController extends RequestController 
{ 
    private $_delivery_time, 
      $_order_price, 
      $_delivery_price, 
      $_total_price, 
      $_pay_option; 

    public function order($order_id){ 
     $details = [ 
      'form_params' => [ 
       'id' => $order_id 
      ] 
     ]; 

     $response = $this->client->post('https://orders.example.com/orders/details', $details); 

     // echo (string) $response->getBody(); 

     // die(); 

    } 
} 

誰かが私に私はそれを本当に感謝いくつかのアドバイスを与えることができる場合は、ありがとう!ドキュメントを1として

答えて

0

http://php.net/manual/en/language.oop5.decon.php

注:子クラスがコンストラクタを定義する場合は、親のコンストラクタが暗黙的に呼び出されていません。親コンストラクタを実行するには、子コンストラクタ内でparent :: __ construct()を呼び出す必要があります。子がコンストラクタを定義していない場合は、通常のクラスメソッドのように親クラスから継承することができます(プライベートとして宣言されていない場合)。言い換えれば

、あなたがコンストラクタを定義しない場合は、あなたのクラスは、それを継承するには、親のコンストラクタです

class Animal { 
    public function __construct() { 
     echo "Animal instance"; 
    } 
} 

class Dog extends Animal { 
    public function bark() { 
     echo "woof"; 
    } 
} 

$dog = new Dog(); 

//Output will be Animal instance 

class Animal { 
    public function __construct() { 
     echo "Animal instance"; 
    } 
} 

class Dog extends Animal { 
    public function __construct() { 
     echo "woof"; 
    } 
} 

$dog = new Dog(); 

//Output will be woof 
関連する問題