Как я могу рефакторинговать этот код?
<?php class GetBookList { private $format; public function __construct($format = 'json') { $this->format = $format; } public function getBooksByAuthor($authorName, $limit = 10) { $return = []; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://api.book-seller-example.com/by-author?q=" . $authorName . '&limit=' . $limit . '&format=' . $this->format); $output = curl_exec($curl); curl_close($curl); if($this->format == 'json') { $json = json_decode($output); foreach ($json as $result) { $return[] = [ 'title' => $result->book->title, 'author' => $result->book->author, 'isbn' => $result->book->isbn, 'quantity' => $result->stock->level, 'price' => $result->stock->price, ]; } }elseif($this->format == 'xml') { $xml = new SimpleXMLElement($output); foreach ($xml as $result) { $return[] = [ 'title' => $result->book['name'], 'author' => $result->book['author_name'], 'isbn' => $result->book['isbn_number'], 'quantity' => $result->book->stock['number'], 'price' => $result->book->stock['unit_price'], ]; } } return $return; } }
Что я уже пробовал:
<?php class GetBookList { private $format; public function __construct($format = 'json') { $this->format = $format; } public function getBooksByAuthor($authorName, $limit = 10) { $return = []; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://api.book-seller-example.com/by-author?q=" . $authorName . '&limit=' . $limit . '&format=' . $this->format); $output = curl_exec($curl); curl_close($curl); if($this->format == 'json') { $return = $this->jsonFormat($output); }elseif($this->format == 'xml') { $return = $this->xmlFormat($output); } return $return; } public function jsonFormat($output) { $return = []; $json = json_decode($output); foreach ($json as $result) { $return[] = [ 'title' => $result->book->title, 'author' => $result->book->author, 'isbn' => $result->book->isbn, 'quantity' => $result->stock->level, 'price' => $result->stock->price, ]; } return $return; } public function xmlFormat($output) { $return = []; $xml = new SimpleXMLElement($output); foreach ($xml as $result) { $return[] = [ 'title' => $result->book['name'], 'author' => $result->book['author_name'], 'isbn' => $result->book['isbn_number'], 'quantity' => $result->book->stock['number'], 'price' => $result->book->stock['unit_price'], ]; } return $return; } }
Richard MacCutchan
С какой целью?
Member 14015905
Для улучшения и оптимизации кода.
Richard MacCutchan
Ну, это вряд ли технический вопрос с быстрым ответом. Сначала вам нужно проанализировать код с точки зрения того, что вы хотите, чтобы он делал, и что он на самом деле делает. Где находятся области, которые работают не лучшим образом, и почему?