Vinnaren i pepparkakshustävlingen!
2014-04-19, 00:37
  #1
Medlem
Just nu får jag http error-koden 401 från API:n jag arbetar mot och det har med att göra att API-nyckeln inte följer med i Client som jag extendar i Person. Så hur gör jag så all data följer med vid en extend?

Kod:
$client = new Client("53fsdt56gdfg");

$person = (new Person(1))->overview(); 

Client class
Kod:
class Client {
  protected 
$_api_key;
  public function 
Client($_api_key) {
    
$this->_api_key $_api_key;
  }
  protected function 
sendRequest($method)
  {
     
// do request
     // return json
  
}


Person class
Kod:
class Person extends Client {
  private 
$id;
  public function 
Person($id) {
    
$this->id = (int) $id;
  }
  public function 
overview() {
    return 
$this->sendRequest("overview/{$this->id}");
  }

Citera
2014-04-19, 01:50
  #2
Medlem
Tvillingens avatar
Det du har gjort nu är att skapa två separata objekt som är helt skilda från varandra, $client och $person. Ett alternativ är att skicka med objektet Client till Person eller att skapa ett nytt objekt från Person, så vid båda dessa alternativ behöver du inte ha något arv. Tredje alternativet är att anropa Clients constructor från Person. Då kan du göra så här.

Kod:
public function Person($id$api) { 
    
$this->id = (int) $id;
    
parent::__construct($api);

Citera
2014-04-19, 02:42
  #3
Medlem
Citat:
Ursprungligen postat av Tvillingen
Det du har gjort nu är att skapa två separata objekt som är helt skilda från varandra, $client och $person. Ett alternativ är att skicka med objektet Client till Person eller att skapa ett nytt objekt från Person, så vid båda dessa alternativ behöver du inte ha något arv. Tredje alternativet är att anropa Clients constructor från Person. Då kan du göra så här.

Kod:
public function Person($id$api) { 
    
$this->id = (int) $id;
    
parent::__construct($api);

Vad skulle du säga är best practice för sånt här?
Kanske ett single tone-alternativ?
Citera
2014-04-22, 08:54
  #4
Medlem
Jag skulle ha gått på Tvillingens första alternativa lösning; ge Person ett Client-objekt:
Kod:
class Client {
/* Clients implementation */
}

class 
Person {
  private 
$_client;
  private 
$_id;
  public function 
Person(Client $client$id) {
     
$this->_client $client;
     
$this->_id $id;
  }
  public function 
overview() {
     
$data $this->_client->sendRequest('overview/' $this->_id);
     
// Gör vad du nu ska med $data
  
}
}

$client = new Client("53fsdt56gdfg"); 
$person1 = new Person($client1);
$person2 = new Person($client2);
$overview1 $person1->overview();  
$overview2 $person2->overview(); 
Citera
2014-04-22, 10:28
  #5
Medlem
The Barrs avatar
Varför har du en client-klass? Kan du ha fler klienter än en Person? Om så, har de alltså olika api-nycklar? Förklara gärna din domänmodell mer utförligt.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback