/pr/ - Клуб изучающих PHP #138
Главная Юзердоски Каталог Трекер NSFW Настройки

Программирование

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 36 5 14
Клуб изучающих PHP #138 /php/ Аноним 19/04/24 Птн 17:17:31 3128808 1
17104329354240.jpg 110Кб, 750x857
750x857
Добро пожаловать.
Тут мы по прежнему изучаем язык PHP (а также JS/CSS/HTML/SQL) и учимся делать сайты. Зачем? Кто-то хочет открыть стартап, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.

Это тред для начинающих. Слово «классы» у тебя ассоциируется только со школой, а в аттестате тройка по математике? Ты наш человек.

Предыдущий тред был тут: >>3034858 (OP)

Старые треды тут /pr/arch/ (искать по слову php), а также на архиваче и в гугле по словам по словам "клуб изучающих PHP".

С чего начать - основы PHP

Наши уроки по PHP собраны по адресу http://codedokode.github.io/phpbook . Это учебник для изучающих с нуля. Там есть задачи, их нужно решать. Но если этот учебник тебе не нравится, можно читать любой другой. Или официальный справочник ( https://www.php.net/manual/ru/langref.php ). Или все сразу.

Если что-то непонятно, запости код и попроси подсказку или поищи задачу в архиве тредов.

Какой редактор использовать

Простые задачки можно решать в онлайн-песочницах вроде https://onlinephp.io/ , https://paiza.io/en/projects/new?language=php , https://www.programiz.com/php/online-compiler/ , но для программ посложнее лучше установить редактор. Есть (дорогая) IDE PhpStorm, есть бесплатный Netbeans и VSCode, условно-бесплатный Sublime Text. Чтобы в последних получить автодополнение для PHP, нужно установить и настроить PHP language server.

Вот инструкции по установке PHP на компьютер: https://github.com/codedokode/pasta/blob/master/soft/php-install.md
Гайд по командной строке: https://github.com/codedokode/pasta/blob/master/soft/cli.md

Что изучать дальше

Зная лишь основы PHP, сайт ты не сделаешь и работу не найдешь. Обычно от начинающего требуют чуть-чуть больше:

PHP, ООП, основы HTTP, HTML/CSS (основы верстки), JS, SQL, PDO, MVC, git, composer, какой-нибудь фреймворк (Laravel или Symfony), основы автоматического тестирования, основы linux, английский.

Вот неофициальный роадмап (карта того, что можно изучать): https://miro.com/app/board/o9J_lbUUBBQ=/

По многим из этих тем у нас есть уроки или задачки:

- для понимания, что такое веб-сервер, прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- для понимая MVC, работы с БД и формами, реши задачу про студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- далее есть более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- задача, близкая по сложности к реальным задачам на Laravel/Symfony: https://gist.github.com/codedokode/8733007
- после нее можно изучать автоматизированное тестирование https://gist.github.com/codedokode/a455bde7d0748c0a351a
- если ты все решил, переходи к Symfony или Laravel
- почитать про паттерны можно тут https://designpatternsphp.readthedocs.io/ru/latest/ (если ты не изучил ни одного фреймворка, то это будет рановато). Если хочешь увидеть примеры использования паттернов в реальном коде - ковыряй исходники Симфони, например Symfony Forms. Ну и скажем честно, начинающему без опыта, который не видел сложный код, паттерны понять будет сложно.
- для улучшения английского можно читать news.ycombinator.com - там много статей на тему IT.

Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.

- задачи на HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- хороший учебник по JS: https://learn.javascript.ru/
- задачи на JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- задача на SPA (сложно): https://github.com/codedokode/pasta/blob/master/js/spa.md
- проверялка решений на JS: http://dkab.github.io/jasmine-tests/
- задачки на SQL: https://www.sql-ex.ru/ (нужна регистрация), https://sql-academy.org/ru/trainer и немного наших задачек: https://github.com/codedokode/pasta/blob/master/db/databases.md

Что еще почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- https://phptherightway.com/
- Книга: Профессиональное программирование на PHP Джордж Шлосснейгл
- Книга: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- Про Git: https://git-scm.com/book/ru/v2
- Задачи на алгоритмы: https://codeforces.com/problemset

Дополнительно

- скачать учебник: зайди на https://github.com/codedokode/phpbook, нажми зеленую кнопку Code -> Download ZIP, распакуй на рабочий стол и открой index.html
- что будут спрашивать на собеседовании, если 0 опыта - будут гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- сколько времени надо изучать все это? - все зависит от тебя, в районе 12-24 месяцев
Аноним 19/04/24 Птн 17:43:12 3128832 2
А почему ни слова про битрикс в шапке?
Аноним 19/04/24 Птн 17:45:19 3128835 3
>>3128832
Проебался. И css забыл. Теперь новички не научатся кнопки расскрашивать. Какой же это пхп?
Аноним 19/04/24 Птн 17:55:29 3128853 4
Что такое трейты? Классы обычные, классы абстрактные, интерфейсы знаю, а это что?

