Ответы пользователя по тегу ООП
  • Какие классы должны быть в тестовом задании на CRUD новостей?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Класс News для отдельной новости, методы:
    - getNews
    - addNews
    - editNews
    - deleteNews

    Класс NewsList для списка новостей, методы:
    - getNewsList

    ...например.
    Ответ написан
  • Как выбрать классы в ООП?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Почитай что такое Композиция и Агрегация в ООП, многое поймёшь.
    Ответ написан
    Комментировать
  • Когда использовать ООП?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Для сравнения, процедурка и ООП это как старый советский гараж и как современный.

    Процедурный код - много всего (в том числе ненужного, устаревшего), вроде работает и всё есть но без бутылки не разберешься что где лежит:
    %D0%A5%D0%BB%D0%B0%D0%BC-%D0%B2-%D0%B3%D0%B0%D1%80%D0%B0%D0%B6%D0%B5-1280x720.jpg

    ООП - все разложено по полочкам, порядок, каждый ящичек под строго определенный инструмент и подписан:
    etapy-kosmeticheskogo-i-kapitalnogo-remonta-garazha-68399.jpg
    Ответ написан
  • Зачем нужен этот метод декоратора?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    По-моему вот тут все предельно понятно объяснено: https://refactoring.guru/ru/design-patterns/decorator
    Ответ написан
    Комментировать
  • Как описать структуру PHP объекта?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Чтобы делать "каскад" последовательных методов тебе нужно в каждом методе возвращать этот же объект.

    class Base {
    	
    	public function test($string){
    		// Что то делаем.
    		return $this;
    	}
    	
    	public function chek($string){
    		// Что то делаем.
    		return $this;
    	}
    	
    	public function hello(){
    		// Что то делаем.
    		return $this;
    	}
    }

    А писать в коде удобнее так:

    $base
    ->test('string1')
    ->chek('string')
    ->hello();
    Ответ написан
    2 комментария
  • Где тут ошибка?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Ты НЕ можешь использовать имя Error для класса: https://www.php.net/manual/ru/class.error.php

    class MyError
      {
        public $error;
    
        public function setError($text,$number = 0)
        {
          $this->error['text'] = $text;
          $this->error['number'] = $number;
        }
    
        public function getError()
        {
          return $this->error;
        }
      }
    
    $x = new MyError();
    
    $x->setError('Error!');
    
    print_r($x->getError());

    Код сам сравнишь.
    Ответ написан
  • ООП Пользователи?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    У тебя тут сразу куча проблем. Зачем в Объекте-значении вообще метод getInfo() ? Зачем выводить в методе html код? Зачем вводить данные юзеров в конструкторе вручную если эти данные должны приходить либо из базы данных либо из формы?

    Слышал про MVC?
    Сделай такую же структуру:

    КОНТРОЛЛЕР UserController.php - будет содержать метод getAllUsers() который получает список юзеров при обращении к Модели.

    МОДЕЛЬ User.php - просто объект-значение с полями (логики у тебя там все равно никакой нет), заполняются при запросе в базу и создании объектов.

    ВИД UserList.php - получает от Контроллера коллекцию Юзеров и через цикл foreach выводит пользователей и их данные.

    Итого у тебя 3 файла которые отвечают каждый за своё дело, не смешивая функционал + подключение к базе.
    Ответ написан
    6 комментариев
  • Годится ли такая книга для изучения PHP/ООП?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Слишком много вопросов, ты реально такой не уверенный в себе?
    Я купил себе эту книгу, считается одной из лучших на тему ООП. В доках как раз много мало понятных мест, там никто никому подробно ничего не разжевывает, в отличие от книг.

    3. Сильно ли сломает сознание, если уже есть какой-то закреплённый материал по докам (нужно ли будет переучиваться)?
    - она полностью соответствует офиц. стандартам + Паттерны. С чего ты взял что содержание книги что-то должно "ломать"?
    Ответ написан
    7 комментариев
  • Правильно ли понял понятие - абстрактый метод?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Значит ли это что в остальных потомках этот метод будет(должен) уже просто быть виден с функционалом, созданным в п.2?

    Нет, в абстрактном родителе метод все также пуст и все потомки этого родителя обязаны этот метод реализовать.
    Ответ написан
    4 комментария
  • Зачем нужно ООП?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Мне кажется пользу ООП начинаешь понимать когда спустя неделю перестаешь понимать что же делает твой собственный процедурный лапшекод... У меня такое было )
    Ответ написан
    Комментировать
  • Что написать на ооп?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Опиши с помощью ООП приготовление борща.
    У тебя будут объекты:
    - повар
    - магазин
    - продукты
    - кастрюля
    - овощечистка
    - плита

    Опиши классами как это всё взаимодействует.

    P.S. Уверен при просмотре обучающих видео ты не практикуешься в написании кода, да?
    Ответ написан
    Комментировать
  • Как оформить вызов методов один за другим?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Только недавно осваивал подобное. Так как такие "каскады" функций часто встречаются во фреймворках.
    Суть в том что каждый предыдущий метод должен возвращать объект $this (либо другой объект), общая суть - метод может вызывать только объект поэтому конструкция $x->metod()->metod2(); означает что первая функция $x->metod() возвращает некий объект и уже у него мы вызываем второй метод. Вот мой пример:
    class Mailer {
    	
    	public $from;
    	public $to;
    	public $subject;
    	public $message;
    
    	public function setFrom(){
    		$this->from = 'my@mail.ru';
    		return $this;
    	}
    	
    	public function setTo(){
    		$this->to = 'you@mail.ru';
    		return $this;
    	}
    	
    	public function setSub(){
    		$this->subject = 'Hello!';
    		return $this;
    	}
    	
    	public function setMess(){
    		$this->message = 'Good morning friend.';
    		return;
    	}
    	
    	
    }
    
    $x = new Mailer();
    $x->setFrom()->setTo()->setSub()->setMess();
    
    // Смотрим что получилось:
    echo $x->from . "<br>";
    echo $x->to . "<br>";
    echo $x->subject . "<br>";
    echo $x->message . "<br>";
    Ответ написан
  • Как максимально четко и уверенно рассказать про ООП?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    В этом и проблема что всем рассказывают про ООП используя "эти три принципа" хотя суть в другом - в том что ооп это программирование Обьектами которые обмениваются сообщениями и используют друг друга для выполнения задач. И только после этого людям надо рассказывать про "эти три принципа"!

    Что бы объяснить суть чего либо нужно ответить на 3 вопроса:
    - Что он делает?
    - Как он это делает?
    - Для чего это нужно?
    Ответ написан
    2 комментария
  • Как правильно получить составные данные из базы и сложить их в одну сущность?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Внутри объекта Пост можно создать новый объект Юзер, передать в него id юзера (id юзера ведь у тебя указан для каждого поста, то есть кто автор) и потом уже выводить имя юзера и всё остальное. Короче "композиция": ассоциация, при которой используемый объект создается внутри класса.
    В результате у тебя будет одна коллекция постов и всё будет в ней, а не две "кучки" - Посты и Юзеры.
    Ответ написан