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 :: Альтернатива ООП [2]

 PHP.SU

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


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

> Описание: Как избежать использование средств ООП и сохранить объектовую структуру
DlTA
Отправлено: 06 Декабря, 2013 - 22:48:53
Post Id



Постоянный участник


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


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




neolinux пишет:
пять существующих функций работы с массивом не сложно запомнить

1 эм, простенький класс-модель у меня имеет 2-3 десятка методов! это стоит учесть,
2 а вот сколько времени у вас уходит на набор полного названия методов? я юзаю иде, набор очень ускорился
3 одна из главных вещей в ООП, это инкапсуляция, вкурсе что это?

глобальная видимость данных это мега дыра в проекте, и когда вы будете искать где и почему у вас баг, очень сильно задолбетесь!!!
 
 Top
DelphinPRO
Отправлено: 07 Декабря, 2013 - 00:53:23
Post Id



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


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


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




в какой-то CMS я видел подобное УГ...

Главное, я не могу уловить смысла всего этого..
И как минимум есть одна серьезная причина, по которой я не буду использовать подобное "ооп" - все ключи нужно помнить, лиюо лазать в документацию, вместо того, чтобы просто нажать CTRL + SPACE в IDE


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
neolinux
Отправлено: 07 Декабря, 2013 - 08:17:27
Post Id


Новичок


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


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




DlTA пишет:
инкапсуляция
- насколько понимаю, исключение прямого обращения к переменным? Прочтите, пожалуйста, сообщение перед Вашим.
Цитата:
глобальная видимость данных это мега дыра в проекте, и когда вы будете искать где и почему у вас баг
- Вы не внимательно читали мои сообщения.
Цитата:
простенький класс-модель у меня имеет 2-3 десятка методов! это стоит учесть

Ваше право. И у меня такое возможно, но не хочу "напрягать" пользователей необходимостью длительного изучения мануалов. Впрочем, это выходит за рамки темы.
DlTA пишет:
а вот сколько времени у вас уходит на набор полного названия методов?

Примерно так же, как и в стандартном ООП.
DlTA пишет:
а вот сколько времени у вас уходит на набор полного названия методов? я юзаю иде, набор очень ускорился
DelphinPRO пишет:
И как минимум есть одна серьезная причина, по которой я не буду использовать подобное "ооп" - все ключи нужно помнить, лиюо лазать в документацию, вместо того, чтобы просто нажать CTRL + SPACE в IDE

IDE - это дополнительное приложение, предоставляющее сервис. В стандартном ООП все это отсутствует.
DelphinPRO пишет:
И как минимум есть одна серьезная причина, по которой я не буду использовать подобное "ооп"

Так я ведь не навязываю. Во первых, поделился, кому интересно. Во вторых, услышать конструктивные замечания такие, как:
DlTA пишет:
одна из главных вещей в ООП, это инкапсуляция, вкурсе что это?
DlTA пишет:
глобальная видимость данных это мега дыра в проекте

Интересные замечания, которые не исключает само ООП. Мне же пришла в голову мысль: объявлять статический массив в теле функции. Это должно полностью устранить возможность прямого обращения к массиву.
 
 Top
DeepVarvar Супермодератор
Отправлено: 07 Декабря, 2013 - 09:28:27
Post Id



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


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


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




neolinux пишет:
объявлять статический массив в теле функции. Это должно полностью устранить возможность прямого обращения к массиву.
Да, устранит.
Зато будет новый гемор за необходимостью выделять новую память под "локальные" переменные каждый раз, при вызове этой ф-ции. Кроме того - весь набор значений этих переменных придется расчитывать заново.

Когда в объектном (а не объектовом) подходе существует возможность сохранить состояние процесса и обратиться к объекту в другом контексте (scope), чтобы получить от объекта некоторые данные или модифицировать их.

Да, я являюсь противником ООП, уточню, противником вот такого ООП (нативно):
PHP:
скопировать код в буфер обмена
  1. $myDiv = new htmlTag("div");
  2. $myDiv->addClass("class-name");
  3. $myDiv->addTextNode("Hello World!");
  4. echo $myDiv->toString();


Когда кругом плодят объекты ради объектов.

Один приходит и начинает гнуть пальцы, мол я крутой прогер, у меня все в ООП.
Другой приходит и тоже пиписькой меряется, мол я без ООП ваще умею..

Это в обоих случаях похоже на:
Цитата:
Да я циркулярку знаю как свои три пальца!

Нельзя отказываться полностью от того или от другого.
А еще нужно понимать где юзать класы, а где функции.
Это есть совокупность инструментов для достижения конечной цели - работающего приложения.

Так что - вперед набивать шишки.
Нечего тут народ тролить.
Через год покажете что получилось.

З.Ы.: Линуксоид, блин..
 
 Top
neolinux
Отправлено: 07 Декабря, 2013 - 11:31:46
Post Id


Новичок


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


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




DeepVarvar пишет:
Зато будет новый гемор за необходимостью выделять новую память под "локальные" переменные каждый раз, при вызове этой ф-ции

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. function sys($action,$value)
  3. {
  4. static $SYS_NW;
  5. if($action==='get')
  6. {готовит данные для вывода
  7. return $value;
  8. }
  9. elseif($action==='set')
  10. {...}
  11. ...
  12. }
  13. echo sys('get','page.name');

Здесь будут инициализироваться дополнительные переменные?
DeepVarvar пишет:
Кроме того - весь набор значений этих переменных придется расчитывать заново

Если массив статический, зачем его вновь расчитывать в рамках одной страницы?
(Добавление)
DeepVarvar пишет:
Когда кругом плодят объекты ради объектов

Да, конкретно в моей версии получается, объект ради объекта. Данные ведь нужно где-то хранить. Или массив не так эффективно распределяет память, как множество переменных?

p/s
Приведенный выше пример - лишь мысль по поводу использования.
 
 Top
tato
Отправлено: 10 Декабря, 2013 - 00:30:36
Post Id



Посетитель


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


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




ТС про Вас есть "поговорка": не читал, но осуждаю.
Да-да стак оверфлоу кишит вопросами перформанса array VS object. Там уже кучу тестов провели и знаете кричать "О, боже! Если сделать 1000 итераций, то ООП код отрабатывает на 0.001 сек дольше! ООП - шлак! Хватайте факелы и вилы!"
короче глупо это.


-----
просто ?: сложно
 
 Top
Stierus Супермодератор
Отправлено: 10 Декабря, 2013 - 16:32:44
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




Касательно Ресурсов на создание объектов:
PHP:
скопировать код в буфер обмена
  1. class test{
  2.     private $x='';
  3.  
  4.     public function __construct($x){
  5.         $this->x = $x;
  6.     }
  7. }
  8. $start = microtime(true);
  9. $data = array();
  10.  
  11. for($i=0; $i < 10000; $i++){
  12.     $data[$i] = new test(str_repeat("sdgasfdgbadfb", rand(10, 20)));
  13. }
  14.  
  15. echo "execution time: ".(microtime(true) - $start)."\r\n";
  16. echo "mem usage: ".memory_get_peak_usage() ."\r\n";

execution time: 0.022876977920532
mem usage: 6129552

PHP:
скопировать код в буфер обмена
  1. class test{
  2.     private $x='';
  3.  
  4.     public function __construct($x){
  5.         $this->x = $x;
  6.     }
  7. }
  8. $start = microtime(true);
  9. $data = array();
  10.  
  11. for($i=0; $i < 10000; $i++){
  12.     $data[$i] = str_repeat("sdgasfdgbadfb", rand(10, 20));
  13. }
  14.  
  15. echo "execution time: ".(microtime(true) - $start)."\r\n";
  16. echo "mem usage: ".memory_get_peak_usage() ."\r\n";

execution time: 0.0088150501251221
mem usage: 3881080


Много это или мало, каждый решит бля себя сам. Касательно вашего кода - главное, что бы вам было удобно. Я не очень люблю разбираться в коде, устроенном на глобальных переменных (а у вас, по сути, есть одно глобальное пространство с функциями и данными, в котором все как-то варится и меняется)
 
My status
 Top
neolinux
Отправлено: 10 Декабря, 2013 - 16:52:48
Post Id


Новичок


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


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




Stierus пишет:
Много это или мало, каждый решит бля себя сам. Касательно вашего кода - главное, что бы вам было удобно

Вполне согласен. Погорячился. Правильно сказать, предложенное мною не замена ООП, а альтернатива, его применения не исключающая. Что касается ресурсов:
задумался об организации прикмственности и представил сколько ресурсов это "сожрет". Но ведь и сам PHP работает на тех же нулях и единицах. Пусть и более эффективно, но эта приемственность и там ресурсы "жрет"...
 
 Top
Stierus Супермодератор
Отправлено: 10 Декабря, 2013 - 17:02:11
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




