2017-11-11 8 views
-1

Ich bin sehr neu zu OOP und ich versuche, meinen Konstruktor einmal aufzurufen.PHP Konstruktor einmal aufrufen

Ich habe eine Klasse mit einem Konstruktor, die einen Guzzle-Client haben und es auch auf einer Website anmelden. Jetzt habe ich 2 andere Klassen: Bestellungen und Reihenfolge, die die Klasse mit dem Konstruktor erweitert (ich bin mir nicht sicher, ob ich es richtig mache), ich tat dies, weil ich dachte, dass dies mein Konstruktor einmal aufrufen wird, aber es schafft immer noch mehrere Clients

Mein Code sieht wie folgt aus:

RequestController.php: (Die constructer mit das macht einen guzzle Client)

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(); 

    } 
} 

Wenn mir jemand einen Rat geben könnte ich es wirklich schätzen würde, Danke !!

Antwort

0

Gemäß der Dokumentation: http://php.net/manual/en/language.oop5.decon.php

Hinweis: Parent Konstruktoren werden nicht implizit aufgerufen, wenn das Kind Klasse einen Konstruktor definiert. Um einen übergeordneten Konstruktor auszuführen, ist ein Aufruf von parent :: __ construct() innerhalb des Kindkonstruktors erforderlich. Wenn das Kind keinen Konstruktor definiert, kann es wie eine normale Klassenmethode von der Elternklasse geerbt werden (wenn es nicht als privat deklariert wurde).

Mit anderen Worten, wenn Sie nicht über einen Konstruktor definieren, Ihre Klasse wird es erben übergeordneten Konstruktor

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 

gegen

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

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

$dog = new Dog(); 

//Output will be woof 
Verwandte Themen