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

Клуб изучающих PHP и webdev #100 ОП 2018/03/09 16:28:45  №1152267 [Просмотреть]
15206021256410.png (33, 500x500)
500x500
15206021256411.jpg (157, 1024x683)
683x1024
15206021256432.png (792, 843x1200)
1200x843
15206021256493.jpg (156, 787x830)
830x787
Добро пожаловать. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет сделать себе блог, кто-то приобрести новую профессию, кому-то просто нечего делать.

Да, в нашем треде отвечают почти на все вопросы, только не сразу.

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

Предыдущий тред был тут: >>1135053 (OP) . Остальные треды есть в архиве: https://phpclub.tech/ (там есть поиск, так что можно легко найти обсуждение какой-то задачи или ответы на свой старый пост) или ищутся в гугле по словам "клуб изучающих php" и в архиваче.

Мейлач лежит? Есть запасной тред на доброчане: /s/res/23225.xhtml#i46467

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

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

С чего начать

У нас есть свои уроки по основам PHP, они собраны и выложены по адресу http://codedokode.github.io/phpbook (вас отредиректит на другой домен, не читайте, не сохраняйте, не запоминайте его, он временный). Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то можно начать с него. Он простой и понятный. Там есть задачи, их нужно решать (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению. С другой стороны, если этот учебник тебе не нравится, можно читать любой другой. Или официальный мануал. Или все сразу.

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

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

Ты прошел весь учебник? Молодец, но это были лишь основы языка 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 3/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

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

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

Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания 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
- Новости IT на англ. https://news.ycombinator.com/

Оформляй код аккуратно!!! — например пропусти через 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. У нас в треде были люди, которые практически с нуля учились и смогли найти работу.
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Нажмите Просмотреть, чтобы открыть.
Аноним 2018/04/19 06:33:55  №1176471
>>1173471

> Почему вы решили что проблема в этом? Проблема в том что картинка выходит за пределы контейнера#lightbox.

Да, я ошибся. Проблема там в том, что height 66% не работает.

> Аргументируйте, пожалуйста, почему крестик нужно сделать видимым всегда, и, может быть, мне будет легче это сделать.

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

Ну и на мобильных устройствах нет "наведения мыши".

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

