|
|
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Есть класс, все методы которого должны быть статическими. Возникла идея оставить их как есть, а просто сам класс сделать абстрактным. Нельзя создать экземпляр => нельзя создать метод в нем! Правильно мыслю или чего-то не понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2012, 23:03 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
нифига не понимаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 00:19 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Можно разъяснить? Почему так не покатит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 01:58 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Shitbox2, а ты попробуй ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 05:39 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Попробовал. И так и так работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 07:32 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Shitbox2, а зачем тогда вообще это делать классом? если как от класса от него ничего не нужно. может хватит и просто набора функций? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 07:40 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Топистартеру - юзайте: Код: php 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 10:59 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Вообще, да классом делать не обязательно, но все делают. Хотя бы для того, чтобы упорядочить наборы функций и их имена не пересекались. У меня, да и во многих движках обращение к методам идет так Image::Resize('img.png','100','100'), к примеру. Объясните тогда зачем нужны абстрактные классы? И при чем здесь __construct() и __clone? Вообще, зачем создавать экземпляры классов? Все реже и реже встречаю использование классов по-назначению, в качестве пользовательского типа данных, как они и задумывались. Когда мы делаем слайдер, то создаем класс картинки с размерами и методами появиться плавно или с каким-то эффектом. Часто классы используют чтобы упорядочивать функции в библиотеки (моя случай), чтобы не плодить кучу функций в глобальной области, как тут советовали. Здесь экземпляры создавать, конечно не надо. А всякие новомодные фишки типа областей видимости, статичности и проч. ИМХО только для совместной разработки, чтобы Петя, когда юзал библиотеку Васи, получал бы ошибки, что Вася не разрешил пользоваться такими-то методами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 18:24 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
авторВсе реже и реже встречаю использование классов по-назначению, в качестве пользовательского типа данных, как они и задумывались вот как раз ТАК они точно не задумывались. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 19:41 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Shitbox2ИМХО только для совместной разработки, чтобы Петя, когда юзал библиотеку Васи, получал бы ошибки, что Вася не разрешил пользоваться такими-то методами. Для таких случаев лучше юзать DI. Вася объявляет интерфейс, в контроллере дает ему некий id который публикует. И Вася, Ваня и д.р. забирая его работают через интерфейс. Чётко ограничит кто к чему имеет доступ. А имплементация этого уже забота Васи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 20:30 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Shitbox2упорядочивать функции в библиотеки (моя случай), чтобы не плодить кучу функций в глобальной области, как тут советовали Я тогда одного не понимаю зачем ограничивать доступ и видимость к библиотечным функциям? Если они библиотечные то по определению должны быть обще доступными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 20:33 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Shitbox2, Если боитесь что ктото от Вашего класса наследоваться будет, и что-то расширять - объявите его как final. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 20:36 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Не боюсь... Пусть даже экземпляры создают. Нафига тогда нужны абстрактные классы и статические методы? На практике-то они для чего применяются? В документации куча примеров, где и так извращаются и сяк, то там виден метод, то сям, то он сам себя через пять наследований вызывает. «Совершенно оболванен от таких серьёзных тем, Тихо ахнул поселянин: «„Вот же круто!.. А зачем?“» ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2012, 04:48 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Shitbox2, абстрактные классы нужны для того чтобы реализовать в них часть функциональности, и уже от них наследоваться и расширять другие классы. которые уже не будут абстрактными. тоесть это просто одна из возможностей ООП. если вы непонимаете их сути - то не используйте их. все равно без понимания - эффективно использовать эти возможности вы не сможете. это же касается и других возможностей. статических методов, интерфейсов, примесей и т.д. сначала поймите что это и как это , а только потом, если это реально нужно и оправданно, начинайте использовать. не обижайтесь, но помните басню - "Мартышка и очки". у нее были очки и она примеряла их то на спину то на задницу.... вот я вижу аналогию. абстрактные классы есть, но вы незнаете куда их "одеть", но непременно хотите одеть, хотя зрение у вас может и так отличное. то что вы описали выше, - это вы одели их на затылок. носить можно - но пользы ноль ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2012, 06:05 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Shitbox2Объясните тогда зачем нужны абстрактные классы? И при чем здесь __construct() и __clone? Вообще, зачем создавать экземпляры классов? Вот вы спрашиваете зачем тогда область видения нужна? Пусть все методы публичный и пусть все юзают его как хотят. Это наглядный пример. Делаете конструктор протектед, и никто вне класса создать экземпляр класса не сможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2012, 07:53 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Shitbox2Не боюсь... Пусть даже экземпляры создают. Нафига тогда нужны абстрактные классы и статические методы? На практике-то они для чего применяются? В документации куча примеров, где и так извращаются и сяк, то там виден метод, то сям, то он сам себя через пять наследований вызывает. «Совершенно оболванен от таких серьёзных тем, Тихо ахнул поселянин: «„Вот же круто!.. А зачем?“» Представим одну и ту же работу виполненую с помощью статических переменных/методов и без них. Итак, есть у нас класс животные, а в нём переменная "количество ног"=4. А что будет, если мы создадим 1000 000 животных с четырмя ногами, а они в один момент вдруг должны стать прямоходячими? Мы должны отыскать все 1000 000 экземпляров (хорошо, если это массив, а если нет? ) и поменять аттрибут "количество ног"=2. ИЛИ если наша переменная "количество ног" будет статическая, а в методах класса мы будем обращаться именно к ней (Zhivotnoe::$nogi) то изменив эту переменную, мы моментально поставим всех на 2 ноги :) Почему не глобальная переменная? А потому, что если мы начнём наследовать классы, то получим часть животных прямоходячих, а часть ползающих, таким образом мы сможем их разделить. Это один из случаев необходимости применения статических методов/переменных, а таких очень много. А абстактные классы вообще отношения не имеют к этому. Скажем мы создали класс Жизнь. В этом классе описываются аттрибуты присущие всему живому: длина жизни, тип организма, список органов и куча всего другого (сорри, не биолог :) ). А от этого класса наследуем классы грибы, животные, одноклеточные, растения и т.д. Так вот, мы можем создать экземпляр любого животного, растения... НО МЫ НЕ ДОЛЖНЫ иметь возможность создать экземпляр класса Жизнь (так как сам класс не является завершённым описанием чего-либо). Вот тогда мы и делаем класс Жизнь абстрактым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2012, 08:47 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Програмёр, отлично объяснил! Спасибо! Статическая переменная — общая для всех потомков, абстрактный класс — набор свойств и методов для добавления к другим классам. Если бы так начиналось описание каждой особенности, изучение ПХП пошло бы в 10 раз быстрее! Что мне тогда использовать в своем случае? Случай такой: скрипт action.php получает от js указание добавить/удалить/обновить картинку в БД и на сервере или получить список картинок, соответственно есть функции add, del, update, getlist. В данный момент эти функции реализованы как методы класса Action (чтобы потом не было конфликтов имен) В случае добавления картинки происходит ее обработка, для чего подключается графическая библиотека. Сейчас у меня написаны два идентичных класса Image (одинаковы названия, методы, свойста) для GD и MagickWand, т.е. какая бы библиотека не была подключена, функции будут работать. Собственно, как лучше построить такую систему? Классы Action и Image сейчас абстрактные, но, может быть, вообще, их делать не стоило? Нужно ли применять namespace в моем случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2012, 22:59 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Надо знать больше о структуре твоего приложения, но так сходу - статические методы можно сделать. Хотя впринципе, всё зависит от того, что дальше с картинкой делать надо. Может вместо голых экшенов контроллеры писать? Тогда при запросе подрузил нужный контроллер, создал экзеспляр и выполняй какие угодно экшены не переживая за пересечение имён вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2012, 07:06 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Вот проект полностью: https://github.com/tamtakoe/photoalbum См. action.php. Графические классы в папке lib Соответственно, хотелось бы построить его так, чтобы можно было легко использовать в других проектах. Кстати, почему-то не получается обращаться к классу Album без создания экземпляра (Album::init()) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2012, 17:31 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Shitbox2, может потому что там не хвататет слова static? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2012, 18:50 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Эм... Но и в классе Image нет этого слова и все работает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2012, 20:02 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Вы вынуждаете процитировать сюда несколько глав из первого попавшегося учебника. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2012, 20:06 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Буду признателен если их удастся сжать до нескольких обзацев. «Не корысти ради, а токмо волею пославшей меня жены» ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2012, 20:13 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Shitbox2, Начнём с того, что является очень плохим тоном делать свой класс зависимым от внешнего мира. Скажем, а что если я не могу по какой-либо причине использовать GET запросы при передаче параметров (например мне нужно передавать информацию об экшене постом). Вот и первая проблема, надо все геты отлавливать и менять на пост (хотя и быстро, но делать так не надо). Во вторых, почему бы не использовать классы полноценно? А если мне надо будет картинку уменьшить, конвертировать и создать к ней аватарку? Трижды создавать одни и те же ресурсы и всё такое? А я бы создал ресурс картинки при создании экземпляра класса, записал бы этот ресурс как атрибут объекта и орудовал бы с ним (и так же поступил бы с другими переменными). С классом Image разобрались (то есть лучше делать его не абстрактным). Класс album как я уже говорил лучше сделать независимым из вне, ну и так же полноценным (без разных там static методов). А ещё бы я создал файл конфига, который позволял бы выбрать библиотеку для обработки картинок, и другие параметры. вообщем как и обычно, я не вижу смысла в статике вообще :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2012, 22:15 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
И почему же класс Album получился зависимым? От чего? В движках обычно получают значения так: Tools::getValue('zoom')) $app->getParam('postPage'); Причем это просто обертки над $_POST. Тоже самое, что есть обертки над БД и т. д. Т. к. мы не знаем, что за движок будет, то делать их нет смысла. Или есть? Согласен, что обработку картинок хорошо было бы сделать по типу jQuery, чтобы она передавала изображение от одной функции другой. Опять же как это сделать? Ресурсы картинки нужно уничтожать чем быстрее тем лучше, т.к. они занимают память. Тут мне видится выход сделать огромную функцию-комбаин с 200 параметрами, что совсем плохо Выписал классы. Ткните пальцем, где зависимости? action.php Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. имя_библиотеки.php Код: php 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2012, 00:07 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38046100&tid=1464338]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
101ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
| others: | 214ms |
| total: | 445ms |

| 0 / 0 |