Макрос, который просто при использовании (use) включает некоторый код в определение класса? По типу #define из Си?
Аноним 19/04/24 Птн 17:59:38 3128863 5
Аноним 19/04/24 Птн 18:08:21 3128877 6
Кстати, если уж добавили https://learn.javascript.ru/ с уроками по JavaScript, можно еще и эти ресурсы:
https://htmlbook.ru/ - справочник по HTML и CSS (старый)
https://webref.ru/ - справочник HTML и CSS (новый)
https://www.php.net/manual/ru/index.php - описание языка PHP и встроенных функций на русском
Я учился по PHP.SU в нулевых, но сейчас он закрылся.
Аноним 19/04/24 Птн 18:24:08 3128901 7
>>3128853
Да. Кусок логики класса, который ты можешь всунуть в любой класс. Использование трейтов считается антипатерном и хуйовой практикой
Аноним 19/04/24 Птн 18:29:18 3128906 8
>>3128877
Про denwer забыл, дедуля
Аноним 19/04/24 Птн 18:31:38 3128910 9
перекот.gif 404Кб, 220x141
220x141
>>3128835
> Проебался
В следующий раз кати с нормальными картинками сразу. Такие треды очень чувствительные к перекату и вызывают бурление по поводу проблем с шапкой. Если видишь что проебался, то кидай репорт, но только не заруинь больше никогда картинки.
Аноним 19/04/24 Птн 18:32:44 3128911 10
>>3128906
Никогда не понимал, зачем нужен этот кал. В Windows 7 без проблем ставится Apache. А в XP можно было запускать PHP на майкрософтовском IIS.
Аноним 19/04/24 Птн 18:55:30 3128929 11
О госпаде. Всетаки втулили в шапку эту простыню из говна. Похоже пыхе реально суждено не выбраться из хуиты с задачками про два стула яблока и калькулятора на хтмле и джейквери
Аноним 19/04/24 Птн 19:20:05 3128937 12
Аноним 19/04/24 Птн 19:39:24 3128951 13
image.png 147Кб, 1509x800
1509x800
>>3128929
Профессор МГУ одобряет (кроме жквери и жабоскрипта позорного).
Аноним 19/04/24 Птн 19:44:48 3128956 14
Аноним 19/04/24 Птн 22:05:48 3129098 15
>>3128951
Че блядь? Какой профессор? Че за пик? Че сказать хотел? Ты душевнобольной?
Аноним 20/04/24 Суб 02:08:34 3129266 16
>>3129098
Чмоня, ты залетный с хабры? Учи матчасть, не позорься.
Аноним 20/04/24 Суб 02:21:23 3129271 17
>>3129266
И где эту загадочную матчасть про профессоров можно изучить? Тебя мама не учила что пиздеть хуйню без ссылок - это невежливо?
Аноним 20/04/24 Суб 08:43:27 3129352 18
>>3128951
>Таксист без образования не различает профессора и доцента
Аноним 20/04/24 Суб 17:08:24 3129770 19
>>3128808 (OP)
Нужно импортировать XSLX файл. Как я понимаю без библиотек это можно сделать только при помощи класса ZipArchive. Хотел его использовать, но мне пишут, что
'ext-zip' is missing in composer.json
То есть у PHP нет встроенной поддержки работы с Zip? Ну ладно, если честно я не понимаю, может ли установка расширения Zip привлечь к нагрузке к проекту? Я не хочу писать лиду в выходной. Но просто я не знаю о последствиях, которые может привести подключение лишнего расширения. Если это как то затормозит проект, тогда вряд ли позволят его подключить, и я скажу продакту, что использовать буду CSV.
Аноним 20/04/24 Суб 18:09:48 3129827 20
>>3129770
Возможно оно установлено, но в php.ini отключено. Позырькай туда
Аноним 20/04/24 Суб 20:12:51 3129924 21
>>3128853

Трейт это набор полей и методов, которые можно добавить в любой класс.

Если ты из трейта обращаешься к методам, которых нет в трейте, и которые должны быть в использующем трейт классе, то, по моему, надо делать их абстрактными в трейте. Чтобы код был понятнее и чтобы находить ошиюки. Но почему-то почти никто так не делает.
Аноним 20/04/24 Суб 20:14:03 3129926 22
>>3128901

А аргументы есть, почему это плохая практика? Если код с ними проще и понятнее, то я не готов считать это "плохой" практикой.
Аноним 20/04/24 Суб 20:16:23 3129931 23
>>3129770

Есть библиотека phpoffice для работы с такими документами.

> То есть у PHP нет встроенной поддержки работы с Zip?

Нет, так как это не всем нужно. Если тебе нужно, то надо его установить.

> может ли установка расширения Zip привлечь к нагрузке к проекту?

Думаю, нет.
Аноним 20/04/24 Суб 20:42:15 3129948 24
>>3129926
А аргументы есть, почему множественное наследование "проще и понятнее", чем обычное?
Аноним 21/04/24 Вск 06:05:11 3130205 25
Дальше определения (в изучении JS) что такое объекты в JS не ушел, сложно будет разобраться с AJAX?
Аноним 21/04/24 Вск 07:17:54 3130219 26
>>3130205
Хэш-таблица, она же словарь, она же ассоциативный массив. Если значением поля (ключа) является функция, то оно называется методом. Все просто. Такой же механизм в Lua, но в Js есть еще и наследование. Вот в PHP не знаю, как устроены объекты.

AJAX - с помощью fetch отправляешь на сервер HTTP-запрос (GET, POST и др.), тебе приходит ответ с JSON данными (или ошибка). На хабре все описано: https://habr.com/ru/articles/252941/
Аноним 21/04/24 Вск 07:30:42 3130220 27
Аноним 21/04/24 Вск 07:32:24 3130221 28
>>3129924
>Если ты из трейта обращаешься к методам, которых нет в трейте, и которые должны быть в использующем трейт классе
Ужаснулся, какая это свалка должна быть, в жизни бы не стал прикасаться к подобному коду.
Аноним 21/04/24 Вск 07:41:38 3130223 29
>>3129271
Порридж, за вежливостью и нетоксичным общением на хабр или пикабу. А Столяров это местный мем. То, что ты не знаком с его книгами, уже говорит о многом (хотя для PHP'шника это в общем простительно).
Аноним 21/04/24 Вск 08:39:29 3130245 30
>>3130223
Больной на голову хуила, нахуя ты написал "учи матчасть", если учить нихуя не надо и никакой матчасти нет?
Аноним 21/04/24 Вск 18:27:50 3130831 31
>>3130205

JS не такой уж и сложный, если это не твой первый язык, то за неделю основные моменты прочесть и изучить можно. "AJAX" это написание кода на JS, и без знания JS тут никуда.
Аноним 22/04/24 Пнд 06:25:15 3131256 32
>>3130245
Уебывай просто нахуй отсюда, на хабру или откуда ты вылезла, чмоня.
Аноним 22/04/24 Пнд 18:43:50 3132067 33
14385124862660.png 5238Кб, 1920x1080
1920x1080
>>3128808 (OP)
Есть задача сделать некий функционал на чистом пхп, без фреймворков. Допустим, наполнить базу товарами, сделать поиск/редактирование/удаление товаров и ещё что-то в таком духе. И нужно сделать это максимально ООП-шно.

Я накидал такую схему: есть index.php, который показывает страницу с кнопками, списками и прочим. По кнопкам срабатывают js-срипты и аяксом дёргают файл-роутер router.php. В нём подгружается класс DB.php (подключение базы), Product.php (вся работа с товарами) и другие. Далее идёт разбор реквеста и определяется, какой метод нужно дёрнуть. В каждом методе свой валидатор (выносить куда-то в конструктор, а то и в отдельные файлы-реквесты и делать ларавелоподобный валидатор будет слишком наворочено, мне кажется). То есть, метод из класса Product валидирует реквест, тут же запрашивает через PDO базу, анализирует ответ и выдаёт echo, которое возвращается аяксом в браузер.

И что-то мне это не нравится. Как бы это всё более феншуйно оформить?
Аноним 22/04/24 Пнд 18:52:05 3132079 34
>>3132067

Ты случайно не переизобретаешь велосипед? Попробуй почитать про MVC и ООП-паттерны для работы с БД:

- https://github.com/codedokode/pasta/blob/master/arch/mvc.md
- https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md

> То есть, метод из класса Product валидирует реквест, тут же запрашивает через PDO базу, анализирует ответ и выдаёт echo, которое возвращается аяксом в браузер.

Ты совмещаешь 3 функции MVC в одном классе:

- управление обработкой запроса (что должен делать контроллер)
- внесение изменений в БД (задача модели)
- вывод результата (задача представления)

MVC - это как раз идея, как эту свалку кода разделить.
Аноним 22/04/24 Пнд 21:44:40 3132276 35
>>3132079
Конечно, изобретаю.

Прочитал. Не совсем понятны отличия разных схем работы с БД, и главное, как это всё применить на живом проекте. Там как будто нет кусков текста. Например, class News extends ActiveRecordBase - в ActiveRecordBase , насколько я понимаю, нужно прописать методы круда.

В первой статье разобран пример
>Сначала напишем Контроллер, который будет при обращении к нему выводить список объявлений.
Но это один контроллер. На каждый запрос писать свой контроллер, без роутера? Там же всё одинаковое, кроме самого запроса нужного метода. Логично же подгрузить всё нужное, затем выяснить, какой экшен запросили, и вызвать нужный метод нужного сервиса. Правда, получится один контроллер на всё приложение. Но блин, если по контроллеру на каждый запрос писать, они же реально практически не будут отличаться.

>- вывод результата (задача представления)
Запросы идут через аякс, следовательно, вью тут у всех одинаковый: просто джисоним то, что нужно отправить в браузер и делаем echo. Разве нет?
Аноним 23/04/24 Втр 04:04:49 3132424 36
изображение.png 83Кб, 1516x352
1516x352
Вы правда не слышали о symfonycasts? Там много хороших видеогайдов. На ютубе в основном пустышки.
Ответить в тред Ответить в тред

Check this out!

Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов