VGrabko
@VGrabko
Golang, Php, Js

Как правильно типизировать ответ в php?

Сейчас слепил вот такое гавнище
class ReturnApi {

    protected $code;
    protected $messages;
    protected $data;

    public function SetCode($code) {
        if (is_int($code)) {
            $this->code = $code;
        } else {
            throw new Exception("Не число");
        }
    }

    public function SetMessage($message) {
        if(is_string($message)){
        $this->messages = $message;
        }else{
            throw new Exception("Не строка");
        }
    }

    public function SetData($data) {
        if (is_array($data)) {
            $this->data = json_encode($data);
        } else {
            throw new Exception("Не масив");
        }
    }

    public function Ret() {
        return json_encode([
            "code" => $this->code,
            "message" => $this->messages,
            "data" => $this->data,
        ]);
    }
}

Как это делать правильно?
  • Вопрос задан
  • 177 просмотров
Решения вопроса 3
VGrabko
@VGrabko Автор вопроса
Golang, Php, Js
На сколько я понял то конструкция останется такой же уродливой. Мля как же я не люблю этот пхп...
Ответ написан
Комментировать
artem90
@artem90
TeamLead, Developer
Можно заюзать JsonSerializable интерфейс.
Слепить абстрактный класс со стандартными значениями code, message data и т.п.
А еще лучше сделать интерфейс для ResponseData.
Ответ написан
Комментировать
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
Посмотрите в сторону Symfony HTTPFoundation. А именно: Response и JsonResponse.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@novrm
Сеттер - устанавливает переменную.
Геттер - проверяет тип переменно - вызывает исключение или возвращает переменную.
Кодировать/декодировать переменную нужно отдельным методом.

Например:
/**
     * Set tag array
     *
     * @param  array $tag
     * @return MessagesOptions
     */
    public function setTag($tag)
    {
        $this->tag = (array) $tag;
        return $this;
    }

    /**
     * Get tag array
     *
     * @return array
     */
    public function getTag()
    {
        if (!is_array($this->tag)) {
            throw new \InvalidArgumentException(sprintf('"%s" expects array.', __METHOD__));
        };
        return $this->tag;
    }
Ответ написан
@shell_execute
Ответ написан
Комментировать
@shagguboy
public function SetData(array $data)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы