«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2019/01/05 13:51:06  №1321153 1
Всем сап. Пилю магаз, движок самописный, нужно шаблонизировать некоторый код. Правильно ли я ее делаю в 2к19, не будут ли ругаться валидаторы, не будут ли поисковые роботы кидать мой сайт во вредоносные, не будет ли это все потом тормозить при большой посещаемости?
Аноним 2019/01/05 14:04:52  №1321162 2
Ответы: >>1321248
Аноним 2019/01/05 14:30:20  №1321175 3
>>1321153
Госпаде исусе, ну и дерьмо.
1) Сейчас десятилетие SPA, але, как там слышно из 2007-го? Бек только генерит жсон и все.
2) Пых имеет отличные встроенные средства шаблонизации, гугли как это сделано в Yii. То, что ты написал - кал чистой воды.

Ну я вижу ты не слишком умный, поэтому предостерегаю: к параше типа smarty или twig не вздумай даже прикасаться.
Ответы: >>1321181 >>1321248
Аноним 2019/01/05 14:40:49  №1321181 4
>>1321175

Ты слишком категоричен, что часто бывает у неопытных разработчиков, впервые с чем-то новым познакомившихся. SPA имеет немало недостатков:

- надо разрабатывать 2 приложения вместо одного
- долгая загрузка
- больше возможностей для ошибки
- плохая индексация поисковиками

Есть случаи, когда SPA больше подходит, есть, когда нет. Я не очень понимаю, зачем делать SPA, если страницу с описанием товара может сразу отдать сервер? Вот человек кликает в Яндекс Маркете на ссылку и получает готовую страницу товара. И не надо ждать пока твой SPA загрузится, загрузит мегабайт яваскрипта, сделает 10 AJAX запросов и тд (это можно оптимизировать, но это требует времени и стоит денег. SPA обойдется гв итоге ораздо дороже). Я не очень понимаю, зачем тут SPA.

Если тебе хочется, чтобы у тебя при просмотре каталога страницы переключались без перезагрузки, хватит обычного jQuery, или даже pjax (это требует минимум затрат труда, подключается быстро, при этом совместимо с поисковиками).

Попробуй вместо категоричных заявлений рассматривать разные подходы со всеми плюсами и минусами.
Ответы: >>1321184 >>1321248
Аноним 2019/01/05 15:06:58  №1321191 5
>>1321153
Разметку с кодом перемешал смотрю. Нынче так уже не принято делать. Вроде как плохой стиль.
Хотя вордпрессу не мешает, лол.

Так что это скорее кунг-фу веб-мастера, чем веб-кодера. Иди в \web\ - там твои все.
Ответы: >>1321248
Аноним 2019/01/05 16:16:28  №1321248 6
>>1321162
Хороший ответ, пробежал глазками статью, теперь понял, как надо.

>>1321175
>Сейчас десятилетие SPA, але, как там слышно из 2007-го?

Да какая по сути разница? В чем принципиальное отличие SPA от кучи страничек для пользователя? Я стараюсь почти весь код серваку отдать, чтобы пользователя не нагружать ебланскими js-вычислениями.

>Пых имеет отличные встроенные средства шаблонизации, гугли как это сделано в Yii. То, что ты написал - кал чистой воды.

Окей, спасибо, погуглю.

>Ну я вижу ты не слишком умный, поэтому предостерегаю: к параше типа smarty или twig не вздумай даже прикасаться.

Похоже, что придется прикоснуться, хотя бы для расширения кругозора.

>>1321181
Двачую.

>>1321191
>Нынче так уже не принято делать
Я вот не понял, и что? Что значит "нынче"? Мне понятен мой код, а главное - работать он будет быстро.
Если отбросить весь этот мусор с кучей библиотек и тонн кода, из-за которого подвисает броузер, то мы увидим, что интернет не изменился с того же самого 2007. Просто изменился дизайн, хтмл5 заменил флеш, ssl прикрутили. Все остальное программисты усложнили сами для себя же, чтобы получать больше бабла.
Ответы: >>1321254
Аноним 2019/01/05 16:26:16  №1321254 7
>>1321248
>Я вот не понял, что значит "нынче"?
Последние 30 лет?

