«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.

Клуб любителей изучать PHP 81 Аноним 2016/09/30 14:46:23  №848550 [Просмотреть]
14752359831950.png (33, 500x500)
500x500
14752359831961.jpg (188, 980x735)
735x980
14752359832032.jpg (93, 561x800)
800x561
14752359832073.jpg (135, 1280x720)
720x1280
Добро пожаловать в наш уютный тред. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

Это не чат! Высказывайтесь одним большим постом, а не цепочкой мелких

Это тред для начинающих. Не написал за свою жизнь ни одной программы и имеешь тройку по математике? Ты наш человек.

Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).

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

Двач лежит? Есть запасной тред: http://dobrochan.org/s/res/23225.xhtml#i46467

Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост, прежде чем писать код).

Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП заходит редко, где-то раз в 2-3 дня, у него мало времени, не жди его, решай задачки дальше. ОП отвечает на все вопросы по его задачкам и учебнику, а вот насчет каких-то других вещей - только если останется время. Но в треде немало анонимных экспертов разного уровня, так что вряд ли вопрос останется без ответа.

У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.

Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.

Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP, этого недостаточно. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование.

Надо переходить к более серьезным задачкам, которые научат тебя всему этому.

- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, PDO, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Symfony: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование https://gist.github.com/codedokode/a455bde7d0748c0a351a
- Если ты все решил, переходи к Symfony 2/Doctrine 2
- Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы.

Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:

https://github.com/codedokode/pasta/blob/master/soft/php-install.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md

Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md

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

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

- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- 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/
- MySQL: https://github.com/codedokode/pasta/blob/master/db/databases.md

Что почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1

Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492

Платиновые вопросы

- Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.
- Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.ru/6bfCY9lfl и получи личную немного устаревшую оффлайновую копию сайта (можно читать хоть на андроиде без интернета)
- Что надо знать чтобы найти работу - разработчику: PHP, SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк. Верстальщику - HTML/CSS, JS, jQuery
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Посоветуйте редактор кода - Sublime Text 3, Notepad++, PhpStorm
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
- Что самое главное для программиста? Умение аккуратно оформлять код.
- ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
- Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Нажмите Просмотреть, чтобы открыть.
Аноним 2016/11/03 01:51:05  №868843
>>868427

Мы уже в новом треде, переходи туда.
Аноним 2016/11/04 04:59:34  №869528
14782247744300.jpg (294, 1164x1164)
1164x1164
Ответы: >>872036
Аноним 2016/11/08 08:03:30  №872036
>>869528

Мы уже в новом треде.

Задача решена верно, хотя я бы не ставил echo в функцию, а сделал бы чтобы она просто возвращала строку.


Клуб изучающих PHP 80: Последний летний. Аноним 2016/08/23 10:21:30  №825576 [Просмотреть]
Добро пожаловать в наш уютный тред. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

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

Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.

Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).

Предыдущий (неофициальный) тред был тут: >>807538 (OP)
и тут:
https://2ch.hk/pr/res/807538.html

Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост прежде чем писать код).

Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.

Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП заходит редко, где-то раз в 2-3 дня, у него мало времени, не жди его, решай задачки дальше. ОП отвечает на все вопросы по его задачкам и учебнику, а вот насчет каких-то других вещей - только если останется время. Но в треде немало анонимных экспертов разного уровня, так что вряд ли вопрос останется без ответа.

У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.

Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.

Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP, этого недостаточно. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование.

Надо переходить к более серьезным задачкам, которые научат тебя всему этому.

- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, PDO, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование
- Если ты все решил, переходи к Symfony 2/Doctrine 2
- Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы.

Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:

https://github.com/codedokode/pasta/blob/master/soft/php-install.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md

Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md

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

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

- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- 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/
- MySQL: https://gist.github.com/codedokode/10539213

Что почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1

Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.ru/6bfCY9lfl и получи личную немного устаревшую оффлайновую копию сайта (можно читать хоть на андроиде без интернета)
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Нажмите Просмотреть, чтобы открыть.
Старые ответы Аноним 2016/10/05 05:37:40  №850874
>>841842

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

>>841862

Если записи в последних 2 колонках имеют разный вид группировки (по должности и по отделу соответственно), то для последней колонки стоит сделать отдельный подзапрос и приджойнить его к основному.

А у тебя подзапрос по моему вообще лишний. Зачем он там нужен? Первые 4 колонки получаются обычной группировкой.

Также, у тебя избыточное условие группировки: GROUP BY dep.department_id, po.post_id - тут хватит одной колонки.

Если что, у нас в ОП посте есть задачки на SQL, чтобы лучше его понимать.

>>842122

Композер - это менеджер пакетов
PDO - это расширение, которое позволяет работать с базой данных

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

>>842130

на практике большинство проектов большие. Проекты где "4 строчки на PDO" бывают разве что в учебных курсах.

Композер надо знать, если ты хочешь делать проекты на php. Как и PDO.

>>842130

> шаблоны отделять от логики отображения.
Непраивльно. Шаблоны с логикой отображения внутри надо отделять от логики обработки данных. В примере в верхней половине простая логика работы с данными, а в нижней - шаблон. В реальном приложении это будут 2 отдельных файла.

>>843323

new Twig_Lexer еще может вызвать срабатывание автозагрузчика и обращение к диску, но я что-то сомневаюсь что в этом дело.

>>843362

Сайт, который ты просматриваешь, у тебя на локальном компьютере или на хостинге? хостинги могут добавлять к ответам заголовки вроде "закешировать этот файл на N часов". Решается либо очисткой кеша в браузере, либо отключением, либо разработкой у себя локально.
Старые ответы Аноним 2016/10/05 05:38:19  №850875
>>843899

.htaccess наверно нужен.

>>844390

Надо смотреть заголовки HTTP ответа в отладчике браузера.

>>844408

Я не могу на 100% быть уверен, но возможно обрезается из-за того, что расширение в URL стоит PNG, а Content-Type в HTTP ответе стоит text/html. Возможно из-за противроречия фаерфокс обрезщает имя файла. Или же из-за того, что ты использовал

attachment; filename=' . basename($path))

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

И кстати в комментариях к задаче вроде упомянуто, что использовать filename= не надо.

>>844746

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

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

Для начала, мы "парсим" (делаем лексический анализ, если говорить умным языком) выражение, преобразуя строку в массив токенов (лексем): "2 + 2 / 2" => ['2', '+', '2', '/', '2'].

Затем, используя алогритм сортировочной станции, мы преобразуем массив токенов в выражение в обратной польской нотации - RPN (это когда знак операции пишут не между операндами, а после): ['2', '+', '2', '/', '2'] => ['2', '2', '2', '/', '+'].

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

Нам остается только вычилить значение в обратной польской нотации.

Ссылки:

- https://habrahabr.ru/post/100869/
- https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%B0%D0%BD%D1%86%D0%B8%D0%B8
- https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C

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

- сначала выражение разбивается на токены
- затем мы проходим по массиву токенов и, учитывая приоритет операций, делаем синтаксический анализ. На выходе мы получим AST = дерево разбора (абстрактное синтаксическое дерево). Это такая конструкция, состоящая из узлов, которые соответствуют числам и операциям:

- http://aliev.me/runestone/Trees/ParseTree.html
- https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7

Простейший способ получить дерево разбора - это алгоитм рекурсивного спуска. Есть и более сложные алгоритмы.

Имея дерево, мы можем вычислять значение выражения или делать над ним любые преобразования.

Компиляторы и интерпретаторы языков программирования (включая php) разбирают текст программы примерно так же - сначала выделяют токены, а потом строят дерево (в случае php это будет большое дерево вида файл -> класc -> определения констант, полей и функций -> список команд -> составляющие команды, части выражений).

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

Если тебе захочется больше почитать про алгоритмы, то могу посоветовать такие ссылки:

- http://aliev.me/runestone/
- SICP, перевод на русский: http://newstar.rinet.ru/~goga/sicp/
- гуглить "лексический и синтаксический анализ"
- книга "Ахо А., Сети Р., Ульман Д. Компиляторы. Принципы, технологии, инструменты." (довольно сложная)
Старые ответы Аноним 2016/10/05 05:38:37  №850876
>>844838

> http://ideone.com/Y4C4Li

> if ($billsRequired <= $billsInATM) {
> return $billsRequired;
> } else {
Тут можно просто использовать min/max

Решено верно.

> http://ideone.com/lLK5bn

> "#\R#u
По моему это неудачный выбор. В windows конец строки обозначается 2 символами \r\n, в линуксе - только \n. Таким образом, лучше разбивать по \n.

Удалить оставшийся \r можно через trim().

> $lengths = array_map(function ($match) {
> return mb_strlen($match);
> }, $matches);
array_map('mb_strlen', $matches)

Название функции является чем-то вроде указателя на нее:

- http://php.net/manual/ru/language.types.callable.php
- https://habrahabr.ru/post/259991/

Решено верно.

> http://ideone.com/tAGMVF

> (count($order) > $skip - 1)
можно написать еще как count(..) >= $skip

> $temp_array = array_merge(array_slice($order, $skip - 1), array_slice($order, 0, $skip - 1));
Чтобы вырезать элемент из середины, есть array_splice. Чтобы перенумеровать индексы по порядку, есть array_values.

Считает верно.

>>844883

Загугли кусок кода из статьи: https://www.google.ru/search?q=class+Asset+implements+ContainsRecordedMessages&newwindow=1&gbv=1&sei=UWP0V6GdB8nIsQGK6aLgDA

http://programmingarehard.com/2015/03/04/structing-my-application.html/

>>846581

Можно посмотреть проекты из раздела trending:

https://github.com/explore
https://github.com/trending/php

Но не факт что там будут простые проекты. Без фреймворков смысла делать сайт не вижу, разве что в целях изучения основ написания приложений.

Или вот например - создание блога на Симфони: https://habrahabr.ru/post/301760/

Но вообще, тебе надо бы начинать с основ, изучения ООП и MVC, у нас есть задачки на обе этих темы в ОП посте. По ООП есть глава в моем учебнике.


PHP THREAD Аноним 2016/07/28 18:52:22  №807538 [Просмотреть]
14697211425470.png (32, 500x500)
500x500
14697211425471.jpg (29, 300x428)
428x300
14697211425482.jpg (38, 604x453)
453x604
14697211425493.jpg (61, 488x604)
604x488
PHP Thread не легитимный, поднятый непонятно кем, откуда-то со дна.

Добро пожаловать в наш уютный тред. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

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

Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.

Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).

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

Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост прежде чем писать код).

Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.

Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП заходит редко, где-то раз в 2-3 дня, у него мало времени, не жди его, решай задачки дальше. ОП отвечает на все вопросы по его задачкам и учебнику, а вот насчет каких-то других вещей - только если останется время. Но в треде немало анонимных экспертов разного уровня, так что вряд ли вопрос останется без ответа.

У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.

Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.

Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP, этого недостаточно. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование.

Надо переходить к более серьезным задачкам, которые научат тебя всему этому.

- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, PDO, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование
- Если ты все решил, переходи к Symfony 2/Doctrine 2
- Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы.

Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:

https://github.com/codedokode/pasta/blob/master/soft/php-install.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md

Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md

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

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

- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- 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/
- MySQL: https://gist.github.com/codedokode/10539213

Что почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1

Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.ru/6bfCY9lfl и получи личную немного устаревшую оффлайновую копию сайта (можно читать хоть на андроиде без интернета)
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
Подскажи сайты для поиска работы, я не умею гуглить?
— hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Нажмите Просмотреть, чтобы открыть.
Ответы 6-19 августа Аноним 2016/09/04 13:25:49  №835054
>>821213

> PHP Notice: Undefin ed variable:

Это надо исправить.

> return .... .= ....;
не надо писать несколько действий (присваивание и ретурн) в 1 строку, надо разбить это на 2 команды. Также, конкатенация склеивает строки, а не складывает числа. Отсюда и нули.

Название функции должно начинаться с глагола.
Аноним 2016/09/04 22:02:12  №835551
>>835052
> $text = str_replace("[]", "", $text);
> Интересно, а это-то зачем? Так, решено верно.

А это нужно для вот этого:
> $text = preg_replace($regexp, "$1[$2]$3[$4]", $text);

$2 и $4 заключены в квадратные скобки, но значения в них могут быть пустыми и в этом случае в тексте будут появлятся лишние "[]". Поэтому, я решил после этой строки вставить чистку пустых квадратных скобок, но мне кажется, есть, наверное, более красивое решение этого.

Извиняюсь, если ответил не в том треде, в котором надо.
Аноним 2016/09/06 15:10:36  №836560
>>817655
Главное выложи записи потом где-нибудь.

Клуб изучающих PHP 79 Аноним 2016/07/11 19:12:16  №793705 [Просмотреть]
14682535369120.png (32, 500x500)
500x500
14682535369121.jpg (132, 1024x683)
683x1024
14682535369162.png (188, 853x480)
480x853
14682535369203.jpg (118, 1024x768)
768x1024
Добро пожаловать в наш уютный тред. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

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

Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.

Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).

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

Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост прежде чем писать код).

Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.

Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП заходит редко, где-то раз в 2-3 дня, у него мало времени, не жди его, решай задачки дальше. ОП отвечает на все вопросы по его задачкам и учебнику, а вот насчет каких-то других вещей - только если останется время. Но в треде немало анонимных экспертов разного уровня, так что вряд ли вопрос останется без ответа.

У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.

Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.

Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP, этого недостаточно. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование.

Надо переходить к более серьезным задачкам, которые научат тебя всему этому.

- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, PDO, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование
- Если ты все решил, переходи к Symfony 2/Doctrine 2
- Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы.

Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:

https://github.com/codedokode/pasta/blob/master/soft/php-install.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md

Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md

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

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

- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- 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/
- MySQL: https://gist.github.com/codedokode/10539213

Что почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1

Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.ru/6bfCY9lfl и получи личную немного устаревшую оффлайновую копию сайта (можно читать хоть на андроиде без интернета)
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Нажмите Просмотреть, чтобы открыть.
Аноним 2016/08/10 14:25:50  №817158
Аноним 2016/08/11 11:53:52  №817707
>>817158

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

Алсо мы уже в новом треде, лучше там задавать вопрос
Аноним 2016/08/11 15:16:45  №817864
https://github.com/someApprentice/Students

>>815058
>Это верно. Потому что тут ты меняешь тип метода, и соответственно придется менять места его использования. А вот если тип остается прежним, но например, меняется алгоритм хеширования (или исправляется ошибка в нем) - остальной код трогать не придется.
Но если мы не меняем тип, то остальной код тоже не придётся трогать. Не могу понять как инкапсуляция тут помогает.


>>815058
>> public function setProperty($property, $value) {
>Это вообще не очень хорошая вещь. Во-первых, она не проверяет имя поля и позволяет создать поле с любым именем. Во-вторых, она по большому счету нарушает инкапсуляцию. Потому что, если ты добавишь в сеттер setName() какую-то проверку, то она не будет вызвана в setProperty().
У меня есть похожие методы на этот которые обращаются к полям не через сеттеры. Их тоже следует исправить?


>>815058
>Ну иногда такие классы называют Сервис, иногда Хелпер.
Тогда я бы предпочел иметь Сервисы (классы отвечающие за внутреннюю логику) и Хелперы (классы содержащие вспомогательные методы) в разных директориях. Это не критично если я буду пользоваться таким подходом?
По хорошему, мне, наверно, следует перенести логику из контролеров в сервисы.


https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/StudentGateway.php#L10
Я решил не раздувать код и сделать сортировку или получение определенного количество записей прям в функции getAllStudents(), потому что у неё одинаковый запрос. Следует ли её переименовать в связи тем что она теперь может получать не всех студентов?

>$limit = 2147483647
В мануале по mysql сказано о том что если нужно получить все записи, то нужно указать какое-то большое число

https://dev.mysql.com/doc/refman/5.7/en/select.html
>To retrieve all rows from a certain offset up to the end of the result set, you can use some large number for the second parameter. This statement retrieves all rows from the 96th row to the last:
>SELECT * FROM tbl LIMIT 95,18446744073709551615;
Это действительно так? Бывают ли на практике такие ситуации что нужно получить количество записей большее чем позволяет максимальное значение int?


https://github.com/someApprentice/Students/blob/master/app/Controller/Controller.php#L22
Для борьбы с sql инъекциями, я решил что удобней будет делать проверку на разрешенные колонки в методе получения запроса, чем в методе выполнения этого запроса. Так ведь тоже можно?

https://github.com/codedokode/pasta/blob/master/security/sql-injection.md#Методы-борьбы
>if (!in_array($sort, $allowed)) {
> $sort = $allowed[0];
>}
А почему $allowed[0] возвращает найденное значение? Я в мануале не нашел чтобы описывался такой синтаксис, и у меня не получилось сделать так же в моем условии https://github.com/someApprentice/Students/blob/master/app/Controller/Controller.php#L35


https://github.com/someApprentice/Students/blob/master/app/Controller/IndexAction.php#L38-L53
https://github.com/someApprentice/Students/blob/master/app/Controller/SearchAction.php#L29-L44
Это ведь тоже копипаста, верно? Я только что подумал что это код можно вынести в отдельный методов родителя контроллеров. Скоро исправлю.

https://github.com/someApprentice/Students/blob/master/app/Model/Helper/LoginHelper.php#L55
Я помню как ты говорил, что методы можно делать статическими если всегда будут возвращать одно и то же значение и не имеют никаких зависимостей, но в этот метод передается и меняется класс Student. Не является ли это зависимостью?

Если мы инкапсулируем методы то не следует нам их сделать закрытыми?

https://github.com/someApprentice/Students/blob/master/app/Model/Helper/LoginHelper.php#L61
https://github.com/someApprentice/Students/blob/master/app/Model/Helper/LoginHelper.php#L68
Как закрыть эти методы? Если я пытаюсь обратиться к ним в статическом методе через $this, то я получаю ошибку о том что обращаюсь не в контексте объекта.



Клуб изучающих PHP 78 Аноним 2016/06/14 23:41:43  №769611 [Просмотреть]
14659369035970.png (32, 500x500)
500x500
14659369035981.jpg (132, 1024x683)
683x1024
14659369036012.jpg (26, 650x384)
384x650
14659369036013.png (3449, 1920x1080)
1080x1920
Добро пожаловать в наш уютный тред. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

Это не чат! Пожалуйста не флудите, а старайтесь постить только вопросы, решения и ответы. Сколько лет вы не можете найти работу никому не интересно. Высказывайтесь одним большим постом а не цепочкой мелких

Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.

Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).

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

Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост прежде чем писать код).

Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.

Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП заходит редко, где-то раз в 2-3 дня, у него мало времени, не жди его, решай задачки дальше. ОП отвечает на все вопросы по его задачкам и учебнику, а вот насчет каких-то других вещей - только если останется время. Но в треде немало анонимных экспертов разного уровня, так что вряд ли вопрос останется без ответа.

У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.

Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.

Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP, этого недостаточно. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование.

Надо переходить к более серьезным задачкам, которые научат тебя всему этому.

- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, PDO, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование
- Если ты все решил, переходи к Symfony 2/Doctrine 2
- Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы.

Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:

https://github.com/codedokode/pasta/blob/master/soft/php-install.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md

Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md

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

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

- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- 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/
- MySQL: https://gist.github.com/codedokode/10539213

Что почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1

Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.ru/6bfCY9lfl и получи личную немного устаревшую оффлайновую копию сайта (можно читать хоть на андроиде без интернета)
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.

Шапка треда: http://pastebin.com/mP2aPRBb
Нажмите Просмотреть, чтобы открыть.
Ответы Аноним 2016/07/16 00:56:55  №797241
>>781871

Надо давать нормальные ирмена переменным. Если ты не можешь придумтаь нормальное имя, получается ты сам не можешь сформулировать, зачем тут эта переменная и что она значит?

Также, у тебя там ошибка- обращение к еще не существующей переменной:

> PHP Notice: Undefined variable: pureNum in /home/KZQmiP/prog.php on line 13

По алгоритму - не надо ничего разбивать на части. Надо просто удалить (заменить на пустую строку) все не подходящие символы с помощью preg_replace.

>>782394

Нет, не проще. Это костыли. Это не проще, а сложнее и больше шанс ошибиться. Где гарантия что ты перечислишь все пааки и ничего не забудешь? В команде, кто-то может добавить новый файл и не закрыть доступ к нему. Публичная папка потому и называется публичная что в нее кладется то, что предназначено для публичного распространения. Что не предназначено - не надо туда класть.

>>782503
>>782508

Не знаю, займсиь отладкой, смотри что приходит, что уходит.
>>783071

> https://ideone.com/t2U2f3
С "а" или "но" ненадежно сделано - перед ним может быть не только запятая, но и например двоеточие или другой знак. Пробел не обязательно будет ровно один.

В остальном верно.

> https://ideone.com/KohVif
Тут то же самое замечание, в остальном верно.

> https://ideone.com/0Ye4lY
в общем верно, хотя у тебя он не подсветит вторую опечатку в том же слове вроде тOпOр

>>784017

http://ideone.com/0hmsEY // Кошки-мышки

Константы заводить не требуется - можно использовать имя класса и получать его как Cat::CLASS

> protected $xy = array();
Непонятно, зачем тут массив и какое у него преимущество перед 2 отдельными полями. Скорее наоборот, неудобно работать.

Ну и вроде по этой задаче я уже писал ниже: >>791267 >>792620
Ответы Аноним 2016/07/16 00:57:17  №797242
>>784979

Не знаю.

>>785859
>>785862

Надо использовать повторение. Ну например a{5} ищет 5 букв a подряд, \d{5} ищет 5 цифр подряд - тебе надо примерно то же.

> но я не могу понять как, если бы не было пробелов, скобок и -, я бы написал [\d]{10} но это не прокатит
Можно взять часть выражения в круглые скобки и применить повторение к ним.

>>785910

Молодец, верно.

>>785990

Я тоже не знаю.

>>786040

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

>>786745

Не, там надо по-другому. Разбиваешь стих на строки. Сначала выводишь первую букву каждой строки, затем вторую, затем третью и тд.
Тред закрыт Аноним 2016/07/16 00:58:31  №797246
Я ответил на все вопросы, проверил все задачи. Если я кого-то пропустил - напомните о себе в новом треде >>793705 (OP)

Не пишите здесь больше, никто не прочтет. Переходите в новый тред.

Клуб изучающих PHP 77 Аноним 2016/05/25 14:12:09  №753595 [Просмотреть]
14641747291690.png (33, 500x500)
500x500
14641747291691.jpg (132, 1024x683)
683x1024
14641747291702.jpg (26, 650x384)
384x650
14641747291703.png (3449, 1920x1080)
1080x1920
Добро пожаловать в наш уютный тред. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

Это не чат! Пожалуйста не флудите, а старайтесь постить только вопросы, решения и ответы. Сколько лет вы не можете найти работу никому не интересно. Высказывайтесь одним большим постом а не цепочкой мелких

Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.

Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).

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

Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост прежде чем писать код).

Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.

Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП заходит редко, где-то раз в 2-3 дня, у него мало времени, не жди его, решай задачки дальше. ОП отвечает на все вопросы по его задачкам и учебнику, а вот насчет каких-то других вещей - только если останется время. Но в треде немало анонимных экспертов разного уровня, так что вряд ли вопрос останется без ответа.

У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.

Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.

Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP, этого недостаточно. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование.

Надо переходить к более серьезным задачкам, которые научат тебя всему этому.

- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, PDO, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование
- Если ты все решил, переходи к Symfony 2/Doctrine 2
- Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы.

Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:

https://github.com/codedokode/pasta/blob/master/soft/php-install.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md

Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md

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

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

- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- 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/
- MySQL: https://gist.github.com/codedokode/10539213

Что почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1

Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.ru/6bfCY9lfl и получи личную немного устаревшую оффлайновую копию сайта (можно читать хоть на андроиде без интернета)
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Нажмите Просмотреть, чтобы открыть.
Ответы https://github.com/someApprentice/Students Аноним 2016/06/25 04:20:40  №779253
>>774640

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

- записывать хеш независимо от того праивльный ли пароль
- записывать хеш только после успешной проверки

>>>if (Helper::validCSRFtoken($_GET['token']) and $this->loginAction->isLoggedIn()) {
>>> $student = $this->studentGateway->getStudentByСolumn('id', $_COOKIE['id']);
>>Вот здесь странно. Если у тебя есть сервис авторизации и ты через него проверяешь залогиненность, то разве не логично через него же и получать текущего пользователя? Почему у тебя проверка залогиненности в одном месте, а получение пользователя - в другом?
> Не знаю, мне казалось что если есть какая-то проверка на что-то, то результат должен быть true\false и не более.
> Вообще это очевидно что результат должен быть в зависимости от требований задачи, но я и представить не мог что такое где-нибудь понадобиться. То есть я думал что этот метод будет использоваться только в проверках, и в моем случае изначально после проверки на залогиненность была проверка на токен а потом уже получение пользователя.
Да ошибка не в этом. Ошибка в том что проверяешь залогиненность ты методом класса loginAction, а получаешь залогиненного пользователя другим путем. Один класс должен отвечать и за проверку залогиненности и за получение текущего пользователя. Потому что это части одной задачи.

Ну то есть если сформулировать по другому: работа с кукой 'id' должна быть собрана только в одном классе. Больше она не должна нигде использоваться.

И это должен быть сервис (хелпер), а не контроллер. А ты пытаешься использовать контроллер как будто это сервис.

>>$isEdit = $this->loginAction->isLoggedIn();
> Если результат этого метода будет сущность студента, то ничего страшного если переменная $isEdit будет содержать не булевое значение? Ведь на практике это можно применить точно так же.
Можно но тогда надо метод переименовать.

>>Более того, проверяешь авторизацию ты контроллером, а залогинаваешь пользователя в классе со странным названием StudentCookies.
> В каком именно месте это не правильно? В месте где я перезалогиниваю пользователя после редактирования?

1) код в контроллере не предназначен для повторного использования. для этого есть хелперы. Ты поместил код не туда (в контроллер вместо хелпера) и из-за этого вынужден использовать контроллер как хелпер.
2) каждый класс занимается своим делом. Работать с авторизационными куками должен один класс, который за это отвечает. У тебя работа с ними размазана по всей программе.

>>По моему это нелогично, что код, отвечающий за авторизацию разбросан по всему приложению. Мне кажется, логичнее сделать единый сервис авторизации, который умеет:
> Но ведь уже есть контроллер который занимается этим. Или ты имеешь ввиду переделать так чтобы контроллер пользовался вышеперечисленными методами сервиса?
Код в контроллере не стоит повторно использовать, например вызывать из других мест. Это не соответствует идее MVC. Контроллер это тот, кто управляет обработкой запроса от пользователя. Ты не должен создавать контроллер для каких-то других целей, например, чтобы узнать текущего залогиненного пользователя.

Надо было код отвечающий за авторизацию вынести в хелпер. ты вместо этого раскидал его по разным контроллерам.

>>Далее, нет логики в наследовании хелперов. Вот у тебя есть Helper и есть LoginHelper, который его наследует. Непонятно, а зачем? Там все равно почти все методы статические. Точнее, часть статическая, а часть нет, и почему, непонятно.
> А разве в одном классе все методы должны быть либо статические либо не статические? Почему?
Такого ограничения нет. Но должна быть какая-то логика по которой ты делаешь метод статическим или нет. Например, одинаково ли его поведение всегда или разное для разных объектов. Можно ли его вызывать не имея объекта или наоборот, он имеет смысл только если есть объект. У тебя там такой логики нету, слово static поставлено произвольно.

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

>>В студенте, непонятно, а зачем у тебя там и токен, и пароль? Если ты исплоьзуешь вход по паролю, то токен по моему не нужен.
> Так токен нужен же для защиты от CSRF. Его удобно держать в студенте, потому что мы создаем куки на его основе.
Токен для защиты от CSRF не имеет никакого отношения к студенту. Потому что:

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

Ты точно читал урок про защиту от CSRF? Токен CSRF сохранять в базу не нужно. Одна копия токена хранится в куке, другая - в скрытом поле формы. База данных тут не нужна.
Ответы 7-20 июня Аноним 2016/06/25 04:21:05  №779254
>>775011

Про ООП рассказывается в том числе в книгах которые есть в ОП посте (Зандстра, Шлосснейгл)

>>775013

Вот этот раздел официального мануала прочитать: http://php.net/manual/ru/book.mysqli.php

Наизусть запоминать ничего не надо, только почитать.
Тред закрыт Аноним 2016/06/25 04:21:55  №779255
Этот тред закрыт. Не пишите здесь больше, все равно никто не прочтет.

Переходите в новый тред >>769611 (OP)

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

Клуб изучающих PHP 76 Аноним 2016/04/28 14:18:31  №729430 [Просмотреть]
14618423114790.png (33, 500x500)
500x500
14618423114791.jpg (132, 1024x683)
683x1024
14618423114802.jpg (34, 650x384)
384x650
14618423114803.png (3449, 1920x1080)
1080x1920
Добро пожаловать в наш уютный тред. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

Это не чат! Пожалуйста не флудите, а старайтесь постить только вопросы, решения и ответы. Сколько лет вы не можете найти работу никому не интересно. Высказывайтесь одним большим постом а не цепочкой мелких

Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.

Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).

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

Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост прежде чем писать код).

Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.

Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП заходит редко, где-то раз в 2-3 дня, у него мало времени, не жди его, решай задачки дальше. ОП отвечает на все вопросы по его задачкам и учебнику, а вот насчет каких-то других вещей - только если останется время. Но в треде немало анонимных экспертов разного уровня, так что вряд ли вопрос останется без ответа.

У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.

Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.

Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP, этого недостаточно. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование.

Надо переходить к более серьезным задачкам, которые научат тебя всему этому.

- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, PDO, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование
- Если ты все решил, переходи к Symfony 2/Doctrine 2
- Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы.

Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:

https://github.com/codedokode/pasta/blob/master/soft/php-install.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md

Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md

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

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

- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- 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/
- MySQL: https://gist.github.com/codedokode/10539213

Что почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1

Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.ru/6bfCY9lfl и получи личную немного устаревшую оффлайновую копию сайта (можно читать хоть на андроиде без интернета)
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Нажмите Просмотреть, чтобы открыть.
Ответы Аноним 2016/05/27 08:00:07  №755115
>>749300

git branch , git config, got log -p, git diff , git reset

>>750126

тебя https://github.com/TheSidSpears/Students я наверно проверю позже в новом треде >>753595 (OP)

>>751035

> Не знаю как из класса теста обратиться к доктрине.
Получить через контейнер

> где предлагают возню с xml-ными конфигами и дампами.
Вообще если дамп в том же csv или yaml то это удобнее чем код писать, меньше лишнего.

>>751212

Отлаживай код. Натыкай var_dump и посмотри что в переменных, смотри, какие ветки выполняются, а какие нет, сдампь что пришло в var_dump($_POST); и тд.

Также, надо либо включить режим вывода ошибок (display_errors) если речь о тестовом сервере либо смотреть их в логах (погугли) если речь о продакшене.

>>753816

> Кстати то он в статье делает прямой shell_exec, я у себя обернул в примочки симфони, что-то типа
> $application->run(new StringInput($command));
разниа есть, в первом случае запускается shell и из него процесс php, во втором все внутри текущего процесса происходит
Тред закрыт Аноним 2016/05/27 08:00:53  №755116
Аноны, я всем ответил (кроме нескольких человек которым планирую ответить в следующем треде).

Переходите в новый тред >>753595 (OP)

Аноним 2016/05/27 08:01:21  №755117
Если я кого-то пропустил - напомните о себе в новом треде.

Клуб изучающих сами знаете что 75 Аноним 2016/04/12 22:38:51  №715010 [Просмотреть]
14604899315960.png (32, 500x500)
500x500
14604899315971.jpg (132, 1024x683)
683x1024
14604899316002.jpg (157, 980x735)
735x980
14604899316043.jpg (153, 1024x768)
768x1024
Добро пожаловать в наш уютный тред. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

Это не чат! Пожалуйста не флудите, а старайтесь постить только вопросы, решения и ответы. Сколько лет вы не можете найти работу никому не интересно. Высказывайтесь одним большим постом а не цепочкой мелких

Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.

Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).

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

Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост прежде чем писать код).

Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.

Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП заходит где-то раз в 2-3 дня, не жди его, решай задачки дальше. ОП отвечает на все вопросы по его задачкам и учебнику, а вот насчет каких-то других вещей - только если останется время. Но в треде немало анонимных экспертов разного уровня, так что вряд ли вопрос останется без ответа.

У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.

Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.

Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP, этого недостаточно. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование.

Надо переходить к более серьезным задачкам, которые научат тебя всему этому.

- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, PDO, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование
- Если ты все решил, переходи к Symfony 2/Doctrine 2
- Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы.

Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:

https://github.com/codedokode/pasta/blob/master/soft/php-install.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md

Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md

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

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

- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- 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/
- MySQL: https://gist.github.com/codedokode/10539213

Что почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1

Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.ru/6bfCY9lfl и получи личную немного устаревшую оффлайновую копию сайта (можно читать хоть на андроиде без интернета)
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Нажмите Просмотреть, чтобы открыть.
Ответы 28 апр Аноним 2016/05/01 15:20:40  №731913
>>728653

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

> Тулбар в prod-режиме не показывается (если я правильно понял методом тыка), только в dev.
По моему это все же в конфигах задается и видимо в дев конфиге эта опция просто включена.

> Чо теперь делать? Что куда прописать чтобы устанавливалась stable версия?
Тут пишут http://symfony.com/doc/current/book/installation.html#creating-a-symfony-application-with-composer что composer create-project должен ставить стабильную версию. Ты как ставил?

Видимо dev тут значит не то, что это нестабильная версия, а что-то другое. Тут нет ответа?

http://symfony.com/doc/current/contributing/community/releases.html
http://symfony.com/roadmap


далее овтет тут, спамфильтр: http://pastebin.ru/cecYoQPo

>>728926

> И как мне такой фильтр сделать на странице? Нужно будет писать запросы к базе данных?
Не знаю. Если в вордпрессе есть готовый код сортировки и ты его используешь то может и нет.
https://github.com/fidnex/students Аноним 2016/05/01 15:21:07  №731915
>>729039

Это не все, только что с первого взгляда видно

https://github.com/fidnex/students/blob/master/config.ini
В конфиг стоит выносить только то, что можно менять. Тип БД (mysql) вряд ли можно поменять на другой, так как код рассчитан на MySQL.

https://github.com/fidnex/students/blob/master/app/Controller/ControllerMain.php#L22
> $pagination = new PaginationHelper(
> $this->container['config']->getParam('items_on_page'),
> $this->container['studentTDG']->getTotalStudent($tableHelper->search
Это стоит выносить в переменные, а не городить такие сложные выражения

https://github.com/fidnex/students/blob/master/app/Model/Helper/TableHelper.php
тут есть обращения к GET.

https://github.com/fidnex/students/blob/master/app/Controller/ControllerForm.php
тут не надо копипастить выражение $this->container['formHelper'] а стоит либо сделать поле $this->formHelper либо переменную.

> $errors = $this->container['formHelper']->getValidError($student);
> if(!isset($error['email']) && !$isAuth && $this->container['studentTDG']->checkExistEmail($student->email)) {
> $errors['email'] = 'Введенный почтовый адрес уже зарегистрирован.';
А почему эта проверка не в валидаторе, а отдельно?

https://github.com/fidnex/students/blob/master/app/Model/Gateway/StudentTDG.php#L62
какой смысл в update делать lastInsertId?

> .'surname=:surname, '
> .'gender=:gender, '
> .'sgroup=:sgroup, '
В строках и запросах можно использовать перевод строки

> public function checkExistEmail($mail) {
При редактировании надо еще проверять что найденный емайл это не наш собственный email.

> SELECT COUNT() FROM students WHERE email = ? LIMIT 1
LIMIT применяется после COUNT и ничего не решает. Если ты хочешь оптимизировать то надо делать SELECT id ... LIMIT 1

https://github.com/fidnex/students/blob/master/app/Model/Gateway/StudentTDG.php#L104
> $query->bindValue(':search', '%'.$search.'%');
Тут будет ошибка если в запросе нет этого плейсхолдера

> $sql .= " ORDER BY $sortColumn $sortType LIMIT $limit OFFSET $offset";
Нет проверки подствляемых значений по белому списку - значит нельзя сказать что тут нет инъекции. Точнее она есть. LIMIT и OFFSEt надо подставлять через плейсхолдеры с указанием INT в bindValue.

https://github.com/fidnex/students/blob/master/app/Model/Helper/AuthHelper.php#L14
Тут надо использовать иф а не городить сложное выражение

> public function setToken($token) {
Мне кажется тут уместнее бы была функция вроде "залогинить студента". ну или хотя бы переименовать эту, а то она раскрывает наружу детали как работает автоизация, а лучше бы эти детали скрыть внутри класса.

> const TOKEN_NAME = 'auth';
Я бы сделал приватным статическим полем - чтобы снаружи не было доступно

> setcookie(AuthHelper::TOKEN_NAME, $token, $expire, '', '', false, true);
path надо стаивть в / иначе кука будет доступна не на всех старницах. Почитай за что отвечает path в куках.

> public function getNewToken() {
> return md5(md5(time()rand()).md5(chr(rand(0,90))));
какой смысл в нагромождении функций если они не увеличивают число вариантов? Время очень легко предугадать, по крайней мере примерно. Надежность низкая. У тебя токен который условно говоря принимает миллион значений, а с помощью md5 ты просто раздуваешь его размер не увеличивая число вариантов. md5 это не функция для генерации токенов. Она тут бесполезна.

Давай посмотрим реальную энтропию тут:

> rand()
дает 32 бита (число от 0 до 4 млрд)

> rand(0,90)
дает 7 бит

> time()
Допустим время регистрации мы можем угадать с точностью до месяца, так что случайным остается число секунд в месяце, это около 2 млн или 21 бит.

В сумме 60 бит энтропии. Для их записи хватит 10 символов (если каждый принимает 64 значения = 6 бит), а не 32.

И почитай еще https://github.com/codedokode/pasta/blob/master/good-code.md#Не-злоупотребляй-хешированием

https://github.com/fidnex/students/blob/master/app/Model/Helper/FormHelper.php#L69
> $student->$key = strval(trim($data[$key]));
Есть гарантия что в массиве есть это поле?

Имя и фамимлию кроме длины надо проверять на допустимые символы (буквы, дефис, апостроф, пробел)

Проверка уникальности email должна быть в валидаторе вместе с другими проверками.

> $this->formFields['gender']['pattern'] = '^('.Student::GENDER_MALE.'|'.Student::GENDER_FEMALE.')$';
Выглядит неуклюже. Не лучше ли тут через in_array делать проверку?

https://github.com/fidnex/students/blob/master/templates/footer.html
размещение стилей в футере приведет к тому что может отобразиться старница без стилей на какое-то время. размещение скриптов в футере чревато тем, что при использовании <button onсlick="fn()"> до загрузки скрипта мы получаем неработающую кнопку.

https://github.com/fidnex/students/tree/master/app/View
непонятно почему шаблоны раскиданы по 2 разным папкам . думаю, нет в этом смысла.

https://github.com/fidnex/students/blob/master/app/View/form.html#L8
> value='<?=$student->name;?>'
нет защиты от XSS

> pattern='<?=$formFields['surname']['pattern']?>'
Плохо что ты тут передаешь массивы сложной непонятной структуры. Лучше получать регулярку через метод. Также, ты используешь одну регулярку для HTML и для PHP, а ты в курсе что там немного разные диалекты регулярок?

> <div class="col-md-12 text-center">Все получилось.</div>
Для уведомлений в бутстрапе есть класс alert. Изучи возможности бутстрапа.

> <th><a href='<?=$tableHelper->getSortLink('name');?>'>Имя</a></th>
надо бы еще выделять колонку и направление сортировки например стрелочкой

> <?php foreach($students as $student):?>
> <td><?=$student->name;?></td>
Лучше бы выводить через htmlspecialchars

> <a href="<?=$tableHelper->getPaginationLink($i);
Символ & в ссылках надо выводить как & amp, например за счет htmlspecialchars


>>729042

> Не совсем понятно в этой ситуации, для чего и как делать класс Компания?
А как ты представишь сущность Компания в коде? Вот у тебя есть функция, которая что-то делает с Компанией (например применяет антикризисные меры). Что ты в нее передашь? Или функция создания компании - что она вернет?

> Опять же не понимаю, как антикризисные меры к этому всему присобачить.
Можно сделать объект Антикризисный Комитет. В нем 3 метода соответствующие 3 планам. Каждый метод получает на вход Компанию и делает с ней какие-то действия.

> class Manager extends Employee {
> protected $rank = 1;
> protected $basicSalary = 500;
Вот ты переопределяешь тут базовую зарплату. А вот представь пришел новый человек и хочет сделать новую профессию. Откуда он узнает что надо переопределить это свойство? И как гарантировать что он его переопределит? Тут могут помочь абстрактные методы. И кстати базовый класс тоже стоит сделать абстрактным

> function __construct($rank, $boss = false) {
> $this->rank = $rank;
Можно не копипастить конструктор. а объявить в базовом классе 1 раз.

> public function addEmployee($profession, $amount, $rank = 1, $boss = false)
А почему департамент создает работников, а не нанимает готовых? Тебе не кажется что создание работников не совсем задача департамента? да и не понятно как например перевести работника из департамента в департамент тогда.

> str_repeat(" ", $widthOfTableCell - mb_strlen($string));
При вычитании может получиться отрицательное число

> $departmentName = $departments[$number]->getDepartmentName();
Есть же переменная department
Ответы 28 апр Аноним 2016/05/01 15:21:57  №731916
Я ответил в этом треде на все вопросы и он закрыт. Если что-то хотите добавить или я вас пропустил - велкам в новый тред >>729430 (OP)

Этот тред закрыт.

>>729303

Попробуй глянуть документацию

Клуб изучающих PHP #74 Аноним 2016/03/30 06:54:22  №702800 [Просмотреть]
14593100629480.png (33, 500x500)
500x500
14593100629491.jpg (157, 1024x683)
683x1024
14593100629522.jpg (194, 1024x768)
768x1024
14593100629563.jpg (202, 1024x768)
768x1024
Добро пожаловать в наш уютный тред. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

Это не чат! Пожалуйста не флудите, а старайтесь постить только вопросы, решения и ответы. Сколько лет вы не можете найти работу никому не интересно. Высказывайтесь одним большим постом а не цепочкой мелких

Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.

Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).

Предыдущий тред был тут: >>689537 (OP) (1000 постов!)

Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост).

Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.

Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП заходит где-то раз в 2-3 дня, не жди его, решай задачки дальше. ОП отвечает на все вопросы по его задачкам и учебнику, а вот насчет каких-то других вещей - только если останется время.

У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.

Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.

Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP, этого недостаточно. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование.

Надо переходить к более серьезным задачкам, которые научат тебя всему этому.

- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, PDO, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование
- Если ты все решил, переходи к Symfony 2/Doctrine 2
- Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы.

Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:

https://github.com/codedokode/pasta/blob/master/soft/php-install.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md

Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md

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

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

- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- 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/
- MySQL: https://gist.github.com/codedokode/10539213

Что почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1

Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.net/45000175 и получи личную немного устаревшую копию сайта
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Нажмите Просмотреть, чтобы открыть.
Аноним 2016/04/12 22:51:43  №715026
>>713959

> $lettersRus[0] = '/A/';
> $lettersRus[1] = '/a/';
> $lettersRus[2] = '/B/';
> $lettersRus[3] = '/C/';
это слишком горомоздко, и надо следить за номерами. Очень неудобно. Лучше записать так:

'...' => '...',
'...' => '...',
...

Более того, тут не нужна мощь регулярок и хватит просто strtr.

> [а-я]+([a-z]+[а-я]*)+
Можно было чуть проще: русские буквы, за ними латинская, за ними любые.

Там у тебя явная копипаста для русских и латинских слов. Избавься от нее с помощью функций.

>>714337

Нет флага u, нет привязки к краям регулярки. В случае неправльной записи налдо выводить ошибку.

> for ($x; $x < $numberOfEmployees;
Это не будет правильно работать, второй цикл будет отсчитываться не с нуля. И какой смысл вообще писать

$x

Это выражение ничего не делает, его можно вообще пропустить.

>>714423

А почему он должен работать? Почитай внимательно как работает ~.

>>714823

Не знаю. Если в PSR не написано то можно как угодно делать. Я не пишу обычно.


переход Аноним 2016/04/12 22:52:55  №715029
Аноны, переходите в новый тред >>715010 (OP)

Если кого-то я пропустил, забыл, или мы не до конца что-то обсудили - напомните о себе в новом треде.

Этот тред закрыт. не пишите здесь больше.
Аноним 2016/04/13 01:50:42  №715225
b

Клуб изучающих PHP 73 Аноним 2016/03/16 08:47:14  №689537 [Просмотреть]
14581072347800.png (33, 500x500)
500x500
14581072347811.jpg (157, 1024x683)
683x1024
14581072347842.jpg (194, 1024x768)
768x1024
14581072347883.png (3449, 1920x1080)
1080x1920
Добро пожаловать в наш уютный тред. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

Это не чат! Пожалуйста не флудите, а старайтесь постить только вопросы, решения и ответы. Сколько лет вы не можете найти работу никому не интересно. Высказывайтесь одним большим постом а не цепочкой мелких

Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.

Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).

Предыдущий тред был тут: >>678185 (OP) (1000 постов!)

Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост).

Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.

Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП отвечает даже на самые нубские вопросы. ОП заходит где-то раз в 2-3 дня, не жди его, решай задачки дальше.

У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.

Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.

Учебник дает основы языка PHP, но чтобы делать сайты, этого недостаточно. Если ты его прошел, то надо переходить в более серьезным задачкам, которые научат тебя как выдавать страницы в браузер, работе с таблицами в БД, работе с формами, MVC.

- Для начала установи Апач + PHP (советы ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование
- Если ты все решил, переходи к Symfony 2/Doctrine 2

Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:

https://gist.github.com/codedokode/10774100
https://gist.github.com/codedokode/7054af4a03865c4cc863

Может тебе понадобится пользоваться командной строкой, вот гайд https://gist.github.com/codedokode/10539568

Вот небольшой туториал по тому как начать использовать PHP на сервере для отдачи странички в браузер: https://php.net/manual/ru/tutorial.php Увы, уроков плавно подводящих к тому, как сделать задачи выше, пока нет, так что если что, задавай вопросы.

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

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

- HTML/CSS: https://gist.github.com/codedokode/58ebc90bd006baf4b35c
- 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/
- MySQL: https://gist.github.com/codedokode/10539213

Что почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1

Нужен ли ООП, фреймворки, MVC? — Да, однозначно. Посмотри любую вакансию.
Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.net/45000175 и получи личную немного устаревшую копию сайта
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Нажмите Просмотреть, чтобы открыть.
Ответы 30 марта - ООП Аноним 2016/03/31 20:28:15  №704370
>>702614

Ой-ой, это совсем не ООП. Массивы на массивах и массивами погоняют. Вот тебе паста:

--------

Когда ты решаешь задачу на ООП, ты должен ответить на вопросы:

— какие есть сущности, для которых мы сделаем классы? (Сотрудник и Департамент, может быть еще Компания?)
— какие у них есть свойства (у Сотрудника есть ранг, базовая ставка, профессия, является ли боссом). Потребление кофе или зарплата не являются свойствами так как они вычисляются из других свойств и хранить их не надо.
— что мы хотим от них получить (какие у них должны быть методы). Например мы хотим узнать сколько сотрудник заработал или сколько он пьет кофе. От департамента мы наверно хотим получить сколько всего выпито кофе и заплачено денег.
— как сущности связаны? Очевидно, Сотрудник работает в каком-то Департаменте.

Также, сразу скажу еще один совет: гораздо удобнее сделать не один класс Сотрудник, а 4 класса: Инженер, Менеджер, и т.д. Тогда мы можем легко менять например правила расчет зарплаты или кофе для каждой профессии. Естественно, копипастить одинаковый код в 4 класса не надо — создай базовый абстрактный класс Сотрудник и унаследуй от него 4 класса-профессии. Правда в этом случае мы не можем поменять профессию сотрудника.

Наследование позволяет создавать класс не с нуля. а расширяя сущетсвующий класс: http://php.net/manual/ru/language.oop5.inheritance.php

«Абстрактный» — это класс, объект которого нельзя создать. Он предназначен для наследования от него других классов: http://php.net/manual/ru/language.oop5.abstract.php

Также, ты должен для всех полей и методов расставить модификаторы доступа (pubic, private, protected - они определяют, откуда можно обращаться к полю или методу). Ты должен подумать логически и для каждого поля/метода определить: это часть кода, которая относится к внутренней логике класса и не должна быть доступна снаружи, или же это часть кода, которая должна быть доступна. Ну к примеру, в Департаменте метод посчитатьОбщиеЗатратыНаЗарплату() должен быть публичным - для этого мы и пишем класс, чтобы считать затраты.

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

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

--------

Теперь пройдемся по коду.

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

Вот у тебя класс Employees. Он видимо представляет группу однотипных работников. Первый недостаток виден сразу: а что если нам надо наградить или повысить зарплату части группы? Как ты это будешь делать? А если нам надо уволить пару человек и добавить пару новых?

Очевидно лучше сделать для каждого работника свой индивидуальный экземпляр объекта.

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

$employee = new Employee(...);
$marketing->addEmployee($employee);

А у тебя работник рождается уже приписанным к департаменту. Я думаю, это лишнее усложнение, не дающее никакой выгоды.

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

> 'Me'=>500,
Для обозначения вещей вроде профессий надо использовать константы классов, а не текстовые строки. А то опечатаешься и никто не заметит.

> $this->boss['position'] = $position;
> $this->boss['rank'] = $rank;
Непонятно зачем тут массив. Что тебе мешает напрямую значения в полях объекта хранить, а не усложнять все?

Более того, у тебя там куча аргументов в конструкторе и даже непонятно какого они типа и что хранят. Например что такое rates? Это понять невозможно.

Далее, класс EmployeeOrder. Посмотрим на его конструктор:

construct($workers, $coffe)

Абсолютно непонятная логика. почему мы кофе передаем отдельно, а зарплату например нет?

Далее, ты зачем-то копируешь данные:

> $this->employees[] = $worker->employee;
Это плохая идея. Когда у тебя 2 копии данных, непонятно как их обновлять и какая из них правильная.

Более того, мы тут имеем сложный 2-мерный массив непонятной структуры. Мы изучаем ООП и данные необходимо хранить в виде объектов. В отличие от массива, в объекте всегда понятно какие у него есть поля и что в каждом хранится.

Далее,

> $this->department = $worker->department;
Эта строчка стоит в цикле и получается у нас сохранится толбко последнее значение. Зачем это?

> $this->rates = $worker->rates;
А это строчка после цикла и опять же непонятно почему мы копируем rates только из последнего объекта.

> function crysis()
Имена функций начинаются с глагола.

> if (!function_exists('multisort')) {
> function multisort($array, $index)
Что это за ерунда? Почему ты внутри класса создаешь динамически новые функции? Как такой код отлаживать когда функции в нем появляютяс когда хотят? И вообще, разве это задача класса EmployeeOrder создавать функции сортировки? Уверен он не для этого делался.

Далее, тут видна ошибка:

> new Department((new EmployeeOrder($workers1, $coffe)), $documentation),
Почему мы в конструткто Департамента передаем АнтикризисныйКомитет? А в Комитет передаем работников и какое-то кофе? Это же странно.

АнтикризисныйКомитет это отдельная сторонняя сущность. Ты даешь ему Компанию (или Департамент) и он выполянет над ней антикризисные действия:

$comittee = new AntiCrisisComittee;
$comittee->applyPlan1($company);

Вот и все. Не надо усложнять. Заметь что в моем варианте Комитет способен обработать аж несколько компаний по очереди.

Не надо 3 раза создавать все департемаенты. Изучи оператор clone и сделай чтобы компанию можно было клонировать со всеми департаментами и работниками:

$company2 = clone $company;

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

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

Я может не очень внятно тут написал, так что задавай вопросы, я или анонимные эксперты тебе что-нибудь подскажут. ООП важная штука и надо в нем разбираться.

Я вижу ты там еще одну задачу на ООП запостил - сначала надо ее сделать идеально тогда.
Ответы 30 марта - ООП Аноним 2016/03/31 20:28:38  №704373
>>702661

> public function getSalary()
не учитывается повышенная оплата овертайма

> construct($name, $rate)
Он обычно пишется первым среди методов

> if ($hoursAWeek <= 40) {
> $normalHours += $hoursAWeek;
Используй min/max

Число 40 там повторяется много раз, вынеси его в константу класса.

> function getNormalSalary($normalHours, $rate)
Это должно быть методом класса. Идея ООП в том что мы в классе заключаем, инкапсулируем данные и методы для работы с ними. Объект это такая самостоятельная часть программы, которая умеет что-то делать сама по себе. Нет причин выносить этот метод из класса.

> function padRight($x, $y){
Слишком сложно, тут хватит mb_strlen и str_repeat.

> // Цикл для удаления части имени работника
Это должно быть сделано методом в классе

> $employee->name = preg_replace('/( )([А-ЯЁ])([а-яё]+)/u', ' $2.', $employee->name);
Ты безвозвратно перезаписываешь полное имя. Как его достать обратно? Менять поле name можно только в случае если работник поменял свое имя.

> for ($i = 0; $i < count($allHours); $i++) {
тут нужен foreach

> Но правильно ли я вообще сделал, что некоторые функции определил вне класса? По ООП ли это?
В данном случае нет так как функции явно должны быть внутри класса, они работают только с хранящимися в нем данными.

Тред закрыт Аноним 2016/03/31 20:32:29  №704379
Это тред закрыт. Не пишите здесь больше. если вас забыли или пропустили - напишите о себе в новом треде: >>702800 (OP)