> Я сделал проверку if (lightbox.css('display') == 'block') { , но сейчас загуглил и понял что лучше сделать проверку .is(':visible'). Это хороший способ?

Да, однозначно, так как есть много вариантов скрыть элемент, кроме display: none. Например: поставить display: none на родителе.

Также, еще мне нравится идея просто хранить состояние попапа в переменной, а не лезть за ним в DOM.

Что еще мне не нравится - то, что у тебя весь скрипт - гигантская анонимная функция, которая засунута в $().ready(). Вот как это читать? Читатель, по твоему, должен терпеливо прочесть все 160 строк сверху донизу (это пока их 160, а дальше будет больше)? Это неудобно. Гораздо лучше разделить отдельно функции и отдельно код инициализации.

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

То есть это выглядит как:

$(...).click(.... 100 строк ...);

$(...).hover(.... 50 строк ...);

И так несколько десятков блоков подряд.

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

Какие ты видишь решения проблемы?

> $(window).scroll(function() {
Это не очень хорошая идея, надо бы хотя бы троттлить тут вызов функции, а то при плавном скроллинге твоя функция будет вызываться с большой частотой и нагружать браузер постоянным обновлением дома. Вообще, функции , которые вешаются на scroll - это зло для производительности (особенно на мобильных):

- https://developers.google.com/web/updates/2016/06/passive-event-listeners
- http://joji.me/en-us/blog/how-to-develop-high-performance-onscroll-event
- https://www.sitepoint.com/throttle-scroll-events/
- https://www.html5rocks.com/en/tutorials/speed/scrolling/

> if ($(a).has(e.target).length == 0 && !$(e.target).is('.file-link')) {
Еще раз спрошу, а почему не использовать тут closest() или is() вместо has() и поиска кучи узлов?

Плюс, в твоем коде есть недостаток, что var a = $('.file-link'); не содержит добавленные позже в DOM узлы. Например, картинки из постов, подгруженных через аякс.

> var fullsize = $('.fullsize');
Не лучше ли сохранять ссылку в переменной, а не искать каждый раз этот класс по всему дереву DOM?

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

> Так как быть? Я не могу явно указать ширину или высоту контейнера, т.к. он растянется шире картинки, а нужно чтобы контейнер был не больше 66% страницы и картинка вписывалась в него, либо чтобы сама картинка была не больше 66% а размер контейнера высчитался из содержимого. Я не понимаю что тут можно сделать.

Ну давай искать варианты и тестировать. Я для затравки подкину пару идей, а ты их потестируй в разных условиях и браузерах:

1) https://codepen.io/anon/pen/yjyLyP

Тут главная идея в том, что мы позиционируем картинку внутри контейнера абсолютно и за счет этого получаем возможность использовать max-height, а также центрирование за счет margin-auto. Перечитай спец-ю про abs pos, если что-то непонятно:

- https://www.w3.org/TR/2011/REC-CSS2-20110607/visudet.html#abs-replaced-width
- https://www.w3.org/TR/2011/REC-CSS2-20110607/visudet.html#abs-replaced-height

Ограничение в 66% мы делаем за счет жесткого задания размера контейнера. Но я поймал себя на мысли, что можно было сделать контейнер на все окно, а ограничение сделать заданием max-height: 66% либо top/bottom: 17% на картинке.

Вообще, я надеюсь, что цифра 66% условная, так как при ней не используется значительная часть экрана.

2) зловещий flexbox https://codepen.io/anon/pen/GdgRjo?editors=1100

Подвохи с ним - он не везде поддерживается и там много тонкостей. Например, у меня в фаерфоксе раскособочило картинку 800x200 (ее ужало до 400x200 с нарушением пропорций), хотя в Хроме тот же код работал как надо и она уменьшается. То ли я неправильно что-то сделал, то ли баг, то ли еще что-то. Не хочешь помучаться и выяснить?

3) https://codepen.io/anon/pen/WJbNKM?editors=1100

Тут мы позиционируем картинку ниже середины (top: 50%) и сдвигаем ее вверх на середину за счет translate. Так как картинка позиционирована абсолютно, мы можем применять max-height в процентах.

Минус - я не придумал в этих методах, как тут завернуть картинку в обертку. А обертка нужна, если мы например, хотим поместить крестик в углу или подпись к картинке - нам нужна обертка, равная по размеру картинке. Но если мы добавим обертку, перестанет работать max-height на картинке. А если мы спозиц. картинку абсолютно внутри обертки, то картинка перестанет растягивать ее. Замкнутый круг.

Что-то мне кажется, для добавления обертки надо опять откатываться к яваскрипту. Либо добить решение с флексбоксом. Вот такой вот он, CSS. Предлагай свои идеи.

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

- яваскриптом вычисляем размеры картинки
- ограничиваем их с учетом размеров окна
- ставим их на контейнер как width/height
- центрируем/ограничиваем размер за счет CSS

Мне кажется, это лучше будет работать при изменении размеров окна, например. Вот пример: https://codepen.io/anon/pen/MGYWLZ?editors=1100 - тут специально добавлена желтая обертка, чтобы показать, что контейнер пропорционален картинке.

> Почему не нужно? Мы в пару местах делаем проверку на этот элемент. Нужно каждый раз их искать?

Использовать вместо этого is()/closest() и ничего не искать.

> Этот элемент нужно искать именно каждый раз когда мы делаем клик, потому что, при каждом открытии, он, каждый раз, создаётся новый.
ну все равно, можно сохранять ссылку на него, а не искать в DOM.
Ответы: >>1176480 >>1178355
https://github.com/mlmn/vector.loc/ Аноним 2018/04/19 07:23:05  №1176476
>>1173663

> public function __construct() {
> include 'views/header.php';

Это плохая идея. Конструктор для инициализации объекта, а не для вывода шаблонов.

> public function __destruct() {

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

> $orgInfo = $org->getOrgInfo();
> include 'views/reportBody.php';
А зачем нужно OrgInfo? Нельзя ли в организации сделать методы для вычислений этих чисел? Просто у меня ощущение, что этот класс заточен только под вывод таблицы, и тогда код getOrgInfo() желательно вынести из компании куда-нибудь, хотя бы в ту же OrgInfo. Или вообще ликвидировать этот метод.

Поля orgName и orgTitle точно не нужны, так как для них есть методы у компании.

> public function getClass() {
Тут нужен тайп-хинт на возвращаемое значение.

> $this->addEmployee($employee);
> } catch (Exception $e) {
> Dbg::exceptionEcho($e);
Это не нужно делать. try/catch не нужен. PHP сам выводит непойманные исключения, если поменять настройки в php.ini.

> public function promoteStuff(array $promotionList) {
Я не думаю, что это надо делать в департаменте. Тут от департамента ничего не требуется и работников можно повышать напрямую.

> $classMatch = (get_class($employee) == $employeeSelector->getClass());
> $rangMatch = (in_array($employee->getRang(), $employeeSelector->getRang()));
> $leaderMatch = (in_array($employee->isLeader(), $employeeSelector->getLeader()));

По моему было бы гораздо удачнее сделать так:

if ($employeeSelector->matches($employee)) ...

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

function find...(callable $filter) {
...
if ($filter($employee)) {
$list[] = $employee;
}
...


> public function countDepPageCost(): float {
> return round($pageCost, 3);
Не надо делать тут round, так как это нужно только для вывода в таблицу и должно быть там, где делается вывод, а не тут. Тут должен быть метод, который возвращает точное значение.

> abstract protected function setDefaults();
Это не очень хорошо, так как непонятно, что эта функция должна делать. Это никак не описано и никак не проверяется. Мне непонятно, что в ней надо написать. По моему так лучше сделать функции getStartingSalary(), getStartingCoffee() и тд, с которыми все проще и понятнее.

> public function setLeader($leader) {
Нужны тайп-хинты.

> public function upRang() {
нет проверки на выход за пределы допустимых значений.

> $vectorSecondAC = clone $vectorVanilla;

В клонировании у теябя допущена ошибка. Этот метод не создает глубокую копию компании. он делает клон компании, но в него помещает ссылки на те же самые департаменты с теми же самыми работниками - они по умолчанию не клонируются, а просто копируются ссылки. Изучи магический метод __clone().

> $this->organisation->setTitle("после антикризисных мер #1");
Это неправильно, ради решения задачи про антикризисные меры добавлять в Компанию поле-комментарий. Это не нужно компании, это нужно только в антикризисных мерах, и это надо делать где-то в другом месте.

> new EmployeeSelector('Engineer', [1, 2, 3], [true, false]);
лучше сделать возможность указать "не важно" для ранга. null, например, передать.

Или так:

$selector = new Selector;
$selector->setClass(...);

Сортировку лучше делать в одной функции, так:

$aLeader = $a->isLeader() ? 1 : 0;
$bLeader = $b->isLeader() ? 1 : 0;

if ($aLeader != $bLeader) {
return ...;
}

// иначе, сравниваем ранг

Также, есть еще такой трюк, вычисляем "вес" и сравниваем его:

$aWeight = ( $a->isLeader() ? 100 : 0) + $a->getRank();
$bWeight = ...;

// сравниваем вес

> $managersOfSertainRangs
$managersByRank

> $thisRangToPromote = count($currentRangManagers);
> $neededToPromote = ceil(0.5 * ($thisRangToPromote));
Это лучше записать в одно выражение без промежуточной переменной.

По view: в идеале, надо использовать htmlspecialchars при вставке текста в HTML. Иначе может быть уязвимость XSS: https://github.com/codedokode/pasta/blob/master/security/xss.md

По вопросам:

-------

> Только вот у меня вопрос возникает, а для кого пишутся эти исключения?
Тут есть такой ответ:

Выброс исключения - это способ функции заявить о невозможности выполнения задачи. То есть это такой способ передачи информации out-of-band (не через return). Если исключение планируется ловить, то для этого используется кастомный класс.

То есть функция либо возвращает результат (если он есть), либо выбрасывает исключение. НЕ выбросила - значит, все ок.

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

> Или для пользователя?
Только если чтобы сообщить о них разработчику. Пользователь ведь не разбирается в коде.

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

> Останавливать программу после срабатывания такого вот исключения или нет?
Да. если она неправильная, то ее надо останавливать. Чем раньше ошибка найдена, тем дешевле ее исправить. Читай

- https://habrahabr.ru/post/218325/
- https://www.martinfowler.com/ieeeSoftware/failFast.pdf

> Если например пытаешься добавить 2 одинаковых департамента, то второй просто не добавляется, но без остановки всё как бы и хорошо работает. Обошли дублирование и всё ок, выполнению программы это не мешает.
В программе явно есть ошибка, ты ее скрываешь, в итоге она вылезет где-то на более позднем этапе, например, в виде неправильных чисел. И ее найти будет гораздо труднее. Особенно когда эта программа станет огромной и в ней будут спрятаны сотни разных ошибок, которые сделали предыдущие разработчики, а исправлять придется тебе.

> Первый серьезный ступор был тут, и он по сути никуда не делся. Я просто написал класс OrgInfo, но оставил все поля в нем public, так как просто бомбануло при попытке написать в этот класс 24 геттера/сеттера и в том месте где я их заполняю
Ок, но другой вариант был не делать этот класс, а сделать геттеры в Company. Это позволяет получать отдельные цифры, не вычисляя все.

Еще один вариант - сделать только геттеры, без сеттеров, такого вида:

$info = new OrgInfo($company);
echo $info->getAvgSalary();

зачем тебе там сеттеры?

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

> Еще не понятно как быть в случае как с моей функцией getTopAnalyst() - либо она возвращает объект Analyst, либо null (по логике отсутствие объекта это как раз оно), и сюда ничего нельзя поставить на выходной тип, будут ошибки.

Есть тип ?Analyst со знаком вопроса. Гугли. Например https://wiki.php.net/rfc/nullable_types

> Но не стал склеивать методы demoteLeader() и promoteLeader() в один большой метод замены, просто заприватил их и оставил для лучшей читабельности. завел публичный swapLeader(), который просто вызывает их в нужной последовательности, логика в этом есть имхо.

Ну ок, тогда, получается, ты за возможность "обезглавить" департамент. Такое тоже возможно, почему бы и нет. Просто если оставить только swapLeader, то можно запретить делать департамент без босса или с несколькими боссами. А с promote/demote это возможно.

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

Сделать абс. методы вроде getStartingSalary():float { return 500; } для каждого значения.

> И просто вынес это в отдельное поле да еще и выставляющееся в конструкторе. Не понял если честно что в этом плохого.
Ненужное дублирование данных, по моему. Можно подумать, что это какой-то отдельный список, не совпадающий с тем, что в компании. Ничего страшного в том, чтобы сделать getDepartments(), нету.

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

> А просто передавать ему объект, а он его будет возвращать в измененном виде аки обычная процедурная функция?
Вообще, можно.Но лучше бы обычный метод, а не статический. Так как в теории у "антикризисного менеджера" могут быть настройки (сколько процентов увольнять), зависимости, а для них нужны поля и $this.

Кстати, у нас еще есть задача про Гостиницу. Не хочешь отточить навыки ООП?
Ответы: >>1176480 >>1182534
Аноним 2018/04/19 07:27:15  №1176479
Тред закрыт. Не пишите здесь. Если я кому-то не ответил, напишите о себе в новом треде: >>1174695 (OP)

Клуб изучающих PHP и webdev #99 Аноним 2018/02/08 23:39:30  №1135053 [Просмотреть]
15181223711270.png (33, 500x500)
500x500
15181223711271.jpg (157, 1024x683)
683x1024
15181223711292.jpg (194, 1024x768)
768x1024
15181223711303.png (3449, 1920x1080)
1080x1920
Добро пожаловать. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет сделать себе блог, кто-то приобрести новую профессию, кому-то просто нечего делать.

Пожалуйста, пишите один большой пост вместо нескольких маленьких и не флудите не по теме.

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

Предыдущий тред был тут: >>1118555 (OP) . Остальные треды есть в архиве: https://phpclub.tech/ или ищутся в гугле по словам "клуб изучающих php" и в архиваче.

Мейлач лежит? Есть запасной тред на доброчане: /s/res/23225.xhtml#i46467

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

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

С чего начать

У нас есть свои уроки по основам PHP, они собраны и выложены по адресу http://codedokode.github.io/phpbook (вас отредиректит на другой домен, не читайте, не сохраняйте, не запоминайте его, он временный). Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то можно начать с него. Он простой и понятный. Там есть задачи, их нужно решать (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению. С другой стороны, если этот учебник тебе не нравится, можно читать любой другой. Или официальный мануал. Или все сразу.

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

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

Ты прошел весь учебник? Молодец, но это были лишь основы языка 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 3/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

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

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

Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания 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
- Новости IT на англ. https://news.ycombinator.com/

Оформляй код аккуратно!!! — например пропусти через 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. У нас в треде были люди, которые практически с нуля учились и смогли найти работу.
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Нажмите Просмотреть, чтобы открыть.
Аноним 2018/03/09 18:44:09  №1152411
Пачаны, такая ошибка, делаю регистрацию на сайте, но почему то проверка if (!$result) не срабоатывает, все время получается: MessageSend (1, 'Пользователь с таким E-mail адресом уже существует!');


$result = $pdo->query("SELECT mail FROM users WHERE mail='$mail'");
if (!$result){
$reg = $pdo->query("INSERT INTO users VALUES('$name','$mail','$password','0')");
}else {
MessageSend (1, 'Пользователь с таким E-mail адресом уже существует!');
}



Что не так делаю?
Ответы: >>1152462
Аноним 2018/03/09 19:54:20  №1152462
Аноним 2018/03/14 22:34:50  №1155858
>>1151716
у меня почему-то всё работало

Клуб изучающих PHP и webdev #98 Аноним 2018/01/11 05:00:50  №1118555 [Просмотреть]
15156360508040.png (33, 500x500)
500x500
15156360508041.jpg (157, 1024x683)
683x1024
15156360508062.jpg (194, 1024x768)
768x1024
15156360508073.jpg (202, 1024x768)
768x1024
Добро пожаловать. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет сделать себе блог, кто-то приобрести новую профессию, кому-то просто нечего делать.

Пожалуйста, пишите один большой пост вместо нескольких маленьких и не флудите не по теме.

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

Предыдущий тред был тут: >>1109863 (OP). Остальные треды есть в архиве: https://phpclub.tech/ или ищутся в гугле по словам "клуб изучающих php" и в архиваче.

Мейлач лежит? Есть запасной тред на доброчане: /s/res/23225.xhtml#i46467

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

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

С чего начать

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

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

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

Ты прошел весь учебник? Молодец, но это были лишь основы языка 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 3/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. У нас в треде были люди, которые практически с нуля учились и смогли найти работу.
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Нажмите Просмотреть, чтобы открыть.
Аноним 2018/02/08 23:26:13  №1135048
>>1123914

Смотри что есть тут https://developer.microsoft.com/en-us/microsoft-edge/tools/

Либо виртуалка с виндой (майкрософт дает лицензионные), либо сайты-скриншотеры.

>>1123925

Можно просто циклом foreach пройти по массиву и по очереди каждый элемент поменять. Если не пытаться проверить все телефоны за 1 заход, то будет проще.

>>1124213

Могу дать в помощью статью про ИЕ: https://github.com/codedokode/pasta/blob/master/html/markup-for-ie.md

>>1124496

есть варианты

- inline-block
- float: left
- display: table-cell/table-row/table
- flexbox

>>1124948

Про наследование написано немного тут

- http://design-pattern.ru/patterns/single-table-inheritance.html
- http://design-pattern.ru/patterns/class-table-inheritance.html
- http://design-pattern.ru/patterns/concrete-table-inheritance.html

>>Ключом в event_type наверно лучше сделать id. Он меньше места занимает.
> А если в таблице появится поле owner_user_id, то ключом можно сделать сочетание type и owner_user_id? Или id будет удобнее?
Можно использовать любой вариант.

> Если периодичность перенести в таблицу Events, то это поле будет или дублироваться или придется каждый раз указывать периодичность. Насколько приемлемо дублирование, нужно выбрать то, которое будет приоритетное?

Наверно, тогда лучше назвать поле в Event_type is_annual_by_default, и использовать его только для начального значения в галочке. Дублирования не будет.

>>1134979

AWS недешевый. Подозреваю, что если и есть бесплатный тариф, он с какими-то подвохами. Не вариант завести виртуальную карточку от того же qiwi или яндекс-денег? Они правда могут ее не принять, DO например не принимает.

Для дешевых VPS есть poiskvps.ru, но там в основном сервисы с русскими или СНГ-шными корнями.

Также, открою секрет за 1 евро в мес. можно у арубы арендовать.
Ответы: >>1136214
Конец треда Аноним 2018/02/08 23:44:34  №1135058
Этот тред закрыт. Переходите в новый тред >>1135053 (OP)

Если я кому-то не ответил, напомните, пожалуйста, о себе в новом треде.
Аноним 2018/02/09 17:50:13  №1135478
>>1130599

> Ошибку выдает такую: String could not be parsed as XML. Как и что тогда передавать итератору?
Ты уверен, что ошибка на строке с итератором, а не на строке simplexml_load_file? Скорее всего там просто некорретный XML, можно проверить его валидатором XML, например, тут: https://www.xmlvalidation.com/ или в любом другом.

>>1130614

Ок, спасибо за помощь.

>>1130625

MVC - это архитектура, у меня есть про нее урок: https://github.com/codedokode/pasta/blob/master/arch/mvc.md

>>1131257

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

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

Ты знаком с SQL? Это там не так сложно сделать.

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

Вот еще, не знаю, поможет ли, урок про нормализацию БД: https://github.com/codedokode/pasta/blob/master/db/normalization.md

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

> что значит поле bump
Где ты увидел это поле? В каком-то уроке или в каком-то движке?

Клуб изучающих PHP и webdev, #97 Аноним 2017/12/20 10:40:46  №1109863 [Просмотреть]
15137556464410.png (88, 500x500)
500x500
15137556464421.jpg (157, 1024x683)
683x1024
15137556464432.jpg (229, 811x1200)
1200x811
15137556464453.jpg (487, 1821x1288)
1288x1821
Добро пожаловать. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет сделать себе блог, кто-то приобрести новую профессию, кому-то просто нечего делать.

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

Пожалуйста, пишите один большой пост вместо нескольких маленьких и не флудите не по теме.

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

Предыдущий тред был тут: >>1097438 (OP). Остальные треды есть в архиве: http://phpclub.tech/ или ищутся в гугле по словам "клуб изучающих php" и в архиваче.

Мейлач лежит? Есть запасной тред на доброчане: /s/res/23225.xhtml#i46467

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

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

С чего начать

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

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

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

Ты прошел весь учебник? Молодец, но это были лишь основы языка 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 3/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. У нас в треде были люди, которые практически с нуля учились и смогли найти работу.
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Нажмите Просмотреть, чтобы открыть.
Аноним 2018/01/11 04:39:01  №1118551
>>1118058

> $rand_keys = array_rand($words['word1'], 1);
Читай мануал http://php.net/manual/ru/function.array-rand.php

Если ты указал, что тебе нужен 1 ключ, то array_rand вернет не массив с 1 элементом, а сам ключ.

Это, кстати, пример неудачного проектирования функции. Лучше, когда функция всегда возвращает результат одного типа, если массив - то всегда массив. Как видишь, выбранный разработчиками PHP подход приводит к ошибкам. Не бери с них пример.

>>1118055

Увы, тут наверно надо лезть в код Симфони (может быть HttpKernel?), чтобы понять, почему. За создание и вызов контроллера отвечает HttpKernel в компоненте http-kernel. Напомню, что компонент - это независимая от Симфони библиотека, и в Симфони настройки для этого компонента (в том числе аргументы для сервисов) задаются в бандле https://github.com/symfony/framework-bundle

- https://symfony.com/doc/current/components/http_kernel.html
- https://github.com/symfony/http-kernel/blob/master/HttpKernel.php#L132
- https://github.com/symfony/http-kernel/blob/master/Controller/ControllerResolver.php#L33
- https://github.com/symfony/http-kernel/blob/master/Controller/ArgumentResolver.php

Мы видим, что поведение HttpKernel и резолверов определяется тем, с какими аргументами они были созданы. Потому мы должны открыть исходники FrameworkBundle и найти место, где создаются объекты этих классов. В данном случае они опсианы в конфиге DI контейнера как сервисы (если ты не знаком с DI контейнером в Симфони, то познакомься):

- https://github.com/symfony/framework-bundle/blob/master/Resources/config/services.xml#L21

Здесь мы видим отсылку к сервису argument_resolver. Поищем его определение и код:

- https://github.com/symfony/framework-bundle/search?utf8=%E2%9C%93&q=argument_resolver&type=
- https://github.com/symfony/framework-bundle/blob/8089ce7d84e6fd96531b0b2fab20977b7b7b968e/Resources/config/web.xml#L24
- https://github.com/symfony/http-kernel/blob/master/Controller/ArgumentResolver.php

Вторым аргументом в конструкторе указано

> iterable $argumentValueResolvers = array()

Но в описании сервиса там нет значений, лишь строка

> <argument /> <!-- argument value resolvers -->

А ниже мы видим странные сервисы:

> <service id="argument_resolver.request_attribute
> <service id="argument_resolver.request"
....

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

https://github.com/symfony/framework-bundle/blob/8089ce7d84e6fd96531b0b2fab20977b7b7b968e/FrameworkBundle.php

> $container->addCompilerPass(new RegisterControllerArgumentLocatorsPass());
> $container->addCompilerPass(new ControllerArgumentValueResolverPass());

Бандл добавляет свои этапы в процесс компиляции контейнера на основе конфигов бандлов и конфигов пользователя (прочитай про это, если не знаешь). Если мы посмотрим эти классы, то увидим:

https://github.com/symfony/http-kernel/blob/master/DependencyInjection/ControllerArgumentValueResolverPass.php

Этот класс при сборке контейнера находит сервисы, помеченные определенным тегом, и добавляет массив их как аргумент для arguments_resolver.

Второй класс, влияющий на ход сборки контейнера - это https://github.com/symfony/http-kernel/blob/master/DependencyInjection/RegisterControllerArgumentLocatorsPass.php

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

Это тяжело поначалу, но поможет тебе всерьез разобраться в Симфони.
Аноним 2018/01/11 04:39:37  №1118552
>>1117693

Тут надо учитывать такие особенности.

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

- https://dev.mysql.com/doc/refman/5.7/en/charset-general.html (англ)
- http://gahcep.github.io/blog/2013/01/05/mysql-utf8/
- http://itif.ru/kodirovka-mysql-kak-izbezhat-oshibok/

И когда ты пишешь WHERE column = ?, сравнение происходит в соответствии с заданным для колонки collation. То же относится к случаю WHERE column LIKE ?.

Выясни, какой collation используется для колонки в твоей таблице. Для этого есть ( https://stackoverflow.com/questions/7617412/discover-collation-of-a-mysql-column ) запрос вроде
SHOW TABLE STATUS ... и SHOW FULL COLUMNS ...

Казалось бы, то же относится и к регуляркам. Но не тут-то было:

- https://dev.mysql.com/doc/refman/5.7/en/regexp.html (англ)

> The REGEXP and RLIKE operators work in byte-wise fashion, so they are not multibyte safe and may produce unexpected results with multibyte character sets. In addition, these operators compare characters by their byte values and accented characters may not compare as equal even if a given collation treats them as equal.

То есть, регулярка работает на уровне байт и большая/маленькая буква для нее разные, независимо от collation. Плюс, она вообще не гарантирует корректной работы с мультибайтовыми кодировками (включая utf-8), а по сути корректно поддерживает только латиницу. Так-то. Баг зарепорчен 10 лет назад, но не исправляется:

- https://bugs.mysql.com/bug.php?id=30241
- https://bugs.mysql.com/bug.php?id=63439

Как видно, там рекомендуют поставить UDF (расширение) к mysql для поддержки юникода в регулярках. Ну или, как альтернатива, можно использовать другую СУБД.

Мой урок про кодировки (не в mysql, а вообще, что это такое): https://github.com/codedokode/pasta/blob/master/cs/strings.md

>>1117573

> public function changeRank
Традиционно такие функции называют setRank (функция-сеттер).

> if ($this->isBoss == TRUE){
Можно просто if ($this->isBoss), if как раз проверяет выражение на равенство true/false.

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

> public function getWorker(int $number): AbstractWorker
Мне не нравится эта функция. Чтобы получить работника, нам надо где-то взять его номер, а где? Я не вижу в классе работника функции получения номера. Как ей вообще пользоваться?

> public function deleteWorker(int $number): void
Та же проблема.

> public function sortWorkers(): void
непонятно назначение этой функции. Вот я смотрю только на класс Departament, не вижу остальной код, и мне даже в голову не приходит, зачем она нужна. И по какому критерию сортирует работников. По алфавиту?

> class Company
...
> $cloneOfDepartment = new Department($department->getName());
> foreach ($department->getWorkers() as $worker) {
> $cloneOfDepartment->addWorker(clone $worker);

Нарушение зон ответственности: почему класс Company заботится о клонировании содержимого департамента? Будет проблема, что при вызове

clone $company

работники клонируются, а при вызове

clone $department

не клонируются. за клонирование департамента должен отвечать код внутри этого класса.

> throw new Exception("Введено ошибочное название профессии");
В сообщение об ошибке стоит добавить, какое именно название было указано.

> class AnticrisisService
> public function cutEngineers(Company $basicCompany): void
Этот метод делает слишком много:

- клонирует Компанию
- применяет меры
- выводит отчет

Это неправильно. Что, если мы хотим применить 2 антикризисные меры, а только потом вывести отчет? Что, если мы не хотим создавать копию Компании?

Клонирование допустимо, но тогда метод должен возвращать новую копию.

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

- отбираем работников (для этого можно сделать метод в Департаменте), соответствующих критериям
- сортируем их по приоритету, чтобы вначале шли наименее ценные (usort)
- отбираем из списка первые N работников (array_slice)
- увольняем

> if (get_class($worker) == Engineer::class
Может, лучше использовать instanceof?

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

Могу похвалить за расстановку тайп-хинтов, с ними код смотрится хорошо. До антикризисных мер все выглядит очень аккуратно.
Аноним 2018/01/11 05:25:36  №1118560
Этот тред закрыт

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

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

Клуб изучающих PHP и webdev #96 Аноним 2017/11/25 00:30:07  №1097438 [Просмотреть]
15115590075310.png (33, 500x500)
500x500
15115590075311.jpg (157, 1024x683)
683x1024
15115590075322.jpg (194, 1024x768)
768x1024
15115590075343.png (792, 843x1200)
1200x843
Добро пожаловать. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет сделать себе блог, кто-то приобрести новую профессию, кому-то просто нечего делать.

Пожалуйста, пишите один большой пост вместо нескольких маленьких и не флудите не по теме.

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

Предыдущий тред был тут: >>1082507 (OP). Еще предыдущие треды ищутся в гугле по словам "клуб изучающих php" или в архиваче.

Мейлач лежит? Есть запасной тред на доброчане: /s/res/23225.xhtml#i46467

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

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

С чего начать

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

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

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

Ты прошел весь учебник? Молодец, но это были лишь основы языка 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 3/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. У нас в треде были люди, которые практически с нуля учились и смогли найти работу.
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Нажмите Просмотреть, чтобы открыть.
Аноним 2017/12/23 14:48:49  №1111446
>>1111231
конечно MySQL, если ты не стартапер или что-то такое. Нахуй ты кому нужен будешь с MDB. А если понадобится - куда проще пересаживаться с говна на что-то приятное, чем наоборот.
Ответы: >>1111453
Аноним 2017/12/23 14:59:15  №1111450
>>1111231
конечно мускул, работу найти в сто раз проще. php в продакшне не бывает не под линуксом, если что.

алсо, новый тред уже есть >>1109863 (OP) (OP)

я пожалуй удалю старый из избранного
Ответы: >>1111457
Аноним 2017/12/23 15:05:12  №1111453
>>1111446
Так и думал, спасибо.

Клуб любителей изучать PHP/webdev 95 Аноним 2017/10/26 23:14:41  №1082507 [Просмотреть]
php-noob-1.png (33, 500x500)
500x500
cat-cafe-osaka.jpg (157, 1024x683)
683x1024
welcome-to-php.png (188, 853x480)
480x853
just-google-it.jpg (156, 787x830)
830x787
Добро пожаловать. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет сделать себе блог, кто-то приобрести новую профессию, кому-то просто нечего делать.

Пожалуйста, пишите один большой пост вместо нескольких маленьких и не флудите не по теме.

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

Предыдущий тред был тут: >>1067944 (OP) . Еще предыдущие треды ищутся в гугле по словам "клуб изучающих php" или в архиваче.

Мейлач лежит? Есть запасной тред на доброчане: /s/res/23225.xhtml#i46467

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

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

С чего начать

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

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

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

Ты прошел весь учебник? Молодец, но это были лишь основы языка 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 3/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. У нас в треде были люди, которые практически с нуля учились и смогли найти работу.
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Нажмите Просмотреть, чтобы открыть.
Аноним 2017/11/25 17:42:28  №1097647
Аноны, выкатывайтесь-ка в новый тред >>1097438 (OP)

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

Тут будут только ответы на старые вопросы.
Аноним 2017/11/26 14:56:41  №1098085
>>1097591

> И даже при наличии тестов может возникнуть проблема как у этого >>1097568 анона, тогда все твои 100% коту под хвост.

При наличии тестов он бы сразу обнаружил проблему (если бы на dev обновил PHP до той же версии и прогнал бы тесты).
Аноним 2017/11/26 17:54:43  №1098220
Проверьте пожалуйста задание на приведение номеров к единому стандарту через регулярки

https://ideone.com/EQhCuF

Клуб изучающих php/webdev #94 Аноним 2017/09/29 02:43:01  №1067944 [Просмотреть]
Добро пожаловать. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет сделать себе блог, кто-то приобрести новую профессию, кому-то просто нечего делать.

Пожалуйста, пишите один большой пост вместо нескольких маленьких и не флудите не по теме.

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

Предыдущий тред был тут: >>1049651 (OP) . Еще предыдущие треды ищутся в гугле по словам "клуб изучающих php" или в архиваче.

Мейлач лежит? Есть запасной тред на доброчане: /s/res/23225.xhtml#i46467

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

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

С чего начать

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

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

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

Ты прошел весь учебник? Молодец, но это были лишь основы языка 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 3/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. У нас в треде были люди, которые практически с нуля учились и смогли найти работу.
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Нажмите Просмотреть, чтобы открыть.
Аноним 2017/10/29 21:08:52  №1083950
Пытаюсь решить задачку на рекурсию от ОПа, которую он в прошлом треде постил:
>1) Дан список категорий товаров в виде такого массива:

>$categories = [
>// id, название, parentId, кол-во товаров
>[1, 'Бытовая техника', null, 0],
>[2, 'Телевизоры', 1, 0],
>[3, 'LCD-телевизоры', 2, 20],
>[4, 'Телевизоры с газоразрядным дисплеем', 16],
>[5, 'Стиральные машины', 1, 0],
>[6, 'Холодильники', 1, 0],
>...
>];

>Для каждого товара указан уникальный id категории, >название, id родительской категории или null, если ее >нет, количество товаров в этой категории без учета >категорий-детей. Используя эти данные:

>а) Напиши функцию, которая для любого переданной >id категории вернет массив, содержащий id этой >категории и всех ее предков, начиная от корня >дерева.

>Например, для категории 3 вернет массив [1, 2, 3] >(Бытовая техника -> Телевизоры -> LCD-телевизоры). А >для 1 - массив [1].

>б) Напиши функцию, которая для любой категории >вернет массив id ее потомков. Например для id = 2 >функция должна вернуть массив [3, 4]

>в) Напиши функцию, которая вернет массив >категорий-сестер (то есть категорий, имеющих того >же родителя). Для id = 2 функция должна вернуть >массив [5, 6]

>г) Напиши функцию, которая выведет список >категорий в виде дерева "лесенкой", с указанием >числа товаров с учетом дочерних категорий:

>Бытовая техника (36)
>- Телевизоры (36)
>-- LCD-телевизоры (20)
>-- Телевизоры с газоразрядным дисплеем (16)
>Стиральные машины
>Холодильники
Что-то у меня совсем не получается. М. б. кто-нибудь намекнет как такое решать.
Аноним 2017/10/30 11:48:29  №1084177
Может кто-нибудь на пальцах объяснить, как в yii делается разграничение прав на доступ к страницам для разных групп пользователей?
Аноним 2017/11/01 00:15:34  №1085269
Этот тред закрыт. Не пишите здесь, а идите в новый тред >>1082507 (OP)

>>1083067

Ответ в новом треде >>1085261

>>1083110

Ответ в новом треде.

Клуб изучающих PHP и webdev #93 Аноним 2017/08/23 20:11:26  №1049651 [Просмотреть]
php-noob-1.png (33, 500x500)
500x500
cat-cafe-osaka.jpg (157, 1024x683)
683x1024
cat-sad.jpg (194, 1024x768)
768x1024
just-google-it.jpg (156, 787x830)
830x787
Добро пожаловать в наш уютный тред. Тут мы изучаем веб-разработку на языке PHP (а также JS/CSS/HTML/SQL), решаем задачки и делаем простые сайты! Зачем? Кто-то хочет сделать себе блог, кто-то приобрести новую профессию, кому-то просто нечего делать.

Пожалуйста, не устраивайте чат и не постите оффтопик.

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

Предыдущий тред был тут: >>1033564 (OP) . Еще предыдущие треды ищутся в гугле по словам "клуб php" или в архиваче. Еще есть такой архив тредов: phpclub.rf.gd (в процессе разработки).

Мейлач лежит? Есть запасной тред на доброчане: /s/res/23225.xhtml#i46467

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

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

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

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

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

Ты прошел весь учебник? Молодец, но это были лишь основы языка 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 3/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. У нас в треде были люди, которые практически с нуля учились и смогли найти работу.
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/.
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Посоветуйте редактор кода - Sublime Text 3, Notepad++, PhpStorm
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
- Что самое главное для программиста? Умение аккуратно оформлять код.
- ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
- Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Нажмите Просмотреть, чтобы открыть.
Аноним 2017/09/30 00:10:27  №1068357
Напомню, что новый тред тут >>1067944 (OP) . Этот тред закрыт, если вам не ответили, напомните о себе в новом треде.

>>1061501

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

>>1060331

Нужно использовать привязку к краям строки (^ и $), без нее регулярка проверяет на соответствие только часть строки, а не всю ее целиком.



Аноним 2017/09/30 11:56:56  №1068489
Есть ли разница и имеют ли различия кавычки одинарные '' и двойные ""?
Ответы: >>1069686
Аноним 2017/10/02 19:50:06  №1069686

Клуб изучающих PHP и webdev #92 Аноним 2017/07/28 20:27:19  №1033564 [Просмотреть]
14995976883300.png (33, 500x500)
500x500
14995976883311.jpg (157, 1024x683)
683x1024
14995976883322.jpg (194, 1024x768)
768x1024
14995976883333.png (3449, 1920x1080)
1080x1920
Нажмите Просмотреть, чтобы открыть.
https://github.com/telepok/php-test/blob/master/oop4.php Аноним 2017/09/02 16:05:43  №1056159
>>1050039

> public function addDepartment($department)
Тут нужен тайп-хинт

> Получилось много методов вида getFoo и setFoo, может имеет смысл заменить на один метод Get и Set с параметрами?
Нет, не имеет, это только сохздаст путаницу. Есть в общем-то 2 варианта, как делать:

- публично доступные свойства
- приватные свойства + сеттеры/геттеры

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

> array_splice($this->employees, array_search($employee, $this->employees), 1);
Тут нет проверки, что сотрудник найден. array_search может вернуть false, и ты просто удалишь другого сотрудника.

> $employee->getiSBoss()
Было бы красивее конечно isBoss(). Но тогда придется свойство назвать boss.

Если объекта нет, обычно возвращают null, который традиционно обозначает отсутствие объекта.

> class Employee
> //Сотрудник владеет полной информацией о себе
Комментарий нужно писать надо словом class, а не под

> $this->isBoss = 1;
Вот тут как раз стоило использовать true/false.

> public function getCoffee()
> public function setCoffee($coffee)
Здесь не очень удачно названы функции, так как они задают и возвращают разные значения. Одна - базовое потребление кофе, другая - итоговое.

Профессии следовало бы обозначить константами (Employee::ROLE_MANAGER), если ты хочешь для них делать проверки в коде (например, проверка, является ли сотрудник менеджером). Так как "Менеджер" - это лишь представление профессии для вывода (оно нужно только при выводе данных и не нужно при расчетах). А у тебя есть сравнения вроде if ($profession == "Аналитик"). Использовать тут строки плохо, так как там легко опечататься или что-то перепутать, плюс неясно, какие вообще варианты профессий есть. Плюс при смене языка или написания придется лазать менять названия по всей программе, а не в одном месте. Константы с цифрами или латинскими идентификаторами лишены этих недостатков. Заодно, IDE умеет делать автодополнение при наборе константы.

$staffList можно было оформить в виде маленького класса, чтобы была возможность передавать его куда-то и где-то повторно использовать.

Антикризисные функции надо сделать в классе (или классах). У нас же задача на ООП.

В функциях optimize1, optimize2 есть много похожего кода. Часть этого кода можно вынести в отдельные методы, а не копипастить. Ну например, поиск работников по критериям - чем не метод? Или замена босса - почему не сделать метод для этого?

При этом важно, чтобы методы в Сотруднике, Компании или Департаменте относились к этим сущностям и могли пригодиться где-то еще, а не занимающиеся только антикризисными мерами. Метод заменитьБосса - ок, метод уволитьNпроцентовИнженеров - не ок.

> $selectedEmployees[$i]->setRank($selectedEmployees[$i]->getRank() + 1);
Слишком длинно и тяжело читается, нужно что-то вынести в переменную (например, employee).

Вместо очистки компании лучше было бы сделать метод для ее клонирования. Изучи оператор clone.
Ответы: >>1056190 >>1056246
Аноним 2017/09/02 17:26:25  №1056189
>>1048771

Да, PHP написан на Си, исходники открыты. Вот пример функции сортировки: https://github.com/php/php-src/blob/master/ext/standard/array.c#L922

>>1048584

Тебе надо разобраться с библиотекой, я не видел код, но предполагаю, что long - это численное представление IP-адреса. Ну то есть число, которое получается, если взять 4 байта из IP адреса и представить как число.

Сторонние библиотеки лучше ставить через композер, на худой конец вручную в отдельную папку вне codeigniter. Подключать через автозагрузку или реквайрами.

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

>>1048364

Потому что там несколько категорий и несколько раз выполняется код.

>>1048278

В чем выгода? Для цен иногда используют числа с фиксированной запятой (DECIMAL в БД).

>>1046988

> почему функция называется persistence? Что это означает?
У тебя же есть гугл под рукой, анон.

>>1046810

Обычно используют Sublime, Atom, Brackets, Notepad++, Netbeans, Eclipse PDT, PhpStorm.
Ответы: >>1056190
Аноним 2017/09/02 17:42:39  №1056197
Напомню, что новый тред тут >>1049651 (OP) . Здесь только ответы на старые вопросы.

>>1045048

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

Клуб изучающих PHP и webdev #91 Аноним 2017/07/09 13:54:48  №1019301 [Просмотреть]
php-noob-1.png (33, 500x500)
500x500
cat-cafe-osaka.jpg (157, 1024x683)
683x1024
cat-sad.jpg (194, 1024x768)
768x1024
chuuni1.png (3449, 1920x1080)
1080x1920
Добро пожаловать в наш уютный тред. Тут мы изучаем веб-разработку на языке PHP (а также JS/CSS/HTML/SQL), решаем задачки и делаем простые сайты! Зачем? Кто-то хочет сделать себе блог, кто-то приобрести новую профессию, кому-то просто нечего делать.

Пожалуйста, пишите один большой пост вместо нескольких маленьких и не флудите не по теме.

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

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

Предыдущий тред был тут: >>1000416 (OP) ( http://arhivach.org/thread/266631/ ). Еще предыдущие треды ищутся в гугле по словам "клуб php" или в архиваче. Еще есть такой архив тредов: phpclub.rf.gd

Мейлач лежит? Есть запасной тред: доброчан-орг/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 3/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. У нас в треде были люди, которые практически с нуля учились и смогли найти работу.
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/.
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Посоветуйте редактор кода - Sublime Text 3, Notepad++, PhpStorm
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
- Что самое главное для программиста? Умение аккуратно оформлять код.
- ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
- Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Нажмите Просмотреть, чтобы открыть.
Аноним 2017/08/13 13:15:32  №1043659
Этот тред закрыт, все вопросы можно задать в новом треде >>1033564 (OP)

Аноним 2017/08/19 00:05:28  №1046575
Что не так?
https://ideone.com/fork/523cQA
Суть такова, что есть ряд чисел, нужно вывести количество пятёрок в нём. У меня выводит количество всех чисел.
Ответы: >>1047542
Аноним 2017/08/20 19:30:10  №1047542
>>1046575
Надо не
if ($number[$i] = "5") {
а
if ($number[$i] == "5") {