>Мне понятен мой код, а главное - работать он будет быстро.
Ты пишешь код не для того, чтобы он тебе был понятен.
Ответы: >>1321257
Аноним 2019/01/05 16:32:25  №1321257 8
>>1321254
>Ты пишешь код не для того, чтобы он тебе был понятен.
А кому?
Ответы: >>1321278
Аноним 2019/01/05 17:20:27  №1321278 9
>>1321257
Другим погромистам
Ответы: >>1321281
Аноним 2019/01/05 17:24:43  №1321281 10
>>1321278
Тащемта, я магаз для себя делаю.
Ответы: >>1321311 >>1321327 >>1321343
Аноним 2019/01/05 17:58:17  №1321311 11
>>1321281
Если ты не думаешь о других программистах, кто будет работать над проектом, ты - говнокодер, без вариантов, иначе быть не может.

Плюс это тебе сейчас кажется, что ты не в рот ебаться как хорошо разбираешься там. Через пару месяцев уже будешь вспоминать что и как, через полгода будешь вообще охуевать как ты мог такое высрать и хуй разберешь.
Ответы: >>1321347 >>1321462
Аноним 2019/01/05 22:53:06  №1321460 12
Прошу помощи в смене парадигмы "пишу все в одном файле, похуй на стиль и синтаксис, все равно никто кроме меня не увидит" на нормальную. Всегда писал только для себя, даже в ООП не умею.

А когда читаю - не понимаю, нахуй оно надо, если только ты не работаешь с проектами в 500кк строк.

Посоветуйте, с чего начать и что почитать по этому поводу.
Аноним 2019/01/05 22:55:30  №1321462 13
>>1321311
>Если ты не думаешь о других программистах, кто будет работать над проектом, ты - говнокодер, без вариантов, иначе быть не может.

Я не он, но взял тут симфони, написал composer update после чего он сожрал 2гб озу и ушел в своп. Нахуй не надо такие варианты.
Ответы: >>1321537 >>1321699
Аноним 2019/01/06 13:15:45  №1321698 14
>>1321460

Для начала научись правильно разбивать код на независимые функции. Скопирую из старого ответа:

-----

Видимо ты не понял идею разбиения кода на функции. Суть в том, что длинный кусок кода, который делает несколько вещей, сложно понять. Его сложно править, в нем много переменных, и можно нечаянно что-то сломать. Ну и физически прочитать 1000 или 10 000 строк кода быстро невозможно. Поэтому код разбивают на отдельные действия и выносят эти действия в функции. Так, что мы можем вместо огромной портянки кода читать только небольшую функцию, которая нас интересует.

Но для этого функции должны быть отделены от других частей кода. Они должны иметь определенное назначение (не размытое, вроде "делает одно действие, кусочек другого и готовит данные для третьего"). Они должны иметь понятное название, в котором описано их назначение. И они должны иметь понятный набор входных аргументов, что они принимают на вход, и что возвращают.

Вот пример более адекватной функции:

/** 
* Принимает на вход целое число от 0 до 999 и возвращает его
* текстовое представление.

* Например, для числа 312 вернет "триста двенадцать".
*/
function spellNumber(int $number): string

Согласись, что даже если ты не прочитал код функции, ты из описания уже понимаешь, что она делает, и как ее можно использовать. Например, так:

echo spellNumber(123) . "\n";

