@fsgdoterr

Зачем нужны трейты в php?

Изучая php дошел до изучния трейтов, изучив оф докумнтацию, и погуглив понял суть использования, но я так и не понял суть применения, ведь точно такого же результата можно добиться написав абстрактный класс и просто наслдоваться от него, приведу один из примеров который находил:
trait HelloWorld{    
    public function sayHello() {
        return 'Привет ';
    }
}
class NameMen{
    public $name = 'Вася';
}
class GetInfo extends NameMen{
    use HelloWorld;
    public function getPiple(){
            echo $this->sayHello() . $this->name;
    }
}
$obj = new GetInfo();
$obj->getPiple(); //Привет Вася

вот один из них, и все остальные выглядят примерно также, суть из таких примеров я понял, в трейте объявляются методы которые предположительно нужно будет использовать много раз, и чтобы их не прописывать снова и снова там их и объявляешь, но как я написал выше того же эффекта можно добиться написав абстрактный класс и наследоваться от него, так зачем тогда нужны эти трейты, где их лучше использовать?
  • Вопрос задан
  • 401 просмотр
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Трейты - это миксины, которые могут добавляться к классам в различных комбинациях. Попробуйте повторить на чистых классах
trait Harvestable {
  function harvest() { }
}
trait Waterable {
  function water() { }
}
trait Repottable {
  function repot() { }
};
class Plant { }
class Vegetable extends Plant {
  use Waterable;
  use Harvestable;
}
class Fruit extends Plant {
  use Waterable;
  use Harvestable;
  use Repottable;
}
class Succulent extends Plant {
  use Repottable;
}
Ответ написан
Комментировать
colonel
@colonel
Разработчик PHP, Laravel
От абстрактного класса вы можете наследоваться только от одного, а трейтов можно использовать сколько угодно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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