В свежей бете php 5.4 появились типажи - набор свойств, которые можно подключать к каким-либо разнообразным классам.
//определение типажа
trait Pprint
{
public function whoAmI()
{
return get_class($this);
}
}
class MyClass
{
use Pprint; //подключаем типаж, ключевое слово use
public function foo()
{
...
}
public function bar()
{
...
}
}
$a = new MyClass();
echo $a->whoAmI(), PHP_EOL; //=> MyClass
Типажами можно гибко управлять. Подробнее здесь: http://habrahabr.ru/blogs/php/130000/
Довольно полезная вещь при подготовке к поддержке аспектно-ориентированного программирования из коробки, не правда ли?
Неактивен
Спорная вещь. Грязи в немытый пхп добавляет. Т.е.
1 - Требует читать чужой код типажей, вмето того, чтобы просто его использовать.
2 - Не дает возможности добавлять функционал типажами в класс, не читая код класса.
Т.е. классический маразм PHP от этого только прибавится.
Красивостей Extension methods - и близко нет. Хотя они и не совсем для того)))
Относительно аспектности... Ну скажем это аспектно подобно, но аспектно ориентированного программирования по сути не добавляет.
Квантовая механика - "малопонятный математический курьёз" (с) msAVA - современный учитель.
Неактивен
Я нифига не понял, разъясните что за фигня, создается какой-то особенный тип, в нем "кладутся" методы, потом в классе "use trait" "подключается" содержимое его, это типа интерфейсы и наследование как си шарпе?
Неактивен
Babusha, типаж - это когда общая для нескольких классов функциональность выделяется в отдельную структуру, которую можно многократно повторно использовать. Нечто вроде множественного наследования.
Интерфейсы - это другое.
1 - Требует читать чужой код типажей, вмето того, чтобы просто его использовать.
Ну, в разработке плагинов к CMS типажи будут достаточно удобны, на мой взгляд.
Неактивен
Дестер, а секундочку, а базовые классы, интерфейсы делают одно и тоже, по крайней мере, они могу это делать, чем это хуже типажей?
Неактивен
static class спасёт отца русской демократии. Впрочем, я даже понимаю, нахрена нужны эти тпажи - пыхпыхыч язык интерпретируемый.
Еще один похапе костыль?
Видимо, просто тупо нет возможности реализовать такое в пыхпыхе.
Это только говорит об ущербности и несостоятельности похапе.
Неактивен
MOP3E, ты владеешь недостоверной или устаревшей много лет назад информацией. В php есть интерфейсы, абстрактные и финальные классы.
Еще один похапе костыль?
Скорее плюшка.
Редактировался Дестер (24-10-11 20:47:53)
Неактивен
Скорее плюшка.
Не, блин, ну ты можешь реально нормально объяснить что это и зачем это нужно? Просто полностью альтернативный вариант для реализации "базовой функциональности" я вижу вот такой вариант http://ideone.com/zF8T3
Чем он хуже? Нельзя нормально объяснить?
Неактивен
Babusha, насколько я понял, типажи позволяют вот такой код с повторяющимися кусками Foo и Bar записать вот так.
use Foo, Bar; // Это интересно
Т.е. реализовано множественное наследование? Не понимаю, если так нужно множественное наследование, то почему не сделать возможность наследовать сразу от нескольких классов? Зачем тогда придумали эти "типажи"? Ответь на вопрос, зачем?
Неактивен
Неактивен
С Хабра, обсуждение критической ошибки в очередном релизе PHP:
muromec: хелллоу, май нейм из лииинус торвальц энд ай проноооунс похапе ин рашын эз РЕШЕТО
Мне больше HP Slate понравился. Его в большой карман можно положить, а у Apple - сковородка какая-то бестолковая. © Руслан Карманов, twitter (-;
Неактивен
Типажами можно гибко управлять. Например, устанавливать алиасы. Прочитай статью на хабре, это интересно.
Не понимаю, если так нужно плодить сущности и делать алиасы, то почему тогда сразу не сделать алиасы для классов? Почему нет? А вообще, я против алиасов, во пытаешься разобрать код, везде написано SomeMethod(), а в неожиданном месте превращается в SMOLOLOL_HUI_PIZDA_DZHIGURDA(), ужас, неправда ли? Тем более свободу php`шникам давать вообще нельзя, php и так лидер по говнокоду. Потом тоже не могу понять, зачем нужны типажи, ведь нельзя вон тот твой код запихнуть в интерфейсы и так же их наследовать? Если честно, я вообще против множественного наследования
http://www.javaportal.ru/java/articles/mnj.html
Там описано для Java и C#, но для PHP все одно и тоже.
Даже процитирую:
один класс “A” является наследником двух других классов “B” и ”C”, причем и тот и другой наследуют класс “D”.
Добавлено спустя 01 мин 36 с:
Дестер, ну и нах... ты эту ху..ню сюда запостил? Кому это интересно, что изначально скриптовый язык притом серверный начинает обзаводиться приблудами для которых он совершенно не пригоден?
Пиздец, ты вообще о чем? C# и Java используется для таких же целей, как и PHP, но в них ООП нужно, а в PHP ненужно, где логика?
Неактивен
зачем нужны типажи, ведь нельзя вон тот твой код запихнуть в интерфейсы и так же их наследовать?
В типажах сразу же есть и реализация, в отличие от интерфейсов.
Если честно, я вообще против множественного наследования
Разработчики php тоже.
Неактивен
Кстати, да, Дестер, а как поведет себя PHP, если попытаться решить проблемы http://www.javaportal.ru/java/articles/mnj.html путем использования типажей?
Добавлено спустя 01 мин 01 с:
В типажах сразу же есть и реализация, в отличие от интерфейсов.
А зачем это нужно и почему это так критично, что для этого придумали целое языковое средство?
Неактивен
Babusha, это не критично, это просто немного упростит жизнь. Например, есть у нас система управления сайтами, в которой имеется поддержка модулей. Разработчик CMS предоставляет сторонним программистам класс "Модуль" и набор разнообразных типажей для использования каких-либо функций этой CMS. Для того, чтобы сделать свой модуль, нужно будет отнаследоваться от класса "Модуль" и подключить какие-нибудь типажи.
Вариант "класс + некоторые типажи" экономичнее, чем просто класс, напичканный всем, чем можно.
Неактивен
Вариант "класс + некоторые типажи" экономичнее, чем просто класс, напичканный всем, чем можно.
Но для этого есть интерфейсы, зачем тогда типажи?
Неактивен
Но для этого есть интерфейсы, зачем тогда типажи?
В php каждый класс должен иметь свою самостоятельную реализацию интерфейса. Иными словами, задача по реализации интерфейса возлагается на программиста. А в нашем случае получится, что интерфейс уже реализован производителем.
Неактивен
. А в нашем случае получится, что интерфейс уже реализован производителем.
Да-да))) Это-то меня и настораживает))))
Ибо "реализован производителем" - звучит, конечно, гордо. Но обычно все в пхп происходит так, "реализован производителем", значит: Вася Пупкин - забацал, а Сережа Васькин - подхватил, сделал свой типаж, закрыл пару функций, одну перегрузил, сверху Гала Сережина дописала свой класс и вставила туда типаж, а ты получил этот чудо код и смотришь на:
$jopa->GhrLoad_render_SaveJaba(); //Пунктуация автора сохранена...
И дальше, чтобы понять, что точно происходит, ты лезешь в класс Галки, понимаешь, что это типаж, лезешь в класс Васи, понимаешь, что он нихуя не так работает, лезешь в переделки Сережи...
Т.е. тебе приходится читать весь ёбаный код, чтобы начать с ним работать. Это самый большой бич и жопа ПХП.
За что я его и не люблю...
Добавлено спустя 02 мин 22 с:
Т.е. реально Extension methods выглядят намного достойнее в данном случае.
Квантовая механика - "малопонятный математический курьёз" (с) msAVA - современный учитель.
Неактивен
В общем, я считаю, разработчики PHP реализовали множественное наследование "не как все", можно через интерфейсы, можно через типажи, если учесть, глупость типажей (вот почему бы если так хотелось реализовать множественное наследование, не сделать через классы, а сделали через типажи, ведь получилось одно и тоже), реально же, получилось вот так, к примеру, класс Forum состоит из типажей User, Post, Thread, в Си++ сделали бы класс Forum наследует от класса User, Post, Thread и в результате, получилось бы абсолютно тоже самое, логика у разработчиков PHP как у кактуса, точнее -- ее вообще нету, если учесть факт проблем множественного наследования и факт кривой реализации в PHP, выражаю общественное мнение большинства - не нужно.
Добавлено спустя 01 мин 38 с:
Т.е. тебе приходится читать весь ёбаный код, чтобы начать с ним работать. Это самый большой бич и жопа ПХП.
За что я его и не люблю...
Вэлком ту множественное наследование.
Редактировался Babusha (24-10-11 23:06:21)
Неактивен
глупость типажей (вот почему бы если так хотелось реализовать множественное наследование, не сделать через классы, а сделали через типажи, ведь получилось одно и тоже)
Babusha, а зачем же в Ruby сделали примеси?
Добавлено спустя 01 мин 31 с:
Т.е. тебе приходится читать весь ёбаный код, чтобы начать с ним работать.
Зависит от кода. Точнее, от степени укуренности индуса, код которого разбираешь.
Просто выбирай правильных индусов.
Неактивен
Babusha, а зачем же в Ruby сделали примеси?
Просто посчитали это лучше, чем интерфейсы, ведь в руби нету абстрактных классов и нету интерфейсов, а примеси полностью заменяют это.
Зависит от кода. Точнее, от степени укуренности индуса, код которого разбираешь.
Просто выбирай правильных индусов.
Ну ты же сам понимаешь, сравнить культуру написания кода идеальных рубистов или индусов-похапешников приходишь к результату, что в php нельзя давать писать потенциально write-only код, потому-что они только такой писать и будут.
Добавлено спустя 10 мин 58 с:
В общем, подведу итоги:
1. Типажи это реализация множественного наследования, которая подхватывает все его минусы.
2. Вместо типажей лучше использовать интерфейсы.
3. Множественное наследование лучше вообще не использовать, даже через интерфейсы, лучше писать код и продумывать структуру приложения так, чтобы не было надобности использовать множественное наследование.
4. Типажи это potential "write-only", Тифон наглядно привел пример.
Редактировался Babusha (24-10-11 23:25:54)
Неактивен