Комментарий /** ... */ - это комментарий в формате phpdoc ( https://ru.wikipedia.org/wiki/PHPDoc ). Слово int и string - это тайп-хинты, советую их изучить:

- http://php.net/manual/ru/functions.arguments.php#functions.arguments.type-declaration
- http://php.net/manual/ru/functions.returning-values.php

То есть ты должен в идеале каждую функцию так описать. Если ты не можешь понятно описать назначение функции и формат ее аргументов, то скорее всего, ты что-то неудачно спроектировал.

-----

Почитай про хороший код: https://github.com/codedokode/pasta/blob/master/good-code.md

Там недописанный урок, потому самостоятельно погугли про "хороший код" и выпиши еще 5-10 правил.

Потом почитай про шаблоны и про MVC:

- https://github.com/codedokode/pasta/blob/master/php/templates.md
- https://github.com/codedokode/pasta/blob/master/arch/mvc.md

Если нужны книги - поищи "Совершенный код" (Code Complete), хотя он, может быть, будет сложноват тебе.

Наконец, ООП. В ОП-посте есть учебник и в нем есть глава по ООП. Для практики попробуй решить ООП-задачи и вкинуть на проверку:

- ООП-Гостиница: https://phpclub.tech/pr/res/1082507.html#1097078
- ООП-Математика: https://phpclub.tech/pr/res/1305368.html#1309814

Предыдущие решения этих задач можно найти на phpclub.tech.

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

Насчет "нужно" - конечно, нужно, как другой человек будет разбирать твой код?
Ответы: >>1321703 >>1330538
Аноним 2019/01/06 13:17:48  №1321699 15
>>1321462

Не хочешь исследовать причины проблемы и исправить её? Или, может, кто-то из анонов хочет помочь улучшить композер? Для начала, ты бы мог дать пример composer.json и написать, что сделать, чтобы отъесть столько памяти.
Ответы: >>1330539
Аноним 2019/01/19 14:33:45  №1330181 16
Нубовопрос:
Зачем мне создавать объекты если я всегда могу обращаться к ним статически?
Аноним 2019/01/19 18:57:48  №1330425 17
>>1330181
Ой, забыл тебе ответить.
Лично я все системные функции в своей стандартной библиотеке делаю статическими. То есть все, что должно что-то принять, обработать и вернуть я всегда делаю статическим.
А вот если нужно сделать много экземпляров чего-то, к примеру, много постов, товаров, категорий сделать, которые в свою очередь наследуются от абстрактов и интерфейсов, то тут объекты лучше использовать.
Конечно, можно полностью весь сайт сделать со статическим кодом на счетчиках, но это уже не ООП подход, а что-то из разряда лямбда-исчислений, которые постепенно вытесняют ООП. Но это всего лишь мои философствования. В любом случае, каждый пишет так, как он хочет.
Ответы: >>1330426 >>1330527
Аноним 2019/01/19 21:57:28  №1330527 18
>>1330425
Честно говоря, не совсем тебя понял.

Просто я пишу платформу и пришел к тому, что у меня объектами являются только какие-нибудь йоба-интерфейсы во фронте, которые связывают все остальные классы. Большинство - статика, в которых классы больше служат для разделения по функциональным группам и понятного чтения кода проекта. По сути объектом у меня является только маршрутизатор и страница, которая уже обращается к статическим методам и генерирует себя в зависимости от запроса. И пока писал это все задался вопросом - а какой толк то, собственно, от этих объектов? Я код пытался строить таким образом, чтобы можно было модернизировать каждый модуль по отдельности (без некоторых он даже работать будет, просто ругаться начнет) и чтобы все это было максимально читаемо, и вроде это и есть принцип ооп. Не знаю. Извиняюсь за такой глупый вопрос, но рил хочтся знать. Просто какой толк от объекта, если в конце построения страницы пыха сама себя убьет?
Ответы: >>1330530 >>1330917
Аноним 2019/01/19 22:31:01  №1330530 19
>>1330527
А, и еще пару вопросов сразу, скажите плз где взять норм инфу по паттернам. А то я тока MVC освоил, а остальное не понимаю как применить в своем коде, но задачу себе поставил не по уровню и знаний временами явно не хватает. И когда можно на работу подаваться, а то заебался в магазине батрачить? Хочется сменить сферу
Ответы: >>1330668 >>1330917 >>1331374
Аноним 2019/01/19 23:16:04  №1330538 20
>>1321698
Я так понимаю, ты ОП этих тредов.
Спасибо за твой титанический труд, ты охуенен.


>Видимо ты не понял идею разбиения кода на функции. Суть в том, что длинный кусок кода, который делает несколько вещей, сложно понять. Его сложно править, в нем много переменных, и можно нечаянно что-то сломать. Ну и физически прочитать 1000 или 10 000 строк кода быстро невозможно. Поэтому код разбивают на отдельные действия и выносят эти действия в функции. Так, что мы можем вместо огромной портянки кода читать только небольшую функцию, которая нас интересует.

Разумеется, отдельные действия я выношу в отдельные функции, но зачем мне надо устраивать ООП и выносить простой код в 100500 файлов, где хуй потом разберешь что и где.

Я ПОНИМАЮ, что ты работаешь в команде, очевидно, где все погромисты должны читать код друг друга и тд, но я ведь один! Зачем мне самому устраивать в своей инфраструктуре хаос?

>То есть ты должен в идеале каждую функцию так описать.
Зачем мне ее описывать, если никто ее не увидит? Хороший тон?

>Насчет "нужно" - конечно, нужно, как другой человек будет разбирать твой код?
Я это и пытаюсь понять. Все преимущества твоих правил и рекомендаций - созданы для работы в коллективе. Если коллектива нет - эти правила нахуй не нужны, выходит. В последние дни я заметил что больше времени уделяю форматированию кода, чем собственно написанию, а большинство усилий должно уходить на алгоритмы.

И без обид, но я осмелюсь предположить - вам там про алгоритмы думать не сильно надо, надо сидеть и хуячить код. Грубо звучит, но все мои знакомые программисты так и работают.
Ответы: >>1330623 >>1331374
Аноним 2019/01/19 23:23:30  №1330539 21
>>1321699
>Не хочешь исследовать причины проблемы и исправить её?
Разумеется не хочу. Что npm, что composer - лютый пиздец. Сначала мы создаем проблему, а затем героически ее решаем костылями (безуспешно).
>Или, может, кто-то из анонов хочет помочь улучшить композер?
Сначала написал: "Убить разработчика?", но потом подумал, что и правда было бы интересно потрейсить, что там жрет 1гб озу. Попробую разобраться на днях, если не протрезвею.
Но смотри, куча народа со мной согласна https://github.com/composer/composer/issues/1898 (что характерно, они пишут про Это в 2013 году, а я в 2019, и ничего не изменилось! За 5, сука, лет).
>Yep, same here - have to increase memory limit to 1G. And indeed it eats up to 980M.
Гигабайт! Что оно делает с ним, грузит все в память одним куском, все скачанные пакеты?
>Для начала, ты бы мог дать пример composer.json и написать, что сделать, чтобы отъесть столько памяти.
https://gitlab.com/edgyemma/Postmill

inb4: написал composer update и ничего не жрет!
Ответы: >>1330540 >>1331374
Аноним 2019/01/21 02:45:08  №1331374 22
>>1330530

Поизучай код Симфони, например Symfony Forms, там есть и примеры ООП, и паттерны.

>>1330538

Не хочешь развиваться - не развивайся, дело твое. Я, наоборот, не понимаю, зачем писать плохой код и самому от этого огорчаться. Да еще и ограничивать свою карьеру. Вам нравится меньше денег получать?

> и выносить простой код в 100500 файлов, где хуй потом разберешь что и где.

Если непонятно - значит, это как раз плохо сделано. Вот попробуй ООП-гостиницу или ООП-будильник без ООП решить - получится код хуже.

> вам там про алгоритмы думать не сильно надо

Если ты думаешь про алгоритмы 2 часа и 6 часов пишешь код, то как оформление кода тебе мешает думать?

> В последние дни я заметил что больше времени уделяю форматированию кода

Я вообще не понимаю, откуда здесь трата времени. Я с самого начала пишу код как надо, и не помню, чтобы на это тратилось дополнительное время. Плюс, IDE умеют форматировать код. Нажать пробел или перевод строки - требует одинаковое количество времени.

>>1330539

> Сначала мы создаем проблему, а затем героически ее решаем

И как можно "не создавать" проблему зависимостей? Изобретать велосипед и тратить на это лишнее время?

> Что оно делает с ним, грузит все в память одним куском, все скачанные пакеты?

Ну вот выяснил бы.
Ответы: >>1331377 >>1331377
Аноним 2019/01/21 02:53:28  №1331377 23
>>1331374
>>1331374
>Поизучай код Симфони, например Symfony Forms, там есть и примеры ООП, и паттерны.
ООП и паттерны - это антипаттерны, костыли чистой воды. Если разработчик о них говорит, изучает, то это показывает его низкую квалификацию.