Member 14015905 Ответов: 0

Как я могу рефакторинговать этот код?


<?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

Ну, это вряд ли технический вопрос с быстрым ответом. Сначала вам нужно проанализировать код с точки зрения того, что вы хотите, чтобы он делал, и что он на самом деле делает. Где находятся области, которые работают не лучшим образом, и почему?

0 Ответов