Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Статические классы или объекты?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): [1] 2 3 »   

> Без описания
_Dark_
Отправлено: 19 Февраля, 2013 - 21:18:38
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]


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

Какие минусы использования чисто статических классов?

Допустим, есть класс \System\Output\html

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. namespace System\Output;
  3.  
  4. class html
  5. {
  6.     use \System\Output\Traits\Output, \System\Output\Traits\Macroses;
  7.  
  8.     public function __construct($styleId)
  9.     {
  10.         $this->setStyle($styleId);
  11.     }
  12. }

(в трейтах объявлено несколько методов, например, assign)

В данный момент это можно использовать так (через реестр, Registry):
PHP:
скопировать код в буфер обмена
  1. \System\Registry::getInstance()->output->assign(/* ... */);


Но ведь я могу немного все это и тогда работа с классом сведется к виду


Я просто смотрю, вот в моей всей системе есть базовые классы, составляющие основу, ну или ядро, как угодно.
Эти классы в общем-то существуют в одном-единственном экземпляре (при поддержке Registry), зачем тогда вообще объекты мне нужны?
Пока что выходит, что я вообще могу обойтись без единого экземпляра класса, просто нет необходимости.
Значит ли это, что я могу отказаться от объектов?
Возможно, я недальновиден и не вижу минусов такой архитектуры, вот в этом то как раз и заключается вопрос.
Спасибо.
 
 Top
OrmaJever Модератор
Отправлено: 19 Февраля, 2013 - 21:47:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




_Dark_ пишет:
Какие минусы использования чисто статических классов?

Если класс чисто статический то он может существовать только в одном экземпляре, а этого иногда не хватает.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
_Dark_
Отправлено: 19 Февраля, 2013 - 21:48:59
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]


OrmaJever пишет:

Если класс чисто статический то он может существовать только в одном экземпляре, а этого иногда не хватает.

То есть, если класс используется только в одном экземпляре и мне не нужны магические методы — то я могу смело использовать чисто статический класс?

(Отредактировано автором: 19 Февраля, 2013 - 21:49:23)

 
 Top
OrmaJever Модератор
Отправлено: 19 Февраля, 2013 - 21:49:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




+ у обьектов есть магические методы (начинающиеся с __), они иногда очень позены
(Добавление)
_Dark_ пишет:
То есть, если класс используется только в одном экземпляре и мне не нужны магические методы — то я могу смело использовать чисто статический класс?

прям опережаете мои мысли.
Пока я не мгу придумать другие причины, поэтому да.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
_Dark_
Отправлено: 19 Февраля, 2013 - 21:54:12
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]


OrmaJever пишет:
Пока я не могу придумать другие причины, поэтому да.

Хорошо, спасибо.

(Отредактировано автором: 19 Февраля, 2013 - 21:54:28)

 
 Top
OrmaJever Модератор
Отправлено: 19 Февраля, 2013 - 21:59:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Блин меня терзают сомнения что есть преймущество у обьектов, но блин вспомнить не могу! Растерялся


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DelphinPRO
Отправлено: 19 Февраля, 2013 - 22:01:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




_Dark_
вы неправильно подходите к реализации. Систему нужно сначала спроектировать до мельчайших подробностей. Тогда вы точно будете знать что вам нужно в классе, а что нет, и спокойно сможете выбрать способ реализации.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
OrmaJever Модератор
Отправлено: 19 Февраля, 2013 - 22:09:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




DelphinPRO а я например не совсем согласен, очень часто спроэктируешь всё, затем приступаешь к реализации и понимаешь что здесь нужно что-то добавить, тут нужно что-то переделать, а там и вовсе удалить и по мере написния кода всё меняется, может даже кардинально. Моя подпись в какой-то степени об этом.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
_Dark_
Отправлено: 19 Февраля, 2013 - 22:12:39
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]


DelphinPRO пишет:
_Dark_
вы неправильно подходите к реализации. Систему нужно сначала спроектировать до мельчайших подробностей. Тогда вы точно будете знать что вам нужно в классе, а что нет, и спокойно сможете выбрать способ реализации.

Я вот и проектирую как раз ее. Мне не понравилось то, что для того чтобы работать с классом нужно создавать объект, а потом еще через реестр получать его где нужно. Решил по другому сделать, через статические классы, просто не укладывается то, что вроде бы для работы с классом нужен объект, а теперь можно вообще без него обойтись.

У меня ситуация как у OrmaJever, есть какие-то сомнения в том, что я делаю все правильно, я поэтому и спрашиваю, потому что подозреваю, что не все так просто и возможно я что-то упустил.
(Добавление)
OrmaJever пишет:
DelphinPRO а я например не совсем согласен, очень часто спроэктируешь всё, затем приступаешь к реализации и понимаешь что здесь нужно что-то добавить, тут нужно что-то переделать, а там и вовсе удалить и по мере написния кода всё меняется, может даже кардинально. Моя подпись в какой-то степени об этом.

Согласен с вами, я уже раз 5 точно все с нуля начинал, потому что процесс разработки доходил до такого момента когда дальше уже был тупик. Зато эти разы точно пошли на пользу, учитываю все, что не нравилось, с каждым разом все лучше и лучше. Главное перфекционистом не стать, да и в этот раз уже все серьезней, есть конкретные сроки.

(Отредактировано автором: 19 Февраля, 2013 - 22:16:05)

 
 Top
DelphinPRO
Отправлено: 19 Февраля, 2013 - 22:36:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




OrmaJever, возможно. когда я писал свой велик - тоже переписывал его несколько раз с нуля. Он так и не был завершен.
Спустя некоторое время захотелось вернуться к написанию. Но в этот раз я начал с карандаша и бумаги (образно говоря , на самом деле редактор блок-схем Улыбка) Пару недель по вечерам после работы разрабатывал систему. В результате получилось творение на 7 листах A4. И самое главное - я теперь точно знал как будет работать моя система, и оставалось просто описать это кодом.
Проектирование - важный этап создания приложения.

ps да, кстати, каркас системы наконец дописан и работает.
осталось подрихтовать и выкинуть Улыбка ибо коммерческие заказы все же предпочитаю делать на CI


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
LIME
Отправлено: 19 Февраля, 2013 - 22:41:33
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




я в своем велосипеде на котором уже крутится не один десяток сайтов в основном использую статические методы
это оправдано
кстати не понял какая связь между статическими методами и магическими
их везде можно пользовать
OrmaJever пишет:
Блин меня терзают сомнения что есть преймущество у обьектов, но блин вспомнить не могу!
наверное наследование
раньше с этим были траблы
но теперь вместо self можно юзать static
и нет проблем с поздним связыванием
(Добавление)
LIME пишет:
основном использую статические методы
вообщето пока только их и приходилось пользовать
другого не надо было пока
(Добавление)
хотя это разговор ниочем
если понимать что есть статические члены класса(и статические переменные в ф-ции)
то этого вопроса не возникнет
 
 Top
caballero
Отправлено: 19 Февраля, 2013 - 22:48:23
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




А разве в PHP есть статические классы?

Цитата:
Блин меня терзают сомнения что есть преймущество у обьектов, но блин вспомнить не могу!

Инкапсуляция. Ключевое понятие ООП.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
OrmaJever Модератор
Отправлено: 19 Февраля, 2013 - 23:14:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




LIME пишет:
кстати не понял какая связь между статическими методами и магическими

Ну например когда вызывается конструктор или деструктор? Или методы __invoke и __toString ?
Есть конешно и исклчения, например __callStatic, но большая часть магических методов работает только с обьектами.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
LIME
Отправлено: 19 Февраля, 2013 - 23:16:31
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




конструктор деструктор это понятно
а почему тустринг нельзя?
caballero пишет:
А разве в PHP есть статические классы?
)))
 
 Top
OrmaJever Модератор
Отправлено: 19 Февраля, 2013 - 23:25:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




LIME пишет:
а почему тустринг нельзя?

А почему можно???? Однако
Место
PHP:
скопировать код в буфер обмена
  1. echo $obj;
  2. // будет
  3. echo MyClass; // ??


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB