Чат Telegram
Группа ВКонтакте
Новый комментарий


DmitryGavrilov 21.09.2018 в 13:58

Добрый день! Опишите пожалуйста подробно зачем мы сюда еще добавили интерфейс, думаю у многих есть вопрос "Зачем тут интерфейс?)) И так же все работает!". Было бы чудесно добавить пример где этот добавленный интерфейс используется и без него никак. Спасибо!

ivashkevich 22.09.2018 в 20:35

В дальнейших уроках это будет использоваться, пока просто рассказываю о возможностях языка =)

DmitryGavrilov 22.09.2018 в 22:50

Понял, благодарю, просто хочется сразу все знать)

Fornit 08.04.2020 в 23:11

Да, ощущение, что нужно использовать или интерфейс или трейт. Пока непонятно зачем использовать оба сразу и какой в этом смысл.

Bogdan 05.01.2019 в 13:28

ну ладно вопрос зачем тут добавили, у меня вообще возник вопрос, нафига нужен тот интерфейс?! по факту на сегодняшний урок я вижу большие плюсы в трейтах, а именно написание кучу методов и потом что б все классы черпали их. А вот нафига интерфейс, не знаю. Какой-то дополнительный файл с дублированием методов, пару лишних килобайт добавляет проекту )))

Bogdan 05.01.2019 в 13:55

сейчас пообщался со знакомыми и слегка иначе начал думать, не знаю правильно ли, но я так понимаю что когда большой проект, изначально пишется интерфейс ( набор инструкций(методов)), а потом уже при создании классов что б что-то не провтыкать то имплементится интерфейс, правильно я понял?))

ivashkevich 05.01.2019 в 21:12

Урок про интерфейсы просмотри ещё разок. Если будет непонятно - напиши в личку

vtolstov 16.09.2019 в 12:49

Может кому пригодится: класс - машина. ситуация: застряла. методы: "отъехать назад", "ехать вперед". Метод "отъехать назад" реализован через интерфейс. Естественно оба метода находятся в трейтах, так как доступны для всех объектов и других классов похожих на "машину".
И тут как раз включается вся эта логика: если объект класса "машина" реализует интерфейс "отъехать назад", то через трейт используем метод "отъехать назад" и работаем дальше. А если не реализует и метод "ехать вперед" ничего не дает, то выводим сообщение "мы застряли".
Это скорей всего частный случай, и конечно это лично мое понимание этой логики. Возможно не прав. Прошу поправить.

ivashkevich 16.09.2019 в 18:48

Не люблю абстракции программирования перекладывать на реальный мир. Трейт - это просто кусок кода, который можно использовать в нескольких местах.

vtolstov 17.09.2019 в 05:39

Согласен с вами. В первом уроке вы тоже сравнили понятие класса с реальным миром. Я провел такую же аналогию только чтобы новичкам было проще понять суть связки трейта и интерфейса.

iluha22 18.10.2019 в 10:29

Опять получается некий компромис. Вроде создаем определенную зависимость и логику, и тут же трейты - долой ограничения! :)

ivashkevich 18.10.2019 в 10:46

Не понял, какие ограничения?

iluha22 18.10.2019 в 11:15

Цитирую:

В PHP класс может наследоваться только от одного класса, помните?
Так вот с помощью интерфейсов и трейтов мы можем это ограничение немного обойти.

ivashkevich 18.10.2019 в 12:31

Аа. Ну это не наследование всё же, но неиспользование кода.

kefir4573@yandex.ru 20.01.2020 в 21:15

Не понимаю, почему выводит ошибку, что упускаю?


trait MyNewTrait
{
    public function SayMeClass(){
        return 'Это класс ' . self::class;
    }
}

class DayMondey
{
use SayMeClass;
}

$momo1 = new DayMondey();

$momo1->SayMeClass;
ivashkevich 21.01.2020 в 06:54

В ошибке всё написано. Прочитайте внимательнее.

XXX 22.01.2020 в 19:58

Ты не используешь трейт.

use SayMeClass;

А трейт у тебя назван..

trait MyNewTrait
XXX 22.01.2020 в 19:59
$momo1->SayMeClass;
$momo1->SayMeClass();
OneMoreTime 16.02.2020 в 14:25

В PHP можно получить имя класса с помощью конструкции ИмяКласса::class.

Чем в данном случае отличается от get_class() ?

ivashkevich 18.02.2020 в 18:17

get_class() правильнее использовать к переменной, когда вы не знаете класса. Если же класс вам известен, и вам нужно получить в коде его полное имя, используйте ClassName::class

Логические задачи с собеседований