neolinux, пытаясь экономить ресурсы, создавая схемы вроде вашей, вы можете проиграть по ресурсам Улыбка Потому что то, что в php написано на си с учетом всех фишек zendMachine и подо что оптимизирован Zval, вы заменяете написанным на php кодом, используя медленные массивы. Глядя на ваш код, возникают вопросы вида: "почему не используются http://www.php.net/manual/ru/cla...plfixedarray.php где это возможно", "сколько памяти будут жрать ваши приложения, если абсолютно все чистится лишь при завершении скрипта, в то время как работая нормально, большая часть кода внутри функций, где переменные локальны и очищаются сразу после выхода из нее" и тд? Другими словами, пишите что бы было удобно, не старайтесь сделать быстрее, вам это врят ли удастся сейчас, а вот когда будут знания и опыт - тогда вперед на штурм баррикад
 
My status
 Top
neolinux
Отправлено: 10 Декабря, 2013 - 19:36:10
Post Id


Новичок


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


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




Stierus пишет:
пытаясь экономить ресурсы, создавая схемы вроде вашей, вы можете проиграть по ресурсам

или удастся сэкономить? Смотря что и как делать. Я же сказал, никакой наследственности. И потом, мне просто нравится выражение иерархии яваскрипт "patch.config". А "заглянуть не только к родителю, но и соседу и само приложение может.
Stierus пишет:
почему не используются http://www.php.net/manual/ru/cla...plfixedarray.php где это возможно

Если имена заменить индексами, тогда точно жопа начнется.
Stierus пишет:
Другими словами, пишите что бы было удобно, не старайтесь сделать быстрее

В том-то и дело, что мне это удобно. Взгляните, как все это описано. Мне кажется, достаточно четкая явно выраженная структура. Если сравнить с компьютером, это системная шина, куда подключаются все скрипты. Так что, ваши нападки напрасны, Америки я не открывап))).
Stierus пишет:
а вот когда будут знания и опыт

И это... Пожалуйста, не нужно учить отца... жизни
 
 Top
alexiy
Отправлено: 10 Декабря, 2013 - 20:49:47
Post Id



Посетитель


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


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




neolinux пишет:
И это... Пожалуйста, не нужно учить отца... жизни

так чего Вы тогда ожидаете от своей темы? я так понял, Вы поделились своей идеей и хотели услышать разного рода отзывы, Вы их получили и говорите не учить отца...
 
 Top
neolinux
Отправлено: 10 Декабря, 2013 - 21:23:33
Post Id


Новичок


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


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




alexiy пишет:
neolinux пишет:
И это... Пожалуйста, не нужно учить отца... жизни

так чего Вы тогда ожидаете от своей темы? я так понял, Вы поделились своей идеей и хотели услышать разного рода отзывы, Вы их получили и говорите не учить отца...

злые вы какие-то.
из двух станиц хлама нашел несколько дельных высказываний, которые помогли мне найти дополнительную реализацию массива.
спасибо большое всем участникам форума
 
 Top
caballero
Отправлено: 10 Декабря, 2013 - 21:34:06
Post Id


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


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


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




дельное предложение тут только одно - выкинуть фтопку эту "альтернативу" ООП

(Отредактировано автором: 10 Декабря, 2013 - 21:37:42)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Stierus Супермодератор
Отправлено: 11 Декабря, 2013 - 07:23:23
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




Цитата:
Всего пару лет назад впервые познакомился с ООП... и сразу отказался.

Цитата:
Но вы правы, при недостатке опыта я не могу заглянуть вперед и приходится переделывать.

Цитата:
И это... Пожалуйста, не нужно учить отца... жизни

До отца вам довольно далеко еще, но в этой теме писать перестаю, удачи вам с вашей идеей.
 
My status
 Top
tato
Отправлено: 11 Декабря, 2013 - 10:16:51
Post Id



Посетитель


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


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




neolinux пишет:
или удастся сэкономить?

Да хватит уже про скорость. Это не довод, Вы все равно не сделаете лучше если только на си не начнете писать. пример vk.com у них свой PHP(KPHP), как думаете почему они его написали? Почему не сделали массивами?
При их нагрузках можно говорить про оптимизацию перформанса, только вот решения совсем другие. В вашем случае усилия не стоят результата, в итоге получаем больше геммороя.

Возьмите и осильте наконец фреймворк какой-нибудь и не занимайтесь ерундой.


-----
просто ?: сложно
 
 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