«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Клуб изучающих PHP/webdev #102 Аноним 2018/05/30 11:10:57  №1199390 1
php-noob-1.png (33, 500x500)
500x500
cat-cafe-osaka.jpg (157, 1024x683)
683x1024
welcome-to-php.png (188, 853x480)
480x853
cat-sad.jpg (194, 1024x768)
768x1024
Добро пожаловать в клуб востребованных и популярных людей. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки, печем печеньки и даже делаем простые сайты! Зачем? Кто-то хочет изменить мир, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.

Да, в нашем треде отвечают почти на все вопросы, только бампайте каждые 5 дней.

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

Предыдущий тред был тут: >>1174695 (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/
- какой-то древний, устаревший, но большой и на русском справочник по веб-разработке, посоветованный аноном: https://starcat.dp.ua/doc/wdh/

Оформляй код аккуратно!!! — например пропусти через 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/05/30 11:12:10  №1199392 2
format-your-code.png (59, 500x644)
644x500
Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

Если тебе лень выравнивать код руками, закачай его на http://beta.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока (да, прогресс не стоит на месте). Если ты используешь мощную IDE вроде PhpStorm, там тоже есть функция форматирования кода.

Горячие клавиши для форматирования кода в разных IDE: https://gist.github.com/codedokode/8759492

Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть стандарты PSR-1 и 2. Вот как надо оформлять код:

- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()
- Название функции начинается с глагола, в стиле «сделайЧтоТо»
- не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт или slovari.yandex.ru и найди название для переменной там
- в именах классов используется CamelCase, первая буква большая, «_» может использоваться
- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо из-за обилия точек и кавычек
- мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)

Вот ссылка на стандарты, где все это описано подробнее и даны примеры оформления:

PSR-1: https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-1-basic-coding-standard.md
PSR-2: https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-2-coding-style-guide.md
Ответы: >>1199405
Аноним 2018/05/30 11:13:41  №1199393 3
В прошлом треде я ответил на все вопросы, проверил все задачи. Если я кого-то пропустил - напомните о себе здесь.

И да, не разводите флуд.
Аноним 2018/05/30 11:41:36  №1199405 4
>>1199392
>Ты посмотри на свой код, животное
>животное

неприятно
Аноним 2018/05/30 12:05:25  №1199420 5
image.png (33, 721x431)
431x721
>>1199374
>Для ввода названия предмета мы используем поле ввода, так как набрать несколько букв быстрее
понимаю, просто сам факт того, что там только поле ввода как бы говорит, что учитель может туда ввести, что угодно. Лучше всего будет сделать выпадающи список с поиском.

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

>>1199377
>Тут админка не особо нужна.
>Доступ к приложению возможен только после регистрации и одобрения администратором.
а где администратор должен давать это одобрение?

>lesson - это занятие в конкретный день или в общем название предмета?
это занятие которое может повторяться
Ответы: >>1199893 >>1208760
Аноним 2018/05/30 15:57:22  №1199545 6
Пачаны, вкачусь, с, наверное, самым классическим и заебавшим всех ИТТ вопросом: хочу зарабатывать хотя бы на кусок хлеба ПОГРОМИСТОМ, сколько времени нужно на освоение основ, необходимых для вката в низшие слои и получения первых рублей?
Ответы: >>1199555 >>1199631 >>1199674
Аноним 2018/05/30 16:13:09  №1199555 7
>>1199545
Платина. Мы считаем что 6-12 месяцев при регулярных занятиях если с полного нуля. 2-4 если IQ высок и ты чертовски трудолюбив.
Ответы: >>1199569
Аноним 2018/05/30 16:25:29  №1199569 8
>>1199555
Спасибо, буду пытаться и надеятся на то, что мой ICQ на должном уровне.
а то не хочется идти на говноработу, пиздец просто
Аноним 2018/05/30 17:39:27  №1199631 9
>>1199545
Убил около года на изучение С/C++ C#, и вкатился в php за месяц, больше времени ушло на JS с его конченым синтаксисом и и front-end штуки.
Аноним 2018/05/30 18:23:14  №1199674 10
>>1199545
ты даже не удосужился прочитать внимательно Оп-пост.
какой из тебя погромист?выпились, даун.
Аноним 2018/05/30 18:36:12  №1199684 11
Анон, а сколько именно ты потратил времени на список студентов?
Ответы: >>1199705 >>1199794
Аноним 2018/05/30 19:02:49  №1199705 12
>>1199684
За год настроил rewrite в nginx на index.php. А там пхпинфо
Аноним 2018/05/30 20:55:32  №1199753 13
Пишу сайт на этой хуте, как тут задекларировать массив? Подобным образом создаётся массив с первым пустым элементом: $array[] = array();
Ответы: >>1199760 >>1199762
Аноним 2018/05/30 21:09:08  №1199760 14
>>1199753
где угодно про это написано
Ответы: >>1199761
Аноним 2018/05/30 21:16:28  №1199761 15
>>1199760
Где угодно тоесть нигде? Открыл уже 50 ссылок, такое ощущение что в php хуете такого нет.
Аноним 2018/05/30 21:20:43  №1199762 16
>>1199753

Если ты пришел из другого языка, то не применяй идеи из него к PHP. В PHP переменные не декларируются. Они автоматически создаются при первой записи значения в них. Также, не указывается их тип - переменная может хранить данные любых типов.

Чтобы создать массив, пиши

$array = [1, 2, 3];
$array = [];

Мануал для изучения: http://php.net/manual/ru/language.types.array.php
Аноним 2018/05/30 22:01:06  №1199788 17
Порикамендуйте на чем лучше всего практиковаться? Какие задачи востребованы на рынке?
Ответы: >>1199802 >>1199810
Аноним 2018/05/30 22:22:46  №1199794 18
>>1199684
Я список студентов делал два раза, и оба раза не доделал. Первый раз сразу после задачек от ОПа, было как-то ну вот сложно, кроме пхп надо было сразу учить и верстку, и основы основ бд, только это заняло у меня пару недель. Потом нашел на хабре пример мвс приложения с роутингом в стиле /controller/method/a/r/g/s, в итоге сделал всё кроме аутентификации. Заняло где-то полтора месяца.
Второй раз решил заново сделать после того как делал файлообменник, ну тут я уже упоролся, написал свой сервис контейнер и нанороутер, сервис контейнер даже мог через Reflection API создавать нужные объекты, но там нужно было допиливать разные фичи, и я опять забил на это все дело, заняло где-то 2 недели, аутентификацию так и не делал. Сейчас хоть бы файлообменник доделать, опять я делаю 80% быстро, а остальные 20% откладываю на потом.
Аноним 2018/05/30 23:06:11  №1199802 19
>>1199788

Шапку не читал, сори
Аноним 2018/05/31 01:26:51  №1199810 20
>>1199788
Прокачай алгоритмическое мышление, выполняй базу, чтобы на автомате все делать, пусть и поглядывать в мануалы.
Аноним 2018/05/31 01:42:05  №1199811 21
292a617721.png (19, 288x589)
589x288
Функция preg_match_all выполняемая в цикле, после работы не находя значения по шаблону, все равно записывает пустой массивы в массив. В итоге я не могу вывести сообщение о том результат поиска отрицательный т.к. массив не NULL. Как решить данную головоломку?
Ответы: >>1199817 >>1208760
Аноним 2018/05/31 02:37:28  №1199817 22
>>1199811
empty() считает пустой массив пустым
someApprentice 2018/05/31 04:22:46  №1199824 23
Опять не заметил что предыдущий тред уже закрыт и ответил в него >>1199822
Ответы: >>1199830
Аноним 2018/05/31 04:45:49  №1199830 24
>>1199822
>>1199824

> Все они плохо задокументированы. Я разрываюсь между изучением их кода и написанием своего собственного брокера.

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

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

> Больше не буду торопиться и буду больше думать над кодом.

Если ты не знаешь что писать, лучше может быть спросить, чтобы зря время не терять.

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

Это в рамках примера.

> Я имел ввиду, что при задавании таймера сначала выполнится код под ним, а потом, по истечению самого таймера, его код.

Да.

> Т.е. если мы вызовем return после таймаута, то он вернет что-то до его истечения?

Я не очень понял вопрос, но попробую кратко объяснить принцип работы event loop. Тебе стоит глянуть код EventLoop, чтобы понять, как он вообще работает: https://github.com/reactphp/event-loop/blob/master/src/StreamSelectLoop.php

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

Если посмотреть на реализацию, то addTimer() просто добавляет объект-таймер в коллекцию таймеров. $loop->run() в цикле проверяет, есть ли какие-то события, которые мы ждем в будущем (срабатывание таймера, события на потоках), и пока они есть, ждет их возникновения. Если есть потоки ввода/вывода - используется функция stream_select (она блокируется до возникновения события на потоке или истечения таймаута), если мы наблюдаем за потоками, но есть таймеры - просто вызывается usleep().

Соответственно, addTimer() лишь добавляет таймер в очередь, а вызван он будет из $loop->run(), когда придет его время.

Функция $loop->run() завершается и возвращает управление только в 2 случаях: если не осталось событий, которые мы ждем, либо если была вызвана функция явного останова цикла $loop->stop().

> Я плохо знаю низкоуровневые устройства сети, но разве сервер слушает все адреса в интернете?

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

Этот адрес указывает, на каком сетевом интерфейсе (сетевой карте или виртуальном интерфейсе) надо открыть порт. Указывается IP адрес желаемого интерфейса. Кроме того, можно указать значение 0.0.0.0 - что значит, открыть порт на всех сетевых интерфейсах. Например, если ты укажешь 127.0.0.1 - то порт будет открыт на внутреннем loopback интерфейсе и к нему нельзя будет подсоединиться снаружи.

Список сетевых интерфейсов в Windows выводится командой ipconfig, в линуксе ifconfig (или /sbin/ifconfig), или ip link show ( статья: https://www.cyberciti.biz/faq/linux-list-network-interfaces-names-command/ ).

В современном linux, кстати, на 1 сетевой интерфейс можно назначить несколько IP. Это будет выглядеть, как будто у тебя есть несколько сетевых карт, подсоединенных к одной сети.

Если ты хочешь лучше разбираться в сетях, можно погуглить и почитать про протоколы IP, TCP, и сокеты Беркли.

> То есть, если я задам, например, $uri = "google.com:8080", то сервер будет до бесконечности слушать этот адрес, пока google сам не создаст соединение по адресу сервера

Будет ошибка, из-за того что в системе нет сетевого интерфейса с таким адресом.
Аноним 2018/05/31 06:26:26  №1199850 25
ОП хелп. Хочу сделать, что когда любой человек заходит на мой сайт, ему выдают уникальные номер в куки.
Потом, если он создает тест или проходит. Я при нажатие создать тест, или закончить прохождение теста. Создаю анонимного пользователя в дб, у которого в параметрах только уникальый номер кук.
И если он потом регистрируется, то я смотрю, есть ли пользовательи анонимный с таким номером в куки. Если есть, то я просто делаю апдейт и добавляю его логин, почту в этого пользователя и он становится уже не анонимным.

Но вот пара вопросов.
1) Если человек создает тест, после введет свой имеил (не регистрируясь, а просто что бы получать статистику, как я понимаю этот имеил туда же в аноним пользователя я записываю), а потом кто то другой на этом же компе создаст тест, и напишет свой имеил. То он будет получать сообщения за все тесты, которые были сделаны на этом компе. А если он зарегистрируется. То получит все тесты, которые с этим ИД были созданы. И опять же перезапишет имеил, и тот человек который создал тест больше не получит сообщений.
2)А если человек создает пару тестов на разных компах, и везде введет 1 имеил для получения ответов. А потом решит зарегистрироваться с этой почтой. Мне ему все тесты, всех анонимных пользователей с подобным имейлом давать? Или только те кто где уникальный ид, такой же.
3)При создание теста есть галочка скрытые ответы или нет, человек ставит скрытые и после создания теста, я делаю ссылку где можно результаты смотреть. Смотреть их можно по ссылке, то есть любой кто её знает сможет туда заходить и смотреть. Если я не буду выводить просто сылку на эти ответы и она будет заковыристой, это и есть ограничение доступа? Или я должен как то для этого куки еще использовать? Но тогда только на его компе он сможет октрыть эту ссылку.
Ответы: >>1208761
Аноним 2018/05/31 08:27:43  №1199893 26
ОП, еще такой вопрос. Кажись все-таки хуево спроектирова БД. Не могу понять, когда учитель логинится, то видит список групп, выбирая группу видит список студентов которые состоят в группе и свои замечания к ним. Также группе можно добавить занятие какое-то, но проблема в том, что занятие приписанно к группе ведь, получается это занятие будет видно и другим учителям и теоритически учителя смогут видеть оценки выставленные другими учителями,а также редактировать их. Это нормально? Или учителя должны видеть только свои оценки и мочь редактировать только свои?

анон - >>1199420
Ответы: >>1199895 >>1199901 >>1208760
Аноним 2018/05/31 08:32:12  №1199895 27
>>1199893
хотя можно бы было приписывать занятие к учителю и чтобы только он мог выставлять оценку с этого занятия.
Аноним 2018/05/31 08:45:57  №1199898 28
посоны, есть кто по регуляркам? хотел отметать строки с наличием спецсимволов, но какого-то хуя регулярка по ссылке пропускает строку "За©" и не пропускает строку "Против". ЧЯДНТ?
https://ideone.com/9uBZn0
Ответы: >>1199930
Аноним 2018/05/31 09:03:17  №1199901 29
>>1199893
да и вообще
>Ну по идее преподаватель может вести разные предметы же. И у разных групп.
получается у одной группы может быть много учителей?

в общем я запутался уже
Ответы: >>1199903
Аноним 2018/05/31 09:08:30  №1199903 30
>>1199901
в однйо группе много студентов много преподов и много предметов

препод может вести разные предметы в разных группах
Ответы: >>1199912
Аноним 2018/05/31 09:44:23  №1199912 31
image.png (37, 730x435)
435x730
>>1199903
кароч такая хуйня вышла
Аноним 2018/05/31 10:07:49  №1199926 32
3rQuB11CvQ4.jpg (103, 1280x701)
701x1280
Аноны, препод дал два задания для "чтоб ты понял". Но я не понял даже как делать. Нужна помощь, пожалуйста.

Есть пример:
1/2 + 1/4+ 1/6 + ... + 1/100
Нужна сумма этого.

и второе:
y = 1 + x + x^2 + x^3 + ... + x^50, где x - натуральное число.

И вообще. Как получить сумму всех чисел из цикла?
Ответы: >>1199950 >>1200118 >>1200329
Аноним 2018/05/31 10:19:52  №1199930 33
>>1199898
Ты забыл добавить в регулярке определение кириллицы /\A[а-яА-Я]*\Z/ui
Аноним 2018/05/31 11:21:27  №1199950 34
>>1199926
>Как получить сумму всех чисел из цикла?
Создать переменную до цикла. Увеличивать ее в цикле.
Ответы: >>1200118
Аноним 2018/05/31 16:40:11  №1200118 35
>>1199926
Совсем нихуя не понял, весь день ломаю голову. Я даже >>1199950 не понял как сделать.
Ответы: >>1200139
Аноним 2018/05/31 17:04:21  №1200139 36
>>1200118
Либо ты прикалываешься, либо ты так тупишь потому что еще ничего не кодил, либо ты просто не особо доходчив.

объявляешь переменную до цикла равную нулю.

;в цикле увеличиваешь счетчтикчь в порядке последовательности 2, 4, 6 и т.д. до 100

используешь счетчик в качестве знаменателя

каждая итерация считает только свою дробь и плюсует оператором += к той переменной которую ты объявил до цикла.

После цикла в этой переменной результат.

Такой же алгоритм во втором уравнении, только счетчик это степень.

Ответы: >>1200150
Аноним 2018/05/31 17:25:00  №1200150 37
Screenshot719.png (35, 794x554)
554x794
>>1200139
Не прикалываюсь, я действительно туп и до меня не доходит. Как их складывать- то?
Ответы: >>1200186 >>1200210 >>1200234
Аноним 2018/05/31 17:54:45  №1200186 38
Ответы: >>1200190
Аноним 2018/05/31 17:57:10  №1200190 39
>>1200186
Неа. Не могу сообразить, как складывать значения снизу.
Ответы: >>1200204
Аноним 2018/05/31 18:03:45  №1200204 40
>>1200190
А зачем ты каждый раз выводишь значение переменной и увеличиваешь ее на 2?
Ответы: >>1200208
Аноним 2018/05/31 18:06:24  №1200208 41
>>1200204
Я убрал $i+=2 после публикации поста, ответы изменились с 2.54.756 на 0.50.750, но все еще не складываются.
Аноним 2018/05/31 18:06:30  №1200210 42
>>1200150
Не ну я тебе алгоритм описал а если я тебе весь код напишу то ты никогда и не допрешь так. Знаю я таких.
Ответы: >>1200215
Аноним 2018/05/31 18:08:57  №1200215 43
>>1200210
Я и так не допру никогда. Что я упускаю? Препод сказал, что это вообще в три строчки делается.
Ответы: >>1200225
Аноним 2018/05/31 18:13:34  №1200225 44
>>1200215
Ты ее уже почти решил.
Ответы: >>1200229
Аноним 2018/05/31 18:15:43  №1200229 45
Screenshot720.png (9, 389x394)
394x389
Ответы: >>1200240 >>1200271
Аноним 2018/05/31 18:18:09  №1200234 46
Ответы: >>1200236
Аноним 2018/05/31 18:20:08  №1200236 47
15147439191370.jpg (12, 439x455)
455x439
>>1200234
Почему я такой тупой? Какое решение вообще? Где я обосрался?
Аноним 2018/05/31 18:22:39  №1200240 48
>>1200229
Ну поменяй значение x<100 на 10 да посчитай на калькуляторе сам и программой потом, да сравни.
Ответы: >>1200252
Аноним 2018/05/31 18:31:36  №1200252 49
Screenshot721.png (13, 549x457)
457x549
>>1200240
Все получается, благодарю.
Почему тут 1 все время?
Ответы: >>1200266
Аноним 2018/05/31 18:38:04  №1200266 50
Ответы: >>1200271 >>1200279
Аноним 2018/05/31 18:45:06  №1200271 51
>>1200266
Почему >>1200229 этот пример решился только тогда, когда я вынес $i из цикла?
Аноним 2018/05/31 18:57:07  №1200279 52
Screenshot722.png (12, 499x548)
548x499
Screenshot723.png (12, 386x458)
458x386
Ответы: >>1200290
Аноним 2018/05/31 19:07:46  №1200290 53
>>1200279
Чот он на два умножает конечный результат. Аноны, почему?
Ответы: >>1200755 >>1200763
Аноним 2018/05/31 19:45:00  №1200312 54
Аноны, а вот такой вопрос: если я в будущем хочу быть погромистом-фрилансером или типа того, мне нужна корочка о высшем? Или и с моим среднеспециальным будет норм?
Ответы: >>1200314
Аноним 2018/05/31 19:47:14  №1200314 55
>>1200312
шесть лет отработал не имея вообще никакого образования кроме школы.
Ответы: >>1200316
Аноним 2018/05/31 19:49:29  №1200316 56
Аноним 2018/05/31 20:13:07  №1200329 57
>>1199926
Ну заебись, бесконечные сходящиеся ряды
Аноним 2018/05/31 20:56:04  №1200347 58
парни завязывайте с этой математикой, мы все-таки в пхп треде
Ответы: >>1200350
Аноним 2018/05/31 21:14:38  №1200350 59
Аноним 2018/05/31 21:21:28  №1200351 60
Аноним 2018/06/01 02:22:05  №1200385 61
Поясните для дотеров - как проще решить эту задачу с генератором стихов?
Ответы: >>1200441 >>1218668
Аноним 2018/06/01 07:40:26  №1200441 62
>>1200385
я ее дедал года пол назад, как и все остальные задачи из базового курса ОПа.
потом я перешел на фреймворки и уже не сделаю ни одну из тех задач
Ответы: >>1200443
Аноним 2018/06/01 07:43:22  №1200443 63
>>1200441
Ты так пишешь, что кажется будто фреймворки хуже героиновой зависимости.
Аноним 2018/06/01 08:21:51  №1200469 64
Доставьте, плиз, пикчу с перепиской якобы с тней, которая вопрошает о веб-разработке, а потом пишет, мол, "Серьезно, PHP? Сразу нахуй".
Аноним 2018/06/01 10:08:00  №1200523 65
>>1199390 (OP)

код
<?php
$link = mysqli_connect("127.0.0.1:8080", "root@localhost", "", "123")
or die("Ошибка " . mysqli_error($link));
var_dump ($link);

// закрываем подключение
mysqli_close($link);
?>
ошибка

Warning: mysqli_connect(): MySQL server has gone away in C:\xampp\htdocs\test\ConnectDB.php on line 2

Warning: mysqli_connect(): Error while reading greeting packet. PID=6232 in C:\xampp\htdocs\test\ConnectDB.php on line 2

Warning: mysqli_connect(): (HY000/2006): MySQL server has gone away in C:\xampp\htdocs\test\ConnectDB.php on line 2

Warning: mysqli_error() expects parameter 1 to be mysqli, boolean given in C:\xampp\htdocs\test\ConnectDB.php on line 3
Ошибка
ЧЯДНТ?
Ответы: >>1200527 >>1200532
Аноним 2018/06/01 10:12:15  №1200527 66
>>1200523
пс а вардамп забейте его нет там
Аноним 2018/06/01 10:16:34  №1200532 67
>>1200523
>Warning: mysqli_connect(): MySQL server has gone away
>127.0.0.1:8080
8080 - предположу, что там у тебя висит вебсервер. MySQL сервер по умолчанию на 3306. Где он и будет если ты или ксамп ничего там не наменяли.
Ответы: >>1200536
Аноним 2018/06/01 10:20:29  №1200536 68
>>1200532
менял порт для апача с 80 на 8080 ну размер бд увеличил
Ответы: >>1200549
Аноним 2018/06/01 10:27:12  №1200549 69
>>1200536
Попробуй так:
mysqli_connect("127.0.0.1:3306", "root", "123")
Ответы: >>1200566 >>1200745
Аноним 2018/06/01 10:36:38  №1200566 70
Ответы: >>1200622
Аноним 2018/06/01 11:36:15  №1200622 71
Аноним 2018/06/01 14:15:32  №1200745 72
>>1200549
У меня вообще без порта работает, ой вей.
Ответы: >>1200749
Аноним 2018/06/01 14:19:43  №1200749 73
>>1200745
3306 дефолтный порт. Я его явно указал,что бы анончик видел где косяк в его коде.
Вообще все что про порты выше легко гуглится. Учитесь гуглить хлопцы, экономьте свое время
Ответы: >>1200752 >>1200755
Аноним 2018/06/01 14:25:58  №1200752 74
>>1200749
Поговорить не о чем будет.
Аноним 2018/06/01 14:28:25  №1200755 75
>>1200749
Вот тебе вопрос, который не загуглить: >>1200290
сам я так и не понял.
Ответы: >>1200763
Аноним 2018/06/01 14:36:32  №1200763 76
>>1200755
>>1200290
Ты сдумпил, а потом прибавил последний раз. Тут и гуглить не надо.
Ответы: >>1201377
Аноним 2018/06/01 15:56:20  №1200815 77
Аноны, а какой вообще фреймворк надо учить? Я посмотрел вакансии много где написано просто: "знание одного из фреймворков" и там в скобках симфони, Yii. Но чаще всего встречается Laravel. Он какой-то модный-шутливый?
Ответы: >>1200816 >>1200821
Аноним 2018/06/01 15:57:49  №1200816 78
>>1200815
любой. учи все что угодно, все равно нужно будет переучиваться
Ответы: >>1200818
Аноним 2018/06/01 16:00:11  №1200818 79
>>1200816
> все равно нужно будет переучиваться
Почему?
Аноним 2018/06/01 16:01:45  №1200821 80
Ответы: >>1200839
Аноним 2018/06/01 16:34:34  №1200839 81
Аноним 2018/06/01 17:27:22  №1200878 82
Эээх, очередной день без изучения пыха, как же плохо быть ленивым, безвольным хуйлом..........
Ответы: >>1200892
Аноним 2018/06/01 17:39:32  №1200892 83
>>1200878
Оставляй контакты, будем изучать вместе! Могу тебя пинать, время от времени.
Ответы: >>1200912
Аноним 2018/06/01 18:01:27  №1200912 84
>>1200892
А как далеко ты продвинулся в изучении?
мимо-другой-анон
Ответы: >>1200919
Аноним 2018/06/01 18:12:17  №1200919 85
>>1200912
Решаю задачи из раздела "Повторим?", одной лапкой в ООП так сказать.
Ответы: >>1200939
Аноним 2018/06/01 18:44:05  №1200939 86
Ответы: >>1201617
Аноним 2018/06/01 19:59:02  №1201019 87
>>1199390 (OP)
Хочу в очередной раз сказать спасибу опу и всем примкнувшим. Вы заняты богоугодным делом.
Пользуясь случаем, хочу спросить - какой фреймворк самый распространенный? Я понимаю что изучив один, можно будет понять все остальные, просто с какого начинать?
Ответы: >>1201055
Аноним 2018/06/01 20:33:14  №1201055 88
>>1201019
Если не поджимает выход на работу и не нужно готовится под конкретную галеру, я бы начал с Симфони. Он самый аккуратный в плане архитектуры и кода.

Ларавель самый популярный, но построен на компонентах Симфони (все равно придется). Там все сделано для быстрой разработки мелко-средних проектов. Много работы на фрилансе.

Юииии популян на просторах СНГ и у азиатских демпингующих галер (как и ларавель).

Зенд не особо популярен сам по себе, НО его компоненты используются в Магенто. А это очень популярная система для интернет магазинов (около 30%) и фриланса и работы на всем этом полно.
Ответы: >>1202095
Аноним 2018/06/02 09:52:43  №1201321 89
>>1199390 (OP)
Опчик ты мой золотой, ответь на такой ответ

Мне сейчас чел (фрилансер на пхп со стажем) жостко пояснил что я не прав используя пдо вместо мускли, потому что: "да нет там никакой разницы, че ты выдумываешь фигню, PDO - это надстройка на MySLQi из врапперов"

Я перед этим много читал о пдо и мускли и их сравнениях, и нигде такого не видел.

вут зе фак?
Ответы: >>1201649 >>1202015
Аноним 2018/06/02 11:02:31  №1201377 90
>>1200763
> потом прибавил последний раз
И как не прибавлять последний раз?
С 49 степенями в моем говнокоде получается результат на 2 меньше, чем в 50 степени на калькуляторе.
Ответы: >>1201697
Аноним 2018/06/02 11:14:44  №1201386 91
Screenshot8.png (7, 1044x150)
150x1044
Почему у меня браузер выводить такой крод, а не результат?
Ответы: >>1201395
Аноним 2018/06/02 11:21:56  №1201395 92
>>1201386
В интернетах советуют использовать <?php, а не <?.
И еще:
> Убедитесь, что вы просматриваете файл через веб-сервер, используя URL-адрес, например http://localhost/file.php, а не через доступ к локальному файлу file://localhost/www/file.php
Ответы: >>1201406 >>1201653
Аноним 2018/06/02 11:27:44  №1201406 93
Screenshot10.png (3, 761x28)
28x761
Screenshot9.png (20, 809x325)
325x809
Ответы: >>1218668
Аноним 2018/06/02 12:28:59  №1201471 94
>>1199390 (OP)

И еще сколько ты бы дал баллов из 10 за сайт с такими параметрами (в основном самое фатальное и смешное):

Деплой
Полные сорсы вендоров вместе с архивами на продакшене
Код прямо в продакшен
Нет

Код
DRYOLO - DO REPEAT, YOLO - копируем код во все места где он используется, попутно внося корректировки только в некоторые его инстансы;
Повсеместные магические константы;
Комментарии на cp1251 (ну и код);
Полезность комментариев уровня echo $number; // displaying number
Глобалки с объектами вперемешку со статикой
Тестов нет, хотя бы ручных

Пакетный парсер данных
Вызываем метод с массивом данных; в методе вызываем метод обработки одного элемента; и редиректим с оставшимися элементами на себя-же; (эдакая http рекурсия)

Роутинг
Берем и проходим по юри с конца, первый встретившийся элемент, имеющий соответствующий ему файл php - контроллер

Контроллеры-шаблоны
Полностью смешиваем общение с моделью, валидацию и формирование страницы

Шаблонизатор
str_replace по ключам в массиве весь файл в цикле;
Подшаблоны грузим с диска при каждом обращении (в цикле)

Модели, бд
Рид локи на все таблицы даже при чтении;
Не нормализовано;
myisam для числовых таблиц (ну тут всё-еще спорно);
Кодировки в перемешку (cp1251);
Юзер с глобальными правами;
Буквально дублирующие индексы;
Мусорные, неиспользуемые таблицы и поля;
Пересоздаем таблицы из модели при отсутствии, но схема не соответствует нужной (т.е. Была позже отредактирована вручную, без модификации оригинальной схемы)

Локализация
Определяем язык через explode ( “.”, $uri ) [ 1 ]
Делаем локализацию нигде не внося для этого необходимой логики
Разбиваем данные сущностей в таблицах на два языка, но не всех
Для сущностей доступных через имя в uri, делаем транслитерацию кирилицы наживую, получаем мусорную выборку в случае несовпадение транслитерации туда-обратно

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

Прочее
Повсеместно голые SQL в коде
Отсутствие экранизации
Прямой доступ на любые скрипты
Отсутствие проверки прав или вообще наличия пользователя
error_reporting( 0 );

Не осилили отправку почты, молчу уже про соц. авторизацию.

Ну и P.S.: сейчас многие вещи исправлены, кроме самых для меня сложных (настроить локальную копию сервера через вагрант и сделать автотесты, ограничиваюсь ручными). Но как думаешь почему когда тот кто всё это делал начинает мне изливать желчь, что якобы сайт был почти готов и я хуй пойми чем занимаюсь, я чувствую себя не комфортно? Обычно на меня провокации и подобная херомантия не работает. В общем суть в том что вот я вроде всё делаю, всё получается, всё работает стабильнее, быстрее и качественнее, а по итогу все-равно какой-то осадочек. Спасибо за вниманиеб


Ответы: >>1201472 >>1218668
Аноним 2018/06/02 12:29:39  №1201472 95
>>1201471
*Нет тестов, слово съел
Ответы: >>1201473
Аноним 2018/06/02 12:30:26  №1201473 96
>>1201472
Да блять т.е. *Нет VCS
под валерьянкой что-то вообще по пизде пошел
Вывод из MySQL информации друг за другом Аноним 2018/06/02 16:19:35  №1201598 97
Есть база данных и PHP код, который выводит информацию из бд. Нужно чтобы вся эта информация заключалась в каждый отдельный блок. Такие блоки должны располагаться друг за другом.
Должно быть примерно как на картинке. 1
На картинке 2 расположение в данный момент.
<?php

$query = "SELECT FROM tovs ";
$select_tovs = mysqli_query($link, $query);
$a = $tovs ['src'];
echo $a;
$h = 1;
while ($tovs = mysqli_fetch_array($select_tovs)){


if ($result = mysqli_query($link, 'SELECT
FROM tovs where id ='.$h.' '))
?>
<a href="akk.php?note=<?php echo $tovs['id']; ?>">
<?php
{

/1) Выборка результатов запроса /
$data = mysqli_fetch_assoc($result);

/2) Освобождаем используемую память /
mysqli_free_result($result);

}


/3) Получаем значение переменной /
echo $tovs ['name'], "<br>"; \t
$a=$data['src'];

echo "<img src=$a alt='картынко'/> " , "<br>" , "<hr>";

$h = $h +1;
} $note_id = $_GET['tovs'];


?>
Ответы: >>1218668
Аноним 2018/06/02 16:30:29  №1201617 98
Аноним 2018/06/02 17:00:18  №1201649 99
>>1201321
Ну более менее продвинутые cms юзают пдо
Аноним 2018/06/02 17:02:26  №1201653 100
>>1201395
<? это еще и символ xml может и еще гдето используется. Если будешь делать файл смесь с php и xml возникнет путаница.

Я использую <?php для больших блоков и <?= вместо echo
Аноним 2018/06/02 17:53:23  №1201676 101
Скажите мне в чем суть конструкции типа while ( true )? Я имею ввиду, в чем мать её суть пробелов после и до скобок? Есть тут Wordpress-разрабы? В чем суть этой хуйни? Неужели код становится понятней? Скорее наоборот.
Ответы: >>1201715 >>1218668
Аноним 2018/06/02 18:20:23  №1201697 102
>>1201377
2 в первой степени это два. А на калькуляторе ты начинаешь с два во второй ( четыре ), поэтому на 2 меньше. По поводу кода: ты выводишь вар_думп до того как осуществляешь сложение, поэтому тебе кажется что он должен быть последним, но он еще раз прибавляет после вардумпа, потом выходит из цикла и прибавляет один. А тебе кажется что должно быть меньше.
Ответы: >>1201705
Аноним 2018/06/02 18:30:42  №1201705 103
>>1201697
Благодарю за пояснение. Я не смышлен и в математику не могу.
Ответы: >>1201725
Аноним 2018/06/02 18:54:45  №1201715 104
>>1201676
Ну например если цикл должен выполняться по совокупности многих условий которые сложно записать в одну строку, то могли сделать так, а когда нужно остановить то просто brake
Аноним 2018/06/02 19:31:58  №1201725 105
>>1201705
тут никто не может.
Аноним 2018/06/03 10:39:53  №1201929 106
Поясните пожалуйста за автоматизированное тестирование.

Я правильно понял, что "написать автотесты" - это написать скрипт на пхп (как вариант), подключить вебдрайвер, запустить селениум, тот запускает отдельное окно браузера, в котором выполняются тесты, имитируя действия пользователя, и если всё ок, в логи пишется "тест пройден"? Или это делается не так?
Ответы: >>1202378
Аноним 2018/06/03 12:17:42  №1202015 107
>>1201321
ПДО придерживается объекто-ориентированного программирования.
мускул коннект хорошо, если у тебя простенький скрипт.
Подключиться к базе, сделать изменения, отключиться.
Если ты пилишь огромное приложение, то потом будут сложности. ТАк как код с подключением и изменениям в базах можно изолировать и переиспользовать.
Ответы: >>1202086
Аноним 2018/06/03 12:39:59  №1202029 108
Только вкатился, и сразу тупой вопрос.

Занимаюсь по книжке Скляра.
Есть форма, что на первом пике, есть пхп-код, что на втором пике. Почему-то при нажатии на submit происходит переход на пустую страницу.

Что я делаю не так? Код от того, что в книжке, не отличается.
Ответы: >>1218668
Аноним 2018/06/03 12:47:42  №1202032 109
123.PNG (33, 1328x594)
594x1328
Имеется такая EXEL таблица(pic) вправо 22 таких(колонки с дисциплины и аудитории) и 7 вниз полностью, могу с помощью сохранить как залить ее таблицей HTML, как брать значения из нее и заливать на сервер что бы в в последующем использовать эти значения.
Я конечно понимаю что там over миллиард переменных но по другому в голову не приходит.
Ответы: >>1202039 >>1202089
Аноним 2018/06/03 13:07:50  №1202039 110
>>1202032
гугли comma separated values
Заебешься такую формочку отрабатывтаь.
Лучше все в красивую табличку и там парсить.
Аноним 2018/06/03 15:21:57  №1202086 111
Аноним 2018/06/03 15:23:16  №1202089 112
>>1202032
можно перегнать в csv и распарсить как текстовый файл с простым форматом, а можно использовать библиотеку phpExcell
Аноним 2018/06/03 15:46:03  №1202095 113
>>1201055
спасибо, няша, добра тебе
Аноним 2018/06/03 22:16:06  №1202261 114
Помогите ньюфагу. Почему у меня нет формы ввода логина и пароля при запуске phpmyadmin? Он сразу переводит к базам данных . Как вызвать эту форму и узнать, какой у меня логин и пароль?
Ответы: >>1202263 >>1202294
Аноним 2018/06/03 22:18:17  №1202263 115
>>1202261
Я об этом. Такого у меня нет. Как его вывести?
Ответы: >>1202290
Аноним 2018/06/03 23:16:09  №1202290 116
>>1202263
Я полагаю, что либо у тебя этого изначально не было, либо тебя по печенью пускает.
Я не экстрасекс, но с утра было одно из двух.
Ответы: >>1202507
Аноним 2018/06/03 23:21:53  №1202294 117
>>1202261
на локалке или на хостинге?
в браузере пароль не сохранял?
Ответы: >>1202507
Аноним 2018/06/03 23:50:27  №1202298 118
Собаки.jpg (18, 592x134)
134x592
>>1199390 (OP)
Няш, что значат эти @ перед комментариями? Зачем их вставляют?
Ответы: >>1202539
Аноним 2018/06/04 01:00:34  №1202316 119
>сначала идет +7 или 8, за ними ровно 10 цифр, между которыми может быть любое число скобок, минусов, пробелов

>ровно 10 цифр, между которыми может быть любое число скобок, минусов, пробелов

Как эту дичь написать? Я блять охуел уже с этими регулярками
Ответы: >>1202317 >>1218670
Аноним 2018/06/04 01:02:05  №1202317 120
>>1202316

^((\+[\s]7)|([\s]8))([\s-()][0-9][\s-()]){10}

Такую хуйню сделал, но чет не работает
Ответы: >>1202321 >>1202329
Аноним 2018/06/04 02:06:59  №1202321 121
>>1202317
я уже недавно отвечал, откуда ж вы только беретесь
Ответы: >>1202371
Аноним 2018/06/04 02:41:01  №1202329 122
>>1202317
Ща бы регулярки строчить. В итоге потом всё равно нагуглишь регулярки в 100500 раз круче и будешь использовать их.
Ответы: >>1202330
Аноним 2018/06/04 02:44:03  №1202330 123
>>1202329
за 15 лет не нагуглил ниодной регулярки
Ответы: >>1202331
Аноним 2018/06/04 02:44:43  №1202331 124
>>1202330
Ну хз, гугли лучше чтоли.
Ответы: >>1202346
Аноним 2018/06/04 03:16:42  №1202346 125
Аноним 2018/06/04 03:20:45  №1202349 126
Зачем вы ебетесь с регулярками? Перейдите к другим упражнениям/заданиям. Они не будут вам нужны в ближайшее время.
Ответы: >>1202350 >>1202352 >>1202391
Аноним 2018/06/04 03:25:34  №1202350 127
>>1202349
Никогда не будут нужны
Ответы: >>1202366
Аноним 2018/06/04 03:29:59  №1202352 128
>>1202349
Никогда не будут нужны
Аноним 2018/06/04 04:43:58  №1202366 129
Аноним 2018/06/04 04:54:12  №1202371 130
>>1202321


А ты мог просто ссылку запостить? Даже меньше печатать же, в этом треде отвечал хоть?
Ответы: >>1202373
Аноним 2018/06/04 04:55:11  №1202373 131
>>1202371
может в этом, может в предыдущем, нет у меня ссылки, там длинная регулярка.
Аноним 2018/06/04 05:05:46  №1202378 132
>>1201929

Ты описал только приемочные тесты, то есть эмуляцию реальных действий пользователя на сайте. Есть еще функциональные тесты, когда мы отправляем http запрос и ожидаем определенный ответ от сервера, без тестирования конкретных классов. И юнит тесты, с помощью которых мы тестируем конкретные классы. При этом такая классификация достаточно условна и все эти вещи могут частично пересекаться. Почитай пару статей на эту тему, установи phpunit или codeception, попробуй написать пару простых тестов.
Ответы: >>1202513
Аноним 2018/06/04 05:37:06  №1202391 133
>>1202349
Регулярки нужны, как и все ,что связанно со строками.
Вот что реально не нужно, так это все что связано с математикой
Аноним 2018/06/04 09:12:37  №1202495 134
как с помощью PHPEXCEL залить всю таблицу построчно в бд.
Все данные должны пойти в один столбец в базе.
Ответы: >>1218670
Аноним 2018/06/04 09:33:13  №1202507 135
>>1202294
>локалке
Там. Его изначально не было, меня сразу к панели управления кидало.
>>1202290
>что либо у тебя этого изначально не было
This.
Аноним 2018/06/04 09:44:18  №1202513 136
>>1202378
вот в этих самых автотестах и написаны эти @ в комментариях. Зачем? Для чего они?
Ответы: >>1202529 >>1202539
Аноним 2018/06/04 10:20:21  №1202529 137
>>1202513
Это аннотации. Используются для указания каких ли бо инструкций (генерация кода, документации, параметры хранения в БД и т.п. тысячи их) для IDE , фреймворков и т.д.
Например @route говорит Symfony как мапить URL на контроллер->метод: https://symfony.com/doc/current/routing.html

Аноним 2018/06/04 10:33:31  №1202539 138
>>1202513
>>1202298

Это аннотации. С точки зрения PHP это просто комментарии, но некоторые библиотеки могут их обрабатывать особо.

Это может быть например phpdoc - аннотации для генерации документации к проекте, их синтаксис описан тут: https://docs.phpdoc.org/references/phpdoc/index.html

Это могут быть аннотации Симфони. В Симфони каждая аннотация представляет собой имя класса (с поддержкой неймспейсов), и этот класс описывает, какие в аннотации могут быть свойства, про них написано тут: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/annotations-reference.html

Это документация по Доктрине, но так как система аннотация расширяемая, то ими пользуются и другие библиотеки Симфони, например роутер: https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/index.html

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

Аноним 2018/06/04 11:26:39  №1202572 139
В общем такая штука, как бы мне в шаблонах тайпхинтить?
Сейчас юзается шаблонизатор Plates, в целом неплохо.
Но в шаблонах там контекст $this и все переменные шаблона в итоге без тайпхинтов.
Объекты из базы грузятся у меня сейчас тупо как ассоциативные массивы так что хинтить там и нечего как-бы, но я хочу уйти от этого в сторону полноценных объектов для сущностей, но тогда код в шаблонизаторе будет еще хуже выглядеть.
Т.е. если у меня НАПРИМЕР $post['content'] не хинтится ну и ладно, а если будет $post->GetContent() то будет сверху еще и подсветка IDE что типо че за херню я придумал вызывать методы необъявленной переменной...
Если бы можно было как-то обозначить что вот эта переменная отсюда и далее является объектом класса такого-то.
Например, сделать статический класс валидатор сущностей, в шаблоне вызываем его так:
$post = Post::Validate( $post );
и в итоге получаем захинченую сущность, заодно там внутри проверяем правильно ли шаблону передали сущности.
Но это по идее противоречит в какой то степени парадигме MCV, получается вьюшка дублирует кусочек фукнционала модели...
Ответы: >>1202583
Аноним 2018/06/04 11:58:04  №1202583 140
>>1202572

Во-первых, из шаблона нельзя вызывать валидатор. Так как задача вью - отображать данные, а не валидировать их.

Во-вторых, для IDE используй аннотацию @var SomeClass $someVar или как-то так в комментарии с 2 звездочками.

Менять архитектуру кода ради IDE неправильно.
Ответы: >>1202587
Аноним 2018/06/04 12:00:48  №1202584 141
Нужно написать контроллер, который сохраняет запрос в базу. А другим запросом его можно получить. Или стереть.
Как это сделать с нуля?
Ответы: >>1218670
Аноним 2018/06/04 12:08:18  №1202587 142
>>1202583
Ну я понимаю что неправильно, поэтому и спрашиваю.
Такая аннотация - как раз то что нужно, большое спасибо!
Стоить внимательно изучить стандартные виды аннотаций, не думал что там есть что-то кроме как хинтов для классов.
Аноним 2018/06/04 13:05:47  №1202620 143
УФ УФ, бульдозер программирования в пути! За месяц ничегонеделанья я добрался до регулярных выражений!
Аноним 2018/06/04 14:28:34  №1202659 144
Кто-нибудь сталкивался с настройкой ImageMagic(imagic) на новых сборках опен-сервера под винду?

Надо что бы вместе с пхп 7.1 всё работало нормально, но из коробки почему-то нету ничего в новых сборках.
Ответы: >>1218670
Аноним 2018/06/04 17:10:40  №1202814 145
есть инфа,что будет в 8 версии?
Ответы: >>1218670
Аноним 2018/06/04 18:11:14  №1202881 146
Великий анон, мне нужно прочекать мой файл на наличие картинок, которые лежат в папке images, в то время как сам файл лежит выше папки images по дереву.

Сделал регулярку (надеюсь, не надо на айдеон кидать)
>"/[images\\\\](([a-z0-9]+.(jpg|png|gif|jpeg)))/"

Названия прогружаются, но сами картинки - нет.
Через file_exist возвращает false.
Ответы: >>1202888 >>1202934
Аноним 2018/06/04 18:15:53  №1202888 147
>>1202881
путь в file_exists проверь
Ответы: >>1202939
Аноним 2018/06/04 19:03:35  №1202934 148
>>1202881
Как тебе такое?
/images\/.+\.jpg|png|gif|jpeg/

мимоКМСпорегуляркам
Ответы: >>1202941
Аноним 2018/06/04 19:08:14  №1202939 149
>>1202888
Спаси юную макаку.. Я немного подправил код, теперь лучше выводит заголовки, но все равно не выводит картинки.
https://ideone.com/w2lE9y
Аноним 2018/06/04 19:09:13  №1202941 150
>>1202934
Теперь даже заголовки не выводит.
Ответы: >>1202952 >>1202955
Аноним 2018/06/04 19:17:00  №1202952 151
>>1202941
Названия файлов в разном регистре? Если да добавь в конец регулярки флаг i
Ответы: >>1202958
Аноним 2018/06/04 19:20:18  №1202955 152
>>1202941
>//$pagename = 'index.php';
>//$template=file_get_contents($pagename);

у тебя проиходит поиск, в файле 'index.php'
>preg_match_all($imgreg, $template, $imgmas);
Ответы: >>1202956
Аноним 2018/06/04 19:21:22  №1202956 153
Аноним 2018/06/04 19:22:05  №1202958 154
>>1202952
Да нет, спасибо. Я уже решил проблему.

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

Спасибо, что пытались помочь, вот регулярка, кому нужно/интересно. Совсем забыл, что можно по тегу <img> искать
>'/<img[^>]?src=\"(.)\"/iU'
Аноним 2018/06/04 19:26:28  №1202965 155
Анончик, нормально ли, что я в учебных проектах в работе с базами данных не использую стандартные типы даты и времени мускула, а храню время в БД в юниксовом формате (секунды с 1 января 1970), а преобразование его в человеческий формат и обратно выполняю средствами пыха? Является ли это ересью в реальных проектах?
Ответы: >>1202969 >>1202984 >>1202999
Аноним 2018/06/04 19:30:17  №1202969 156
>>1202965
зы. Я понимаю, что моя база не сможет работать с датами до 1970, но если я точно знаю, что в этом не будет необходимости, например, там не будет дат рождения.
Аноним 2018/06/04 19:44:51  №1202984 157
>>1202965
>преобразование его в человеческий формат и обратно выполняю средствами пыха
Работодателям не показывай, во всяком случае.
Аноним 2018/06/04 20:04:21  №1202999 158
>>1202965

Зачем? Какая в этом выгода? Ты ведь не можешь например использовать стандартные функции БД для работы с датой. Да и вообще, зачем это нужно, хранить данные не в придуманном для этого формате?
Аноним 2018/06/04 21:13:07  №1203049 159
Сап гайсы, че делать с этим?
>session_start(): Cannot send session cache limiter - headers already sent
Структура кода
<? ob_start();
session_start();
<говнокод/>
ob_end_flush();
?>

Хелп анончики
Ответы: >>1203101 >>1218670
Аноним 2018/06/04 21:56:27  №1203062 160
Такой вопрос: как лучше запилить флеш месседжи самому. Как я сделал я: пользователь делает какое-то действие, например удаляет файл, дальше редирект и в урл-е параметр ?message=success. Небольшая проблема в том, что если пользователь перезагрузит страницу еще раз с этими параметрами в урле, он опять увидит сообщение, что он успешно удалил файл. Это является проблемой? Может лучше через сессии сделать?
Ответы: >>1218672
Аноним 2018/06/05 01:16:40  №1203101 161
>>1203049
>мааам, я понял как идти, но впереди бордюр, что мне делать?
Аноним 2018/06/05 11:35:44  №1203322 162
Пока писал вопрос, додумался до ответа. Спасибо пацаны.
Ответы: >>1203323
Аноним 2018/06/05 11:38:17  №1203323 163
>>1203322
Пожалуйста. Всегда рад помочь.
Аноним 2018/06/05 13:10:11  №1203381 164
>>1199390 (OP)
Быстровопрос 1:
Связка php+,ysql все еще актуальна для небольших околодомашних нужд?
Ответы: >>1218672
Аноним 2018/06/05 13:23:02  №1203394 165
Пачаны!

Развернул на апаче локальный сервер, создал хост, тудым-сюдым, но короче не суть: упражняюсь через ноутпад++, пишу структуру в .php, и обращаюсь к файлу через строку браузера, и смотрю чо же там выведет, но столкнулся с траблом, ни в какую не хочет переносить текст на новую строку через \n. Через br\ переносить и подавна не будет, это ж ХТМЛ.
И так, не подскажете с чем может быть связано? Версия ПХП? Апача? Почему не детектит перенос?
Пример кода, который собственно и не работает, хотя вроде и должен:
<?php

error_reporting(-1);

$a = 1;
$b = 6;
$random = mt_rand($a, $b);
echo "Бросаем кубик... /n";
echo "Выпало: $random /n";

?>
Ответы: >>1203435 >>1203441 >>1218672
Аноним 2018/06/05 14:29:05  №1203435 166
>>1203394
Нужно указать браузеру, что мы посылаем простой текст. Для этого нужно отправить http заголовок:
header( content-type: text/plain);
Аноним 2018/06/05 15:10:56  №1203441 167
Аноним 2018/06/05 18:16:11  №1203540 168
Screenshot759.png (27, 490x508)
508x490
Анон, пытаюсь освоить стеки, но у меня не получается. Но у меня не выводит никаких действий. Нужно обозначить стек как массив или что?
Ответы: >>1203564 >>1203570
Аноним 2018/06/05 18:35:55  №1203564 169
>>1203540
Что такое ReadingList?
Вот стандартные функции для работы с массивами в пхп:

array_push() - добавляет в конец массива
array_pop() - извлекает последний элемент массива
array_shift() - добавляет в начало массива
array_unshift() - извлекает первый элемент массива

В зависимости от применения твой массив может быть и стеком и очередью.
Ответы: >>1229577
Аноним 2018/06/05 18:39:06  №1203570 170
>>1203540

Это баг ideone, он не показывает ошибку сразу, перезагрузи страницу с кодом, чтобы увидеть текст ошибки.
Аноним 2018/06/06 03:32:11  №1203754 171
Если вывожу на страничке строку то все нормально, если пытаюсь вывести отдельный символ, например $text[0] то выдает эту ебань - �. Строка на кириллице, в начале ставлю кодировку mb_internal_encoding("UTF-8");
Ответы: >>1203785
Аноним 2018/06/06 06:09:58  №1203785 172
>>1203754
Строка - последовательность байт. utf-8 использует для хранения символа 1 - 4 байта (в зависимости от положения символа в таблице). В PHP нет встроенной в движок поддержки utf-8. Соответственно $str[0] вернет только 1-й байт а не первый символ. Используй mb_ функции, в данном случае mb_substr().
Аноним 2018/06/06 07:30:03  №1203851 173
Ебался часа два с MySQL и в итоге нихуя не получилось его установить. Какие-то ошибки ебаные, которые хуй загуглишь. Установил в итоге без каких-либо ошибок PostgreSQL. Это же тоже норм? Необязательно же использовать MySQL?
Ответы: >>1203891 >>1203896
Аноним 2018/06/06 08:09:10  №1203862 174
А не. Получилось установить MySQL, правда не последнюю версию, а 5.7
Аноним 2018/06/06 09:27:49  №1203891 175
>>1203851

Давай разберемся. Что за ошибка?

Раньше иногда была такая ошибка:

> Если в процессе установки вылетает ошибка «произошло исключение DateFormat что-то там такое», то пошли лучи проклятия криворуким разработчикам из Oracle и попробуй в настройках Windows временно поменять формат даты на English (US). Или скачай zip-версию и установи руками как описано тут: http://malwselennaiaru.ru/182-ustanovka-mysql-na-windows.html (этот совет был написан в 2014, может он устарел).
Ответы: >>1203917
Аноним 2018/06/06 09:29:18  №1203896 176
>>1203851
Зачем устанавливать mysql? можно же установить open server.
Аноним 2018/06/06 10:12:47  №1203917 177
>>1203891
>System.NullReferenceException: Object reference not set to an instance of an object.
Вот это мне писало вместе с какими-то логами.
Ответы: >>1203956
Аноним 2018/06/06 11:49:09  №1203956 178
>>1203917
>System.NullReferenceException: Object reference

Я мельком погуглил, решения не нашел, тогда (если захочешь) остается вариант ставить из zip файла вручную. Нашел только упоминание похожего бага https://bugs.mysql.com/bug.php?id=78138
Аноним 2018/06/06 13:09:06  №1203991 179
Привет ребята.

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

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

Тут решенная, но хуевым способом задача: https://pastebin.com/t1hB70gc

А тут моя попытка составить правильный массив для более лаконичного решения задачи: https://pastebin.com/51ur26EY

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

В общем, буду благодарен, если объясните где я туплю, и правильно ли я вообще сделал массив.
Ответы: >>1203993 >>1204111
Аноним 2018/06/06 13:17:00  №1203993 180
>>1203991
>А тут моя попытка составить правильный массив для более лаконичного решения задачи: https://pastebin.com/51ur26EY

Почему у тебя тут echo нет?
Ответы: >>1203999
Аноним 2018/06/06 13:23:42  №1203998 181
Screenshot775.png (11, 454x241)
241x454
Screenshot776.png (12, 417x249)
249x417
Все тот же дурачок со стеками в треде.
Работают Push и Pop, но теперь не могу юзать isEmpty.
https://ideone.com/ijt0Jv
Почему при закоменчивании элементов стека она выдает единицу? Первый скрин.
А при заполненном стеке ничего не выдает. Второй скрин.
Ответы: >>1218672
Аноним 2018/06/06 13:23:59  №1203999 182
>>1203993
Потому что мне в данный момент нечего выводить на экран - я не понимаю как правильно построить цикл, чтобы он из этих массивов делал рандомный стих.
Ответы: >>1204011
Аноним 2018/06/06 13:41:02  №1204011 183
>>1203999
Цикл ненужон

Как получить одну строку с тремя словами?
У тебя есть 5 массивов word со словами, нужно из них рандомно получить одно слово. Потом втрое и третье, между вызовами рандома ставим .' '. для объединения строк в одну и установки межу ними пробела.
Все понятно?
мимодругойанон
Ответы: >>1204022
Аноним 2018/06/06 13:54:42  №1204022 184
>>1204011
О, да, понял. Так можно мою первую пасту сделать намного короче, спасибо.

Но все равно интересно что имел ввиду автор учебника когда писал о генерации через цикл.

Но ладно, пойду дальше.
Аноним 2018/06/06 14:13:12  №1204037 185
В пизду. Программирование не мое.
Ответы: >>1204060
Аноним 2018/06/06 14:56:35  №1204060 186
Аноним 2018/06/06 15:32:32  №1204111 187
>>1203991

В массиве не надо делать подмассивы для строк.

Пуст каждый элемент массива будет массивом вариантов, из которых можно выбирать следующее слово или символ:

$parts = [
['Я', 'ты', 'мы'],
[.....].
["\n"],
....
];

foreach ($parts as $options) {
$option = выбираем случайный элемент из $options;
echo $option;
}

Попробуй сделать так.


В простом варианте решения не надо было заморачиваться с массивами, а просто можно было сразу выводить слова. Так как первые 2 строки формируются одинаково, можно было использовать цикл из 2 шагов вместо копипасты.
Аноним 2018/06/06 15:52:47  №1204139 188
Аноны, кто любит алгоритмы, предлагаю задачку, решение которой я сейчас ищу:

- дана длинная строка байт, длиной 1-2 Мб
- в ней есть повторяющиеся куски, длиной не менее minLength (например, 1000 байт)
- надо их найти, их расположение в строку и длину

Сложность тут в длине строки конечно.
Ответы: >>1204330
Аноним 2018/06/06 18:17:50  №1204240 189
image.png (49, 917x932)
932x917
image.png (267, 1680x1050)
1050x1680
Как фиксить?
Ответы: >>1204256
Аноним 2018/06/06 18:51:56  №1204256 190
>>1204240
mb_internal_encoding("UTF-8");
Попробуй для начала.
Ответы: >>1204338
Аноним 2018/06/06 20:01:10  №1204330 191
>>1204139
Навскидку какая-нибудь хэш-таблица должна смочь.
Ответы: >>1204332
Аноним 2018/06/06 20:01:31  №1204332 192
Аноним 2018/06/06 20:12:20  №1204338 193
Ответы: >>1204341
Аноним 2018/06/06 20:18:53  №1204341 194
>>1204338
А это у тебя всё сломалось или ты с 0 пытаешься настроить? Погугли как в этой либе поддержку многобайтных символов сделать, а не только английских. Помню тоже ебался с этим tcpdf, но там уже не помню с чем была проблема, а решение было примерно таким: вместо нормального форматирования - пришлось кормить этой хуйне html сверстанный и что бы она уже его форматила в pdf
Ответы: >>1204349
Аноним 2018/06/06 20:20:05  №1204343 195
Аноним 2018/06/06 20:39:07  №1204349 196
>>1204341
Сломалось. Гугл выдаёт примерно такие решения,utf-8 поменять на ISO-8859-1,тот же результат,но с другими символами.Ладно,попробую твой метод,вдруг получится.
QR коды + БД + Сайт Аноним 2018/06/06 20:47:47  №1204353 197
Аноны, задача из реальной жизни:
Есть фирма которая делает мебель + дополнительно торгует всякой мелочью +-300 наименований товаров. Сайты-поставщики разные. Товары висят на стендах, цены на товары часто меняются поэтому ценников нет, цену надо спрашивать у продавана, типа идешь к компу, называешь код он тебе говорит цену. Всех эта схема подзаебала.
Я предложил возле каждого товара повесить QR код.

Мои варианты решения проблемы:

Срочная:
1) Спарсить с сайтов ссылки на товары, нагенерировать url qr кодов, развесить. Продаван сканирует код, заходит на страничку товара и сам считает цену ( цена = цена * 0.2)
Посоветуйте парсер, и может есть прога куда можно закинуть файл с сылками и она сразу сгенерирует кучу кодов на A4.
Подольше:
2) Создать сайтик с таблицей куда данные подгружаются с БД. qr код - ссылка на ячейку таблицы с товаром и ценой. В таблице цена автоматически обновляется раз в день.

Посоветуйте инструменты и вообще кто бы как сделал.
Ответы: >>1204364 >>1218673
Аноним 2018/06/06 21:31:58  №1204364 198
>>1204353
>цена = цена * 1.2
фикс
Аноним 2018/06/06 21:46:47  №1204366 199
Ээээх, еще один день, когда я обещаю себе завтра же сесть за ПХП................
Ответы: >>1204395
Аноним 2018/06/06 23:51:58  №1204395 200
1.jpg (8, 259x194)
194x259
Ответы: >>1204408
Аноним 2018/06/07 01:10:43  №1204408 201
>>1204395
Я вот тоже не знаю, каждый вечер ложусь спать с мыслью "ну вот завтра проснусь, и за учебники", а в итоге проснулся, зашел на двачик, посмотрел мемчики, и уже спать пора.
Тру стори.
Ответы: >>1204419 >>1204422
Аноним 2018/06/07 02:46:38  №1204419 202
>>1204408
Меня недавно задолбал подобный образ жизни, я сказал себе "Хватит!" и начал усиленно решать задачки, правда появилось ощущение, что скоро выгорю нахуй. Рано или поздно и у тебя будет такое, главное не упусти этот момент. Ты умный мальчик и я верю, что у тебя все получится :3
Ответы: >>1204675
Аноним 2018/06/07 03:47:14  №1204422 203
>>1204408
Если потеряешь час с утра, будешь потом искать его весь день.
Заведи второй будильник "на работу".
Уговаривай себя не на подвиг, а только на самое первое действие для начала. Не "надо перемыть гору посуды", а "я сейчас открою кран". Не "надо выучить ПХП", а "я сейчас открою книгу". Не "надо написать ебучий проект", а "я сейчас открою редактор, создам файл". Против такой мелочи тебе самому будет сложно с собой торговаться, искать отговорки.
Ну и помодоро хорошо работает.
https://www.youtube.com/watch?v=H0k0TQfZGSc
https://pomotodo.com/
Ответы: >>1204675
Аноним 2018/06/07 04:56:58  №1204435 204
Платина. Призываю к совету анонов, желательно с картофляндии. Окончил вышку(программист) и работаю на принудительной галере(недопрограммист на некроязыке) - осталось чуть больше года отсидеть. Понимание программирования немного есть, но навыки отсюда вряд ли пригодятся, может только sql немного. В универе пытался вкатиться, процентов 40 кантора освоил и немного пхп с вёрсткой поковырял. Свободного времени тут относительно много, поэтому планирую выучить за это время что-нибудь адекватное. Читаю уже много времени и ваши треды, и треды фронтендеров и не могу разобраться, куда двигаться, чтобы через полтора года не обосраться, одно только понял, что кроме веба за полтора года ничего не успею освоить на уровне джуна, смотрю ещё на питона немного, дайте совет. Пишу сюда, потому что в фронттреде мало адекватов и вопросов по делу, у вас хорошая атмосфера и вроде как все делом занимаетесь.
Ответы: >>1204454 >>1204483
Аноним 2018/06/07 05:57:52  №1204454 205
>>1204435
я кидаю тебе за щеку рефералку на хекслет.
Ты её оплачиваешь и начинаешь учиться
???????
PROFIT
Ответы: >>1204455
Аноним 2018/06/07 06:02:48  №1204455 206
>>1204454
Я могу в самообучение, мне нужны мнения знающих анонов желательно из рб по поводу того, куда лучше в моей ситуации развиваться
Аноним 2018/06/07 06:44:17  №1204462 207
Поясните за функции работы с массивами, а если точнее за параметры этих функций. По какой логике они выстроены?
Вот, например, функция array_keys возвращает массив ключей, да? Первым параметром она принимает массив, а вторым значение, ключи которого(ых), нужно найти.
Тут где-то неподалёку есть функция array_search, которая возвращает первый ключ искомого значения. Но тут она уже первым параметром принимает значение, а вторым - массив.

Казалось бы, две похожие функции, но почему порядок параметров разный? Почему нельзя было все функции этого типа стандартизировать, чтобы, например, везде сначала шёл массив, а затем уже значение?
Почему везде всё по-разному?
Это я чего-то не понимаю, или это просто разработчики php не могут в согласованную работу? В чём сакральный смысл такого поведения?
И это ведь не единственный пример, есть куча функций, которые ищут что-то в чём-то и порядок параметров всегда хаотичный, не подчиняющийся логике.

А это порой жутко неудобно бывает.
Ответы: >>1204470 >>1204481 >>1204488
Аноним 2018/06/07 07:02:18  №1204470 208
>>1204462
А нет там никакой логики. PHP за этот пиздец не пнул еще разве что ленивый.
Аноним 2018/06/07 07:19:07  №1204481 209
>>1204462
Необязательные параметры идут в конце.
>Если указан необязательный параметр значение_для_поиска, функция возвращает только ключи, совпадающие с этим параметром. В обратном случае, функция возвращает все ключи массива исходный_массив.
Ответы: >>1204484
Аноним 2018/06/07 07:23:30  №1204483 210
>>1204435
>Окончил вышку(программист)
>и работаю на принудительной галере
>Понимание программирования немного есть
>кроме веба за полтора года ничего не успею освоить на уровне джуна
Ты дно, пили сюда свои проекты.
Ответы: >>1204502
Аноним 2018/06/07 07:24:48  №1204484 211
>>1204481
Ну тогда всё встаёт на свои места, спасибо.
Ответы: >>1204489
Аноним 2018/06/07 07:29:38  №1204488 212
>>1204462
Все эти функции добавлялись в язык в разных версиях и разными людьми.
Аноним 2018/06/07 07:31:33  №1204489 213
>>1204484
Хотя, с другой стороны. В любом случае, функции для строк и для массивов имеют разный порядок аргументов.
Для строк сначала идёт haystack, а потом needle (как например в strpos), для массивов наоборот. Хотя оба аргумента обязательные.
Ну и названия методов тоже. array_search vs. strpos. Нелогично? Нелогично!

Я просто ньюфаня, и меня это немного путает (и пугает).
Ответы: >>1204538
Аноним 2018/06/07 07:33:59  №1204492 214
Анон, расскажи за такое действие, как это:
$a -> b;
Что тут происходит?
Ответы: >>1204495
Аноним 2018/06/07 07:39:16  №1204495 215
>>1204492
Немного не то.
Задана переменная $a, к примеру.
И запись: $this -> a что означает?
Ответы: >>1204503 >>1204505
Аноним 2018/06/07 07:42:55  №1204502 216
Ответы: >>1204538
Аноним 2018/06/07 07:43:20  №1204503 217
>>1204495
$this - это указатель на текущий объект. Хотя, я не уверен, насколько слово "указатель" применимо в контексте php.
В любом случае, эта переменная, содержащая текущий объект.
Нотация -> означает обращение к какому-либо свойству или методу объекта.
Следовательно, $this->a обращается к свойству a текущего объекта .
Ответы: >>1204507
Аноним 2018/06/07 07:45:28  №1204505 218
Ответы: >>1204507
Аноним 2018/06/07 07:56:10  №1204507 219
Аноним 2018/06/07 09:01:03  №1204538 220
>>1204502
Плохова ответ!

>>1204489
Первым аргументом идет то что должно выдаться.
array_keys выдает массив.
array_search только первый ключ.
strpos позицию в строке.(Потому первая строка, а не искомый ключ)
>Нелогично?

Я сам нью, только позавчера начал основы читать.
Ответы: >>1204550 >>1204551
Аноним 2018/06/07 09:18:34  №1204550 221
>>1204538
О каких вообще проектах ты меня спрашивал?
Ответы: >>1204584
Аноним 2018/06/07 09:18:59  №1204551 222
>>1204538
Ну давай разберем по частям, тобою написанное ))

>Первым аргументом идет то что должно выдаться.
Смотрим:
array_search Осуществляет поиск данного значения в массиве и возвращает ключ первого найденного элемента в случае удачи (c php.net)
То есть што делает эта функция? Ищет в массиве искомое значение и возвращает первую позицию его. Да?

Теперь дальше:
strpos Возвращает позицию первого вхождения подстроки

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

Я так и не понял, что ты имел ввиду под
>Первым аргументом идет то что должно выдаться.

И в первой, и во второй функции возвращается int, который характеризует позицию первого найденного значения.

>Первым аргументом идет то что должно выдаться
>array_search только первый ключ
Мы ожидаем от функции индекс первого найденного элемента, поэтому первым аргументом передаём элемент, а вторым массив? Звучит логично.

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

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

>Нелогично?
Ответы: >>1204614
Аноним 2018/06/07 09:47:02  №1204584 223
>>1204550
О любых твоих.
Портфолио есть чем наполнить?
Если нет, то пили, попутно что-нибудь поймешь для себя.

>дайте совет
По поводу? Сформулируй вопрос!
Напиши имеющиеся знания.
Ответы: >>1204620
Аноним 2018/06/07 10:20:02  №1204614 224
>>1204551
>Мы ожидаем от функции индекс первой найденной последовательности, поэтому первым аргументом передаем массив, в котором осуществляется поиск, а вторым уже искомый набор элементом.
Не массив а строку!
Получаем позицию в строке. Но не подстроку, которую ищем.



array_search пользуемся для работы с искомым значением.
(И конечно же для работы с массивом т.к. значение вложенное в него, но прежде всего со значением)
strpos пользуемся для работы со строкой в которой находится последовательность.
(Прост работаем относительно последовательности)

>Нелогично?
Ответы: >>1204672
Аноним 2018/06/07 10:27:32  №1204620 225
>>1204584
В универе батрачил на работе, не связанной с ит. Поэтому сейчас отрабатываю на этой галере 2 года, только сюда без особых знаний взяли . Нету никаких проектов, то что на работе делаю - это пару тысяч строк каких - то костылей на языке, который лет 15 не используют для бухгалтеров и кладовщиков.Знания вроде и есть, а по сути нет. Знаю простые вещи вроде циклов, ресурсий, алгоритмов для строк и сортировок, что такое процедуры, деревья, массивы и тд и тп, по вебу конкретно ничего не знаю кроме универской вёрстки с простейшим вмешательством js, по пхп максимум апач ставил и пару лаб простейших писал, английский pre-intermediate. Хочу совета в том, что лучше учить за эти полтора года, было бы неплохо для белорусских реалий. Может вообще не в веб вкатываться. Какая-то ебанутая простыня получилась, сейчас меня как и большинство платиновых нахуй пошлют.
Ответы: >>1204650
Аноним 2018/06/07 10:51:05  №1204650 226
>>1204620
>сейчас меня как и большинство платиновых нахуй пошлют.
С такими вводными данными точно.
>языке, который лет 15 не используют для бухгалтеров и кладовщиков
Ты кроме птичьего знаешь еще какой?

>на работе делаю - это пару тысяч строк каких - то костылей
Разве это не поддержка кода?

>Знаю простые вещи вроде циклов, ресурсий, алгоритмов для строк и сортировок, что такое процедуры, деревья, массивы и тд и тп
Так это же самая основа, разве нет?
Остается только семантику изучить чтобы к ней применять.

>Хочу совета в том, что лучше учить за эти полтора года
Лучше для чего? В чем лучше?

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

>было бы неплохо для белорусских реалий.
Устройство трактора?
Ответы: >>1204654
Аноним 2018/06/07 10:56:06  №1204654 227
>>1204650
Не поддержка, я их сам пишу. В джсе же тоже все эти основы используются, как и в пхп.
Ответы: >>1204664
Аноним 2018/06/07 11:08:06  №1204663 228
Ещё вопрос во многих вакансиях на пхп пишут в требованиях+ знания вёрстки и js, на каком уровне обычно требуют это?
Ответы: >>1204671
Аноним 2018/06/07 11:10:26  №1204664 229
>>1204654
Ты пишешь программы или костыли для программ?
А еще сайты можно плить на питоне!

Ты определился что ты хочешь от проганья или что хочешь прогать?
Ответы: >>1204680
Аноним 2018/06/07 11:14:07  №1204671 230
>>1204663
>+ знания вёрстки и js, на каком уровне обычно требуют это?
На уровне чтения и использования в коде.
Пили свой проектик учебный, в процессе придет осознание.
Аноним 2018/06/07 11:15:38  №1204672 231
>>1204614
>Не массив а строку!
Так ведь строка это и есть массив!
Строка - последовательность символов, массив - последовательность каких-то других данных.
В каком-нибудь C это вообще буквально так и есть.

И первая, и вторая функция используется для поиска значения в последовательности.
И первая, и вторая функция возвращает индекс первого найденного элемента по нашему запросу.

Будь это элемент в массиве или подстрока, какая разница? И там и там возвращается одно и то же.
Чем принципиально отличается индекс массива и позиция в строке? Это такое же число, равное отступу от начала этой последовательности.

Какая разница для чего нам нужна эта функция, если возвращаемое значение и там, и там несет в себе один смысл?

Окей, вот у нас есть строка мышь.
Мы пытаемся найти в ней "ш".

И спрашиваем, какой отступ у символа "ш" в последовательности символов мышь, относительно начала последовательности?
Получаем ответ - 2.

Теперь у нас есть массив ["м", "ы", "ш", "ь"].
Мы пытаемся найти в нём "ш".

И спрашиваем, какой отступ у элемента типа "строка" "ш" в последовательности элементов типа "строка" "м", "ы", "ш", "ь", относительно начала последовательности?
Получаем ответ - 2.

В чём принципиальная разница, которая бы отличала первую функцию от второй настолько, чтобы она стала достойна смены порядка аргументов?

Мы ищем что-то в чём-то. Ищем что-то в какой-то последовательности. Ищем позицию элемента какого-то типа в последовательности, состоящей из элементов данного типа.
Ну а потом, для чего нам может понадобиться узнать позицию последовательности в строке? Ну, например, для того, чтобы убедиться, что она там вообще есть, ну провести какие-то манипуляции с последовательностью.
Но и с массивом то же самое! Мы можем использовать функцию array_search как для того, чтобы убедиться, что массив есть, ну или чтобы провести какие-то манипуляции с этим элементом, т.е. по сути тоже с последовательностью, только состоящей из одного элемента (да и к тому же ничто не мешает использовать функцию для поиска некоего диапазона, чтобы потом работать с ним).

Может быть, я слишком глупый, но я этого не понимаю.
Ответы: >>1204682 >>1204740 >>1204758
Аноним 2018/06/07 11:19:40  №1204675 232
Ответы: >>1206418
Аноним 2018/06/07 11:22:41  №1204680 233
>>1204664
Программы, но они костыльные, так как смысла не вижу углубляться в то, что не буду использовать после этой работы(fox). От программирования хочу работы, а не хобби, поэтому спрашиваю совета у знающих анонов, во что сейчас лучше вложить силы и эти полтора года.
Ответы: >>1204685 >>1204686
Аноним 2018/06/07 11:25:44  №1204682 234
>>1204672
В итоге ты ищешь значение не само в себе, а для работы с чем-то.

Ты ищешь ключ значения в массиве для работы со значением.
Ты ищешь позицию в строке для работы со строкой.
Ответы: >>1204690
Аноним 2018/06/07 11:28:27  №1204685 235
>>1204680
>хочу работы
у тебя уже есть работа или тебя гонят с нее за говнокод?
Ты так и не написал на чем программируешь.
Ответы: >>1204696
Аноним 2018/06/07 11:31:56  №1204686 236
>>1204680
>во что сейчас лучше вложить силы и эти полтора года.
В курсы сантехника!
Ответы: >>1204689
Аноним 2018/06/07 11:33:42  №1204689 237
Ответы: >>1204695
Аноним 2018/06/07 11:34:55  №1204690 238
>>1204682
>Ты ищешь ключ значения в массиве для работы со значением.

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

unset($misch[array_search("ш", $misch)]);
substr_replace($misch, "", strpos($misch, "ш"), 1);

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

И в первом и втором случае меня волнует только позиция значения для того, чтобы удалить её их последовательности. Ничего больше меня не волнует.
Ответы: >>1204692 >>1204706
Аноним 2018/06/07 11:36:13  №1204692 239
>>1204690
Ну, вместо unset лучше использовать array_splice, но суть это не меняет.
Аноним 2018/06/07 11:39:40  №1204695 240
>>1204689
Чем лучше?
Сварщик более вредная профессия.
Аноним 2018/06/07 11:40:02  №1204696 241
>>1204685
Написал же, на фоксе. Я тут отсиживаю отработку после универа обязательную 2 года, никто не гонит.
Ответы: >>1204704
Аноним 2018/06/07 11:50:37  №1204704 242
>>1204696
FoxPro?
Работаешь с СУБД?
Чего не перекатишься в SQL?
Ответы: >>1204718
Аноним 2018/06/07 11:52:22  №1204706 243
>>1204690
>Я ищу номер значения, чтобы удалить его из последовательности, например.
В примере ты ищешь позицию, чтобы внести правки в строку.
Ответы: >>1204707
Аноним 2018/06/07 11:53:06  №1204707 244
Ответы: >>1204712
Аноним 2018/06/07 11:56:03  №1204712 245
>>1204707
У тебя строка и является массивом.
Ответы: >>1204715
Аноним 2018/06/07 11:59:21  №1204715 246
>>1204712
Так строка это и есть массив. Что массив, что строка, в обоих случаях мы находим позицию, чтобы удалить элемент из последовательности.
Разницы нет. Нелогичность функций есть.
Не стоит наделять смыслом то, что смысла не имеет. Например, функции принимают аргументы в разном порядке из-за того, что потом со сторокой...
Функцию не должны волновать то, что кто-то будет делать с тем значением, которое она возвращает. Её задача принять параметр, обработать его и вернуть результат. Всё.
Ответы: >>1204726 >>1204740
Аноним 2018/06/07 12:02:22  №1204718 247
>>1204704
Да, на фокспро. Тут полный пиздец с советских времен, баз нет, просто тысячи таблиц несвязанных, ебись как хочешь, как пришёл-дали книгу, которая старше меня и такой же компухтер, и я начал костылить на отьебись, так что мои знания отсюда никому не нужны.
Ответы: >>1204730 >>1204755
Аноним 2018/06/07 12:16:20  №1204726 248
>>1204715
>мы находим позицию, чтобы удалить элемент из последовательности.
Не обязательно.

Индекс в множестве строк для работы с найденной строкой.
!==
Позиция в строке для работы с этой же строкой.

>Функцию не должны волновать
Функция сама должна волновать своим порядком аргументов.
>функции принимают аргументы в разном порядке из-за
внедренной логики программирования

>Разницы нет.
>Нелогичность функций есть.
>Не стоит наделять смыслом то, что смысла не имеет.
>Всё.
Ответы: >>1204736 >>1204740
Аноним 2018/06/07 12:18:06  №1204730 249
>>1204718
Знание семантики рили не нужно, но работа с СУБД разве она будет сильно отличаться?
Ответы: >>1204741
Аноним 2018/06/07 12:23:29  №1204736 250
>>1204726
>Не обязательно.
Вот и именно, спасибо, что ты наконец-то это признал. Мы ищем отступ для чего угодно, задача функции вернуть нам этот отступ и всё.

>Индекс в множестве строк для работы с найденной строкой.
>!==
>Позиция в строке для работы с этой же строкой.
Но в то же самое время, индекс в массиве любых данных, необходимый для работы с этим же массивом (например, для удаления последовательности элементов.
===
Позиция в строке для работы с этой же строкой (например, для удаления последовательности).

Концептуально, конечно же, понятное дело, что типы разные.
Ответы: >>1204740 >>1204742
Аноним 2018/06/07 12:31:05  №1204740 251
>>1204736
>>1204726
>>1204715

Хватит засорять тред бессмысленным флудом. Недостатки PHP (и других языков) давно уже собраны и изучены, если хотите их обсудить, перемещайтесь сюда: https://habr.com/post/315152/

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

Также, в PHP строки это массивы байт, а не массивы символов. Например, $a = "абв"; echo $a[0]; в кодировках utf-8 или utf-16 НЕ выведет букву "a", так как строка в PHP это НЕ массив символов.

Соответственно объяснения в посте >>1204672 ошибочные и не учитывают этого.

Функции работы с массивами в PHP не будут работать со строками. Например, ты не можешь применить функцию array_sum или in_array к строке. И наоборот, функции работы со строками не работают с массивами.

Функция strpos называется так, потому, что это функция из старой сишной библиотеки работы с однобайтовыми строками и там принят такой стиль наименования. Сейчас в коде надо использовать mb_strpos, а не strpos.
Ответы: >>1204758
Аноним 2018/06/07 12:31:20  №1204741 252
>>1204730
Я делаю простейшие вещи из sql, создать курсор, проиндексировать, найти что-то, присоединить, сортировать, изменить,удалить, большая часть ебли с самим воксом
Аноним 2018/06/07 12:33:00  №1204742 253
>>1204736
>Мы ищем отступ
Нет.

Положение элемента
!==
Положение относительно элемента

Ответы: >>1204758
Аноним 2018/06/07 12:37:45  №1204747 254
Кому не нравятся стандартные функции вплоть до названий - ничто не мешает написать враппер.
Аноним 2018/06/07 12:42:38  №1204755 255
>>1204718

Нельзя перенести код на нормальную реляционную СУБД с внешними ключами, комментариями и сделать веб приложение?
Ответы: >>1204768
Аноним 2018/06/07 12:47:34  №1204758 256
>>1204742
>Положение элемента
Относительно чего? Не в воздухе же он болтается. Массив - это набор данных, расположенных последовательно в памяти. Следовательно, индекс элемента - это его смещение относительно начала.
Ровно как и в строке, позиция подстроки - это смещение относительно начала.

>>1204740
>Соответственно объяснения в посте >>1204672 ошибочные и не учитывают этого.
Окей, я ошибся с тем, что назвал массив байтов массивом символов. Ну и что с того? Строка перестала быть массивом? Нет, не перестала.
Я там говорил о том, что при помощи этих функций, что в массиве байтов, что в массиве символов, мы находим позицию вхождения последовательности или элемента.
Стало ли хоть одно моё утверждение ложным? Нет, не стало.

>Хватит засорять тред бессмысленным флудом
Я не флудить хочу, а разобраться.
Ответы: >>1204779 >>1204912
Аноним 2018/06/07 12:53:04  №1204768 257
>>1204755
Это завод. Тут слишком все запущено, компы эры доса, таблицы никогда не узнаешь где ещё используются, тысячи таблиц с кучей полей и записей, никто не знает где какое поле что значит, даже программы, написанные на вижуал фокс а не на фокспро досовском уже лагают, все со всем связано и от каждого пука ломается, сеть и интернет слабые или почти отсутствуют. Я сам не шарю в этом всем, но то, что я тут вижу- маразм полный, из этого говна уже не вылезти
Ответы: >>1204772
Аноним 2018/06/07 12:54:55  №1204772 258
>>1204768
Вообще я единственный кто на вижуал фокс с формами пишет тут, все ветераны программирования до сих пор на матричных принтерах и досе сидят
Ответы: >>1204776
Аноним 2018/06/07 12:57:42  №1204776 259
>>1204772
Могу много рофлоф потом рассказать отсюда, но смена кончается и мне надо идти
Аноним 2018/06/07 12:59:54  №1204779 260
>>1204758
>Следовательно, индекс элемента - это его смещение относительно начала
Короче, походу тут я ошибся. В PHP массив - это не совсем то, чем он является на самом деле. Это по своей сути хеш-таблица, поэтому индексы могут быть любыми.

То есть, не составит труда написать array([231] => "м", [717] => "ы", ...);
Тогда в этом случае, индексы уже ничего не означают.
Ответы: >>1204782 >>1204786 >>1204801
Аноним 2018/06/07 13:00:24  №1204782 261
>>1204779
Ой, ну т.е. без квадратных скобочек, естественно.
Аноним 2018/06/07 13:03:16  №1204786 262
>>1204779
Весь этот пердолинг на старых компах и неэффектинвых системах должен кучу времени отнимать у рабочих, нет денег на новое перейти - что производит завод?
Ответы: >>1204792 >>1204793
Аноним 2018/06/07 13:09:07  №1204792 263
Аноним 2018/06/07 13:11:01  №1204793 264
>>1204786
Ну там ограничение на числа и строки в качестве ключей.
Аноним 2018/06/07 13:20:01  №1204801 265
>>1204779
Выходит, когда мы используем функцию array_search, мы действительно ищем индекс отдельного элемента. Поскольку он не указывает на смещение относительно начала, единственное, для чего он нам может понадобиться, это для того, чтобы отыскать элемент.

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

Вот если бы мы обновляли ключи каждый раз, тогда да. А так, выходит, на ключи в php нельзя полагаться и численный массив является тем же ассоциативным массивом, только за исключением того, что ключами в нём являются целые числа. И всё.

Выходит, я не прав? Ну ладно, entschuldigung.
Ответы: >>1204814
Аноним 2018/06/07 13:32:30  №1204814 266
>>1204801
Но строки же тоже могут быть ключами.

А еще элемент с индексом 3 может идти после елемента с индексом 5.

Покопайся в массивных функциях, с помощью какой то можно быстро изменить массив чтобы у него были индексы по порядку с нуля.
Аноним 2018/06/07 16:07:46  №1204912 267
>>1204758

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

Функции так названы изначально, так как strpos это функция сишной библиотеки с таким именем, а in_array и array_search - написанные специально для PHP функции, причем подозреваю, в разное время. Потому у них разный стиль именования.

Какой смысл обсуждать, правильный в них порядок аргументов или нет? Он от этого не поменяется.

Почему бы тебе не обратиться с такими вопросами в список рассылки, где общаются разработчики PHP? Или хотя бы не устраивать тут чат, а написать все аргументы одним постом и успокоиться?
Ответы: >>1204957
Аноним 2018/06/07 16:43:54  №1204957 268
>>1204912
Я не утверждал, что строка и массив в php это одно и то же. Я писал, что строка это массив. И всё. Я даже сделал акцент на этом моменте в одном из своих постов.

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

>Какой смысл обсуждать, правильный в них порядок аргументов или нет? Он от этого не поменяется.
Я хотел узнать почему он такой, чем обусловлен. И почему, если авторы функций знали, что они делают, они не стандартизировали именование функций и их аргументы.
Я не рассчитывал на развёрнутый ответ с печатью "истина", я лишь ждал, что какой-то мимокрокодил, если слышал об этом, кинет в меня парочкой словечек.
Ответы: >>1205004 >>1205086
Аноним 2018/06/07 17:30:30  №1205004 269
>>1204957
Съеби уже отсюда, чмоха.
Аноним 2018/06/07 18:33:41  №1205040 270
>>1199390 (OP)
Оппушка и все.
Насколько сильно нужно знать алгоритмы и матеш на самом деле? Нужно ли быть одаренным гением или хватает базовых знаний?
И как на данный момент обстоят дела с вакансиями PHP программиста. На superjob нашел только 4 вакансии, которые не требовали опыт работы. Все, лавочка закрыта?
И еще, сложно ли научиться оптимизации и рефакторингу существующего кода?
Ответы: >>1205048
Аноним 2018/06/07 18:45:54  №1205048 271
Ответы: >>1205063
Аноним 2018/06/07 19:08:31  №1205063 272
>>1205048
Посмотрел, там побольше будет. Ну а так на чем основана работа PHP программиста? Просто в одной вакансии, в разделе «дополнительные плюшки» увидел решение разных и сложных задач. Я понимаю, что некоторым программистам реально скучно решать одинаковые задачи, но не настолько же, что бы добавлять это в список преимуществ. Вот и интересно, на вакансию PHP программист больше требуется опыт или мозги?
Ответы: >>1205064 >>1205092
Аноним 2018/06/07 19:09:57  №1205064 273
>>1205063
ты должен уметь клепать однотипные магазины на вордпессе. Больше работы для пхп программистов нет
Ответы: >>1205096
Аноним 2018/06/07 19:49:46  №1205086 274
>>1204957

Я уже писал выше, причины исторические. strpos названа по аналогии с strstr и strchr, которые являются функциями из сишной библиотеки, в таком виде она уже лет 40 существует: https://ru.wikipedia.org/wiki/String.h

Правда, в PHP в итоге их переписали и они сейчас используют какую-то внутреннюю библиотеку работы со строками: https://github.com/php/php-src/blob/5eb1f92f31cafc48384f9096012f421b37f6d425/ext/standard/string.c#L1955

Функции in_array и array_search - из набора функций array в PHP. Они тоже существуют очень давно и почему там такой порядок, я не знаю.

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

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

> Я писал, что строка это массив.

Строку можно представлять как "массив" символов, но полноценным массивом она от этого не станет. Моя цель была лишь объяснить, что в PHP строка и массив это разные типы и один нельзя использовать вместо другого. Чтобы кто-нибудь потом не удивлялся, почему функции для массивов не работают со строкой.

> И почему, если авторы функций знали, что они делают, они не стандартизировали именование функций и их аргументы

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

И о какой стандартизации ты говоришь? На начальном этапе развития PHP его писали несколько человек и если бы они занимались стандартизацией, он бы вообще свет не увидел. А сейчас процесс стандартизации есть - он называется PSR, можешь погуглить и почитать. Но естественно, стандартизовывать то, что уже сделано, поздно.

Аноним 2018/06/07 19:55:11  №1205092 275
>>1205063
Писать/Дописывать/Обслуживать логику какого-либо приложения, например "электронные карточки пациентов" в поликлинике. Приложение в большинстве случаев будет написано на фреймворке.
Ответы: >>1205097
Аноним 2018/06/07 19:59:43  №1205096 276
>>1205064
Не обманывай, вот пример студии разрабатывающей приложения на синем слонике для серьезного бизнеса https://task-on.com/
Аноним 2018/06/07 20:00:22  №1205097 277
>>1205092
>фреймворке
То есть по сути фреймворк сильно облегчает работу?
Чn тогда на вакансиях вопросы задают типа :
Даны две переменные - a и b. Например, они равны a=2; b=3. Необходимо поменять местами эти числа (то есть a=3, b=2). Но не используя третью переменную
Ответы: >>1205151 >>1205186 >>1205272
Аноним 2018/06/07 20:44:44  №1205151 278
>>1205097
Ну типо типо, безопастность там, много чего уже написано, все по правилам и т.д. Ты должен знать основы все равно, как ты разберешься в фреймворках не зная основ языка на котором они написаны? А уебанские говнозадачи нужны для проверки твой смекалочки.
Аноним 2018/06/07 21:34:07  №1205186 279
>>1205097
file_put_contents('a.txt', $a);
file_put_contents('b.txt', $b);
$a = (int)file_get_contents('b.txt');
$b = (int)file_get_contents('a.txt');

Пойдет?
Ответы: >>1205205
Аноним 2018/06/07 22:50:34  №1205205 280
Ответы: >>1205211
Аноним 2018/06/07 23:18:45  №1205211 281
>>1205205
Вообще фантазии у людей нет. Самое очевидное решение же. Обычно такие вопросы задают с целью услышать несколько вариантов решения, поэтому можно смело начать с самых странных и дебильных, пока интервьюер не задолбается и не сформулирует более четкое тз.

-----
$a = explode('KUKUYOPTA', $a . 'KUKUYOPTA' . $b);
$b = $a[0];
$a = $a[1];
-----
use KukuyoptaLib/VariableMixer;
VariableMixed::mixVars($a, $b);
-----
$a = [$a, $b];
$b = $a[0];
$a = $a[1];
-----
eval('use third variable here');
-----
list($a, $b) = [$b, $a];
Ответы: >>1205243 >>1205426
Аноним 2018/06/07 23:21:50  №1205212 282
Вопрос нуба: зачем нужны иммутабельные объекты?
Ответы: >>1205213 >>1206013
Аноним 2018/06/07 23:23:14  №1205213 283
>>1205212
Когда тебе нужна иммутабельность.
Аноним 2018/06/08 05:35:59  №1205243 284
Аноним 2018/06/08 07:30:23  №1205272 285
Аноним 2018/06/08 10:32:37  №1205426 286
>>1205211
Ты всерьёз думаешь, что большинство соискателей смогут решить эту задачу хоть одним способом? Расскажи эйчарам, посмеши. Я про соискателей на начальные позиции, ну и про тех, кому "вышка не нужна"
Ответы: >>1205463 >>1205915
Аноним 2018/06/08 11:12:22  №1205463 287
>>1205426
>вышка не нужна
Высшее образование в России - это профанация.

Ты же имел в виду простых деревенских ребят, у котрых "смекалочка".
Таких полно среди пыхеров, 1с-ников и прочих верстальщиков.
Аноним 2018/06/08 12:04:46  №1205498 288
Аноны, недавно начал учить пхп по гайду из оп-поста
Очень долго ебался с задачей на рандомный ответ, смог наговнокодить только так, через var_dump выводил номер нарандомленного ответа, а не сам ответ
Подскажите, как это можно реализовать без костылей?
https://ideone.com/B4EjTK
Ответы: >>1205516
Аноним 2018/06/08 12:40:11  №1205516 289
>>1205498

Функция array_rand возвращает ключ случайного элемента массива. Как, имея массив и ключ, получить значение элемента с этим ключом?

значение = массив[ключ]

Попробуй квадратные скобки. Это же основа работы с массивами, видимо, в учебнике это плохо объяснено, так как не первый раз задают этот вопрос.
Ответы: >>1205683
Аноним 2018/06/08 14:54:34  №1205683 290
>>1205516
Спасибо анон, все сразу получилось
Аноним 2018/06/08 18:31:47  №1205915 291
15283317221440.jpg (28, 500x549)
549x500
>>1205426
>"вышка не нужна"
В 90% случаев хуета и бесполезная трата времени. Ты сейчас напоминаешь служивых петушков, которые год чистили вилкой и присаживались на бутылку, а после кичатся званием "настоящий мужык".
Ответы: >>1205926
Аноним 2018/06/08 18:38:40  №1205926 292
>>1205915
Лично я за 4 года бакалавриата понял чем хочу заниматься в жизни(не по специальности)
В 17, когда поступал в уник, единственное чего я хотел- не попасть в армию. За 4 года подрабатывал,купил военник, заинтересовался программированием и жизнь стала куда интереснее
мимо-другой-анон
Ответы: >>1205962
Аноним 2018/06/08 18:58:38  №1205943 293
image.png (2, 150x114)
114x150
image.png (1, 138x117)
117x138
Помогите далбаебу. В базе данных есть таблица (пик 1).
Как мне вывести значения, чтобы имя не дублировалось, примерно как на пике 2?
Ответы: >>1205946 >>1205947 >>1205954
Аноним 2018/06/08 19:04:29  №1205946 294
>>1205943
преобразовать полученные данные перед вывоводом
Аноним 2018/06/08 19:04:50  №1205947 295
>>1205943
сделать массив с массивами
Аноним 2018/06/08 19:11:23  №1205954 296
Аноним 2018/06/08 19:16:46  №1205962 297
>>1205926
>понял чем хочу заниматься в жизни
Просто ты повзрослел.
Аноним 2018/06/08 20:18:16  №1206013 298
>>1205212

Хороший вопрос. Давай подумаем, какие есть у них плюсы и минусы:

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

$money = new Money(300, 'USD');
$user->setMoney($money);

doSomething($user);

// если функция делает $user->getMoney()->setAmount(150), то вполне возможно
// что там уже другая сумма и в сообщении будет не "300 USD"
echo "Вам добавлено {$money->getAsString()} денег\n";

В случае, если бы объект Money был иммутабельным, то мы можем гарантировать, что сообщение будет выведено корректно и будет содержать сумму 300 USD.

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

- если в переменной хранится иммутабельный объект, то очень легко и быстро проверить, изменилась она или нет:

$oldValue = ...;
$currentValue = ....;

if ($currentValue === $oldValue) {
echo "Данные 100% не изменились\n";
} else {
// сохранить изменения
}

В случае с обычными объектами так не выйдет.

Но есть и минусы:

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

Также, я решил погуглить, и почитать что другие люди пишут по теме, вот например: https://hackernoon.com/5-benefits-of-immutable-objects-worth-considering-for-your-next-project-f98e7e85b6ac?gi=5ea2ddd2d229
Аноним 2018/06/08 20:28:55  №1206020 299
Почему всегда слева вверху выводится значение хранимое в сессии? Я то его в коде нигде не вывожу
Ответы: >>1206135
Аноним 2018/06/09 07:15:15  №1206135 300
Аноним 2018/06/09 14:13:56  №1206418 301
hqdefault.jpg (14, 480x360)
360x480
Ответы: >>1206909
Аноним 2018/06/09 17:44:47  №1206642 302
Почему не получается читать файл? Функции file_exists и file_size показывают правильный результат. В переменой пути лежит ./subfolder/filename, а сам файл имеет имя filename и лежит в соседней папке от пхп скрипта. это значит файл на том месте где скрипт его ищет Но функции fread, file и get_file_contents срабатывают без ошибок возвращая пустой результат. Как заставить скрипт прочитать файл?
Ответы: >>1206658 >>1206659 >>1207274
Аноним 2018/06/09 18:18:20  №1206658 303
>>1206642
нашёл что-то в error.log там сказано у скипта нет прав для доступа к файлу. Уже гуглю как исправить проблему. Вопрос снят
Аноним 2018/06/09 18:18:21  №1206659 304
>>1206642
Хуй знает чего ты колхозишь, но используй FilesystemIterator.
Аноним 2018/06/10 05:40:23  №1206909 305
>>1206418
Бухаю третий день, мемчики не смотрю, мне кажется это прогресс. :с
Ответы: >>1207306
Аноним 2018/06/10 16:32:29  №1207274 306
>>1206642
Подключи его через include
Аноним 2018/06/10 16:48:52  №1207291 307
Учусь по книге ОПа, но что то перенос строки с помощью \n не работает. Работает только если самому набрать
echo "<br>", но тогда код страницы не очень смотрится. Это можно как нибудь пофиксить
Ответы: >>1207317 >>1207659 >>1218672
Аноним 2018/06/10 17:05:02  №1207306 308
1.jpeg (48, 800x600)
600x800
Аноним 2018/06/10 17:19:08  №1207317 309
>>1207291
header('Content-Type: text/plain');
Аноним 2018/06/10 17:31:56  №1207334 310
Пытаюсь вывести рандомный элемент массива через "echo", но что-то не очень получается. Не подскажете как тут изменить можно, при условии что потом надо будет еще раз вызвать какой-то рандомный элемент данного массива?
http://codepad.org/90MOd1RB
Ответы: >>1207335 >>1207355
Аноним 2018/06/10 17:33:22  №1207335 311
Ответы: >>1207350
Аноним 2018/06/10 17:45:03  №1207350 312
>>1207335
echo "$word1[mt_rand(0, count($word1) - 1)]";
Перенеси просто логику в отдельную переменную, зачем такое делать?
<?php

error_reporting(-1);

$word1 = array('Чудесных', 'Суровых', 'Занятных', 'Внезапных');

$i = mt_rand(0, count($word1)-1);
echo "$word1[$i]";
?>
Аноним 2018/06/10 17:50:26  №1207355 313
>>1207334

Вместо mt_rand, используй array_rand.
$новаяПеременная[array_rand($имяМассива)];
В echo лучше вставлять уже готовое решение в виде переменной.

Пример: https://ideone.com/SihzCp
Аноним 2018/06/11 10:22:37  №1207659 314
>>1207291
Еще можешь выводить код в теге <pre>
Аноним 2018/06/12 00:00:59  №1208106 315
Untitled.png (3, 187x71)
71x187
Штука в том что без аннотации хинтер тут бы вывел ошибку.
Поясню за структуру: есть статический массив с ключами-регулярками и значениями-функциями, я беру урл и прохожусь по ключам, беру фукнцию с матченой регуляркой и ей паршу дом полученный из этого урла, все оч просто.
Теперь думаю как более правильно в понимании сурьёзного программирования это следует оформить. Получается, нужно например сделать интерфейс для парсера, и парсеры для раных ссылок делать его имплементациями, а потом... что? Вот сам выбор нужного парсера как грамотно организовать? Все мои мысли сводятся к чему-то типо того-же роутинга и в итоге никакого выйгрыша ни в скорости ни в декомпозиции кода не видится. Т.е. получается так-же статически связано как и один массив, только больше кода. Может, можно вообще по другому сделать всё, но задача стоит тупо для разных ссылок вызвать разные фукнции.
Ответы: >>1208110 >>1218673
Аноним 2018/06/12 00:36:19  №1208110 316
>>1208106
Ну и на всякий случай поясню что да можно было бы например call_user_func использовать и без аннотации но это тоже самое по сути (а между тем есть данные что это медленнее работает) и суть проблемы не в этом
Ответы: >>1218674
Аноним 2018/06/12 02:43:19  №1208119 317
Думаю что пришел с классической проблемой.

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

Пока что этот селект прогоняется в цикле из двух итераций.

На первой итерации собирается весь поиск и прогоняется селект с целью подсчета строк.

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

Как разрешить эту задачу и избавиться от дублирования запроса в базу в этой ситуации?
Ответы: >>1210659
Аноним 2018/06/12 06:45:18  №1208161 318
А почему никто не использует and, or вместо ||, &&? Удобнее же их набирать чем символы.
Ответы: >>1208202 >>1210176 >>1210648
Аноним 2018/06/12 07:48:26  №1208196 319
Поясните зачем нужен PDO, если в фрейворках свои методы работы с БД?
Ответы: >>1208265 >>1208560
Аноним 2018/06/12 07:53:23  №1208202 320
>>1208161
&&, ||, трушнее по сишному

у and и or приоритет ниже
Аноним 2018/06/12 09:25:52  №1208265 321
>>1208196
Хуевые значит фреймворки. PDO быстрее и проще.
Аноним 2018/06/12 16:39:18  №1208551 322
1512179375200 (1).png (99, 680x521)
521x680
Продублирую вопрос из закреп-треда.
Пацаны, завалил задание на собеседовании, подскажите пожалуйста ответ.
Имеется ассоциативный массив.
$a=array("John"=>array("test_id"=>1, "student_id"=>2, "mark"=>3), "Peter"=>array("test_id"=>1, "student_id"=>4, "mark"=>1), "Hans"=>array("test_id"=>1, "student_id"=>3, "mark"=>1), "Helen"=>array("test_id"=>2, "student_id"=>2, "mark"=>5));
Задача отсортировать массив в порядке возрастания элементов подмассивов с ключом "mark" НЕ ИСПОЛЬЗУЯ стандартные функции сортировки PHP(usort и прочие).
Я пробовал пузырьком через цикл фор, но из-за ассоциативного массива с именами он не видит элементы. Форич тоже криво работал.
Ответы: >>1208568 >>1208614
Аноним 2018/06/12 17:07:39  №1208560 323
>>1208196
они реализуются через PDO
Аноним 2018/06/12 17:14:54  №1208568 324
>>1208551
Самое простое разбить на 2 индексированных массива. Ключи и значения по отдельности.
$ak = array_keys($a);
$av = array_values($a);
Главное не забыть переставлять элементы в обоих массивах. Потом склеить array_combine($ak, $av);

Если честно, то array_combine я без мануала не вспомнил бы.
Ответы: >>1208614
Аноним 2018/06/12 18:13:00  №1208614 325
>>1208551
Начал сам решать
но этот анон оказался быстреее>>1208568

Я вот так сделал, но без справочника я бы точно нихуя не сделал, на собесе можно инетом пользоваться или нет?
Ответы: >>1208615
Аноним 2018/06/12 18:13:20  №1208615 326
Ответы: >>1208655
Аноним 2018/06/12 18:43:14  №1208627 327
Ебантизм конечно имея юсорт сортировать пузырьком например, может еще ответ браузеру отдать не использвуя стандартные функции вывода??? Типа открываешь блять стрим и пишешь туда ну вот нахуя такое делают ебаный ВРОТТЕНБЕРГ МИНУС ЖОПА
Гораздо коректнее занести имена в колонку и сортировать как человек а не как жывотное, еще uasort есть

А еще гляньте на этих ебобо - имена людей в ключах!! ТИПО НЕБЫВАЕТ НА СВЕТЕ ДВУХ ДЖОНОВ БЛЯТЬ АГА!!!!!!
И АЙДИ СТУДЕНТОВ БЛЯТЬ СМОТРИ ТАМ ПЕРЕСЕКАЮТСЯ
КАКОГО ХУЯ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
сори за спам.
Ответы: >>1208659
Аноним 2018/06/12 19:19:54  №1208655 328
>>1208615
Не.
Поменяй стартовые значения оценок на 4 3 2 1 и посмотри результат https://ideone.com/ua9rlh У простых алгоритмов сортировки(пузырек, перестановками, вставками и т.д.) сложность n^2. Значит должен быть второй вложенный цикл.
Аноним 2018/06/12 19:26:29  №1208659 329
>>1208627
Норм задание на самом деле. Видно знает ли подопытный как устроены массивы в php и может ли реализовать простой алгоритм. Если бы попросили in-place Quicksort накатать, то наверно можно было бы взбугуртнуть.
Аноним 2018/06/12 22:42:10  №1208760 330
>>1199420

> понимаю, просто сам факт того, что там только поле ввода как бы говорит, что учитель может туда ввести, что угодно. Лучше всего будет сделать выпадающи список с поиском.

Можно сделать так, можно сделать поле ввода с возможностью ввода новых значений, отсутствующих в списке.

>>Доступ к приложению возможен только после регистрации и одобрения администратором.
> а где администратор должен давать это одобрение?

Тогда админка нужна. Но в начале можно наверно обойтись и без нее, просто вбив список пользователей в базу.

>>1199893

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

Когда учитель логинится, он видит, я думаю, список ближайших занятий (12 марта - физика у гр. 1234, 13 марта- математика у 1235). Замечания ставятся в рамках определенного курса. Например, только относящиеся к лабораторным по физике.

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

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

>>1199811

Он и не должен быть null. С чего бы? Число совпадений можно узнать по числу, которое вернет функция, или посчитав элементы в массиве внутри одной группы.
Аноним 2018/06/12 22:42:42  №1208761 331
>>1199850

Ты вообще заметил правильную вещь. С анонимной регистрацией действительно есть проблемы:

- если человек создал тест, а позже кто-то другой с того же компьютера зарегистрировался, получается, он получит доступ к тому тесту?
- если человек создал тест, получил куку, а потом внезапно залогинился, что делать? Склеивать эту куку и все тесты с нее с его аккаунтом или же "забыть" эту куку и потерять доступ к управлению тестами?

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

Потому мне сейчас пришел в голову другой вариант: при создании теста генерировать специальную куку для доступа к тесту, действительную только для этого теста и никак не мешающую другим тестам и логину/регистрации. Если речь о куках, то это может быть например кука owner[12345]=xxxx или owner_12345=xxxx. Также, если пользователь даст почту, то выслать на нее специальную ссылку, дающую доступ к управлению именно этим тестом (которая как раз будет ставить такую куку на какое-то время).

То есть не создавать пользователю анонимный аккаунт. А выдавать ему для каждого созданного теста свою куку. И может быть, стоит как-то это показывать на странице, не знаю, сделать ссылку "мои тесты" может быть.

Это не исключает возможности регистрации потом, можно после создания теста показывать ссылку вида /register?from=test_12345, которая привяжет этот тест в аккаунт. Также, можно сделать второй вариант, если человек открывает ссылку из почты для управления тестом и он залогинен, предложить добавить тест в аккаунт.

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

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

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

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

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

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

Так и надо сделать. Ссылка с каким-то трудноподбираемым токеном, дающая доступ к тесту.
Аноним 2018/06/13 10:32:06  №1208949 332
image.png (59, 830x100)
100x830
Есть джва сайта, которые физически лежат в разных директориях на одном и том же сервере, но один из сайтов является поддоменом другого.
То есть расклад такой:

http://domain.ru
http://sub.domain.ru

Иногда при открытии обоих этих сайтов в одном браузере на одном из сайтов возникает ошибка как на пикрелейтед.

Правильно ли я понимаю, что ошибка возникает из-за невозможности перезаписать существующий файл php сессии?
Как сделать так, чтобы при заходе на поддомен всегда создавалась отдельная от основного сайта сессия?
Ответы: >>1208961 >>1209094 >>1209153
Аноним 2018/06/13 10:32:35  №1208951 333
>>1199390 (OP)
Опушка, родной ты мой, зашел я тебе передать привет и моё искреннее спасибо.

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

Ну а сейчас я уже мидл-хуидл, в Хрякове, с зп в 1500.

В общем, спасибо, опчик, тебе огромное. Добра!
Ответы: >>1208953 >>1208963 >>1210173
Аноним 2018/06/13 10:33:39  №1208953 334
>>1208951
Спасибо в кармане не булькает. Задонать ОПу. На сайте есть ссылки.
Ответы: >>1208955 >>1209101
Аноним 2018/06/13 10:34:29  №1208955 335
>>1208953
>На сайте есть ссылки.

Где, на каком сайте? Сайт появился? Оп растёт
Ответы: >>1209101
Аноним 2018/06/13 10:37:07  №1208961 336
>>1208949
есть сессионная функция которая позволяет задать настройки сессионного кука, и там есть настройка поддомена, погугли
Ответы: >>1208965
Аноним 2018/06/13 10:37:56  №1208963 337
>>1208951
А вам там не нужны еще кодеры?
Аноним 2018/06/13 10:39:03  №1208965 338
>>1208961
Это где делается? В настройках сервера или сайта?
Ответы: >>1208980
Аноним 2018/06/13 10:44:42  №1208980 339
>>1208965
В пхп коде. Найди эту функцию в документации в разделе про сессии.
Аноним 2018/06/13 13:00:33  №1209094 340
>>1208949

Скорее всего нет, это из-за этого, что у тебя код сайтов выполняется от имени разных пользователей. И когда один сайт создает сессию, второй не может ее открыть. Можно попробовать проверить это, сделав ls -l в папке с сессиями и посмотреть от имени каких пользователей они созданы, какие у них стоят права.

Исправить это можно попробовать в настройках сессий (в php.ini или через ini_set), задав домен для кук так, чтобы он не включал поддомены. Либо задав разные папки для разных поддоменов.

Настройки сессий описаны в мануале: http://php.net/manual/ru/session.configuration.php
Ответы: >>1209145
Аноним 2018/06/13 13:05:35  №1209101 341
>>1208955
>>1208953

Никаких таких ссылок нет. Все сайты перечислены в шапке треда.
Аноним 2018/06/13 14:02:34  №1209145 342
>>1209094
>Скорее всего нет, это из-за этого, что у тебя код сайтов выполняется от имени разных пользователей.
Да. Так и есть.
>Исправить это можно попробовать в настройках сессий (в php.ini или через ini_set), задав домен для кук так, чтобы он не включал поддомены.
Я пытаюсь это сделать через .htaccess так как это единственный доступный мне вариант сейчас. Остальные варианты потребуют создания таска для системных администраторов хостинга. Делаю я так
php_value session.cookie_domain domain.ru (без точки перед доменом)
Если я правильно понял, точка перед именем домена означает, что кука будет использоваться на этом домене и на всех его поддоменах. А мне нужно, чтобы она использовалась только на этом домене и на поддоменах была недоступна?
Но в инструментах разработчика кука сессии всё равно устанавливается такая .domain.ru (с точкой)
Не подскажешь, в чём может быть проблема? Если что AllowOverride All установлен и сервер читает .htaccess. Это понятно хотя бы потому, что я настраивал в htaccess переадресацию и она работает.
>Либо задав разные папки для разных поддоменов.
Ты имеешь в виду разные папки для файлов сессий у каждого сайта? А как это сделать?
Спасибо заранее.
Ответы: >>1218674
Аноним 2018/06/13 14:19:37  №1209153 343
Аноним 2018/06/13 19:07:56  №1209385 344
Как? Да, я тупой, очень. Но хочется начать развиваться, а споткнулся о самую простую задачу
Ответы: >>1209395
Аноним 2018/06/13 19:11:29  №1209395 345
>>1209385

А какую часть задачи ты можешь сделать? Например, вывести

1x1 =
2x2 =
3x3 =
...

можешь?

Для этого просто надо сделать цикл от 1 до 9 и внутри цикла сделать вывод переменной.

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

Спрашивай, если что-то непонятно.
Ответы: >>1209652 >>1223115 >>1223120
Аноним 2018/06/13 19:28:21  №1209411 346
лол, какого это писать на мертвом языке?
Аноним 2018/06/13 21:44:29  №1209501 347
Почему scandir () помимо имен файлов возращает ., .. ? Для чего это было придумано?
Ответы: >>1209510 >>1209514 >>1209516
Аноним 2018/06/13 22:15:25  №1209510 348
>>1209501
Дебил не знает про указатели на текущую директорию и уровень выше, спешите видеть.
Ответы: >>1209677
Аноним 2018/06/13 22:34:05  №1209514 349
>>1209501

Кратко: чтобы перемещаться по файловой системе и чтобы cd .. работало без допиливания операционной системы или команды cd.

scandir() лишь возвращает то же, что возвращает низкоуровневая функция ОС для чтения каталога. В Линуксе каждая директория, даже пустая, содержит 2 записи, с именами . и .., ссылающихся на себя и родительскую директорию.

В этом легко убедиться, выполнив команду ls -la в пустой директории: она покажет эти 2 записи.

Почему так сделано, можно поискать в ответе тут: https://unix.stackexchange.com/a/153640

Создатели unix хотели иметь возможность как-то ссылаться на текущую или родительскую директорию (и писать пути вроде ../file.txt - файл, лежащий на 1 уровень выше текущей директории). Но при этом они не хотели делать специальные правила или синтаксис для этого. Вместо этого они просто решили при создании новой директории помещать в нее эти 2 записи. И точка или 2 точки не имели какого-то особого значения, это просто были имена ссылок.

И юникс тех времен интерпретировал ../file.txt как "найди каталог с именем .. в текущей директории, зайди в него и найди там файл file.txt".

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

Позже это было стандартизовано в стандарте POSIX (который описывает базовые вещи, общие для unix, linux итд): https://superuser.com/questions/804162/why-does-the-root-directory-have-a-reference-to-its-parent/805175#805175

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

Не знаю, как это работает под Windows, не исключаю, что там такого нет и PHP просто "подсовывает" эти 2 записи в список. Проверить можно в исходном коде PHP на гитхабе.

Интересно, что командами вроде rmdir (удаляет пустой каталог) эти записи удалить нельзя:

$ mkdir -p /tmp/1/2/
$ ls -la /tmp/1/2/
. xxxxxxxxxxxx
.. xxxxxxxxxxxx
$ rmdir /tmp/1/2/.
rmdir: failed to remove ‘/tmp/1/2/.’: Invalid argument
$ rmdir /tmp/1/2/..
rmdir: failed to remove ‘/tmp/1/2/..’: Directory not empty

rmdir использует системный вызов rmdir и в мануале по нему про точку написано отдельно:

http://man7.org/linux/man-pages/man2/rmdir.2.html
> EINVAL pathname has . as last component.

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

Кстати, у объекта-итератора файлов в каталоге есть опция для пропуска этих файлов: http://php.net/manual/en/class.filesystemiterator.php#filesystemiterator.constants

Ответы: >>1209677
Аноним 2018/06/13 22:46:37  №1209516 350
>>1209501

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

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

Чтобы у файлов были имена, на диске также имелись каталоги - как минимум 1 корневой каталог и при желании, дополнительные. Каталог был просто списком, который содержал имена и номера inode:

имя | inode
. | 100
.. | 14
file.txt | 123
file.jpg | 123
dir | 145

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

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

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

Википедия: https://en.wikipedia.org/wiki/Inode

Кроме "жестких" ссылок, в линукс есть "символические ссылки". Они работают по-другому и просто хранят путь к файлу, на который стоит ссылка.

В общем, советую почитать любой учебник по линуксу, там много интересного.
Ответы: >>1209677 >>1210171
Аноним 2018/06/14 09:17:25  №1209652 351
>>1209395
Было бы понятнее, если бы ты пикчу с решением прикрепил
Ответы: >>1210654
Аноним 2018/06/14 09:37:27  №1209669 352
WHY.png (6, 372x332)
332x372
Как можно вызывать метод push, я, вроде, понимаю - конечный элемент является массивом, возвращаемый "результат" функции обратится к ней(?) Но как можно обращаться к свойству length, которого еще нет?
Ответы: >>1209675
Аноним 2018/06/14 09:41:26  №1209671 353
arr.push(...).length
Ответы: >>1209715
Аноним 2018/06/14 09:44:49  №1209675 354
>>1209669
ну так перед использованием ты же создаешь массив

>var s = fibonacci_series(n-1)
начальный массив появится когда ты задашь первые два элемента без использования длины.

Ты что скопипастил код не понимая как он работает?
Ответы: >>1209715
Аноним 2018/06/14 09:46:57  №1209677 355
>>1209510
Я знал, что это указатели, мне просто интересно, зачем они там, даже на винде.
>>1209514
>>1209516
Спасибо за ответ!
Аноним 2018/06/14 10:32:29  №1209715 356
>>1209671
>>1209675
Да чёт ступил, "смотрю в книгу, вижу фигу". Надо пойти пробздеться, наверно.
Аноним 2018/06/14 10:56:57  №1209736 357
Здравствуйте. Как на php запустить shell-скрипт от рута и возможно ли это вообще сделать нормально? Варианты с гугла либо не помогают, либо делают систему абсолютно беззащитной. Кто-нибудь сталкивался с такой задачей?
Аноним 2018/06/14 10:57:31  №1209737 358
Здравствуйте. Как на php запустить shell-скрипт от рута и возможно ли это вообще сделать нормально? Варианты с гугла либо не помогают, либо делают систему абсолютно беззащитной. Кто-нибудь сталкивался с такой задачей?
Ответы: >>1209754 >>1210654
Аноним 2018/06/14 11:24:19  №1209754 359
>>1209737
Смотря что за задача. Если модифицировать системные файлы, то тут только «дыра». Если в какой-то определенной папке, то это и как бы «дыра», но в то же время и не совсем «дыра».
Ответы: >>1209764 >>1209804
Аноним 2018/06/14 11:34:39  №1209764 360
>>1209754
Главное, чтобы обычный юзер не мог ничего поломать. Вообще можно пользователю www-data в /etc/sudoers сделать nopasswd all? Хотя, у меня функция exec в таком случае все равно не работает.
Ответы: >>1210654
Аноним 2018/06/14 12:01:37  №1209804 361
>>1209754
Вот по этой инструкции:
>Открываем файл /etc/sudoers
>Добавляем строку: www-data ALL=NOPASSWD: /path/to/script
>Пробуем выполнить

В exec() работают простые команды типа sudo touch, sudo fdisk -l и т.д. Запись потока в файл через > , например, уже не отрабатывает. Какого, спрашивается, хрена?
Ответы: >>1209820 >>1210654
Аноним 2018/06/14 12:27:19  №1209820 362
>>1209804
Так ведь команды перенаправления потока типа >, < etc. это всё инструкции для bash. Ты пробовал выполнять гонять эти команды через bash -c 'твоя команда'?
Ответы: >>1209823 >>1210654
Аноним 2018/06/14 12:36:17  №1209823 363
>>1209820
Точно, спасибо. А shell-скрипты так можно запускать?
Аноним 2018/06/14 17:16:15  №1209950 364
Вообщем, я решил сделать еще раз студентов, но на этот раз в виде SPA. Как лучше - на чистом js, если это возможно, или на реакте? Я довольно смутно представляю, как SPA делаются.
Ответы: >>1209956
Аноним 2018/06/14 17:24:40  №1209956 365
>>1209950

Хорошо, но в чем ты видишь преимущество использования SPA для этой задачи? У меня ощущение, что это только усложнит жизнь, так как надо будет писать 2 приложения (клиентское + серверное API + очень желательно документацию по API).
Ответы: >>1210033
Аноним 2018/06/14 18:28:38  №1209992 366
С каждым днем возникает всё больше архитектурных вопросов.

Допустим у меня есть модель с конфигом, сейчас у меня я так понимаю далеко не лучшим образом работает - ей инжектится модель конфигурации и внутри из неё берутся значения, а наверное лучше все конфигурируемые переменные вынести в поля и конструктор и устанавливать в контейнере при инстанциировании, уже там вытаскивая значения из конфигурации?
Еще не понимаю как лучше делать модели для сущностей занимающих более одной таблицы или имеющих сложные отношения.
Сейчас у меня для минорных сущностей все действия содержатся в модели основной сущности, а перекрестные действия - в той модели к которой они семантически больше подходят (всякие работы с many2many и проч.), выглядит неоптимально.
Еще интересный вопрос который не дает мне наконец то абстрагировать сущности в объекты (по итогу в коде работаю с ассоциативными массивами да) - как поступать когда мне нужна лишь часть данных о сущностях и как правильно организовывать догрузку нужных данных (или догрузка вообще неправильный подход и для всех случаев нужно иметь свой отдельный метод выборки).
Вот думаю почитать как там в доктрине все делается но боюсь не найти нужных ответов, особенно в плане частичной загрузки и еще пары вещей.

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

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

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

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

Но, например, в бутстраппере стоит путь к файлу конфига и от этого уже никак не избавиться, получается тут константу можно не трогать.
Аноним 2018/06/14 18:35:23  №1209996 367
>>1209992
И если на всё перечисленное я еще как-то представляю как можно поступить, то как делать работу моделей с мультиязычными данными, когда бывает нужда работать сразу с несколькими языками (в админке например) - уже теряюсь окончательно. Для юзера всё оч легко, т.к. юзаются ассоц. массивы просто беру данные с аффиксом локали и всё, а когда нужно селектить релевантные локали вещи - выборку из базы тоже делаю с афиксом.
Но в итоге в адмике эти методы уже не работают, получается для неё нужно в эти же методы добавлять ручной выбор локали и вызывать дважды, либо делать отдельные методы которые не будут её учитывать - в любом случае выглядит как излишнее жирение.
Ответы: >>1210057 >>1210651
Аноним 2018/06/14 19:20:07  №1210033 368
>>1209956
>Хорошо, но в чем ты видишь преимущество использования SPA для этой задачи?
Я просто хотел себе задачу с js-ом и сложным фронтендом, чтобы его изучить лучше. Наверное преимуществ у SPA здесь нет, но это же учебная задача.
Ответы: >>1210653
Аноним 2018/06/14 19:25:14  №1210037 369
>>1209992
>Модель с двумя и более таблицами

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

Ответы: >>1210106
Аноним 2018/06/14 19:27:19  №1210039 370
>>1209992
>Процедуры

Я так понимаю здесь идет речь о каких то общих действиях которые не особо относятся к конкретным объектам. В фреймах для этого делают статические классы (в yii2 это хелперы, в laravel это фасады)
Ответы: >>1210653
Аноним 2018/06/14 19:50:47  №1210057 371
>>1209996
>то как делать работу моделей с мультиязычными данными, когда бывает нужда работать сразу с несколькими языками (в админке например)

Я делаю базовые абстрактные модели, потом от них модели фронтенда и модели админки, так как поведелние и функционал могут отличаться.
Ответы: >>1210651
Аноним 2018/06/14 19:59:44  №1210061 372
Мне сегодня приснилось, что я делал список студентов, потом выложил его в тред и какой-то анон мне написал что-то вроде: Верстка дивами сажа скрыл. Пиздец, додвачевался блядь.
Ответы: >>1210065
Аноним 2018/06/14 20:01:49  №1210065 373
>>1210061
а чем блять верстать? таблицами?
Ответы: >>1210074
Аноним 2018/06/14 20:16:15  №1210074 374
>>1210065
А хуй знает, во сне же было.
Ответы: >>1210087
Аноним 2018/06/14 20:24:54  №1210087 375
>>1210074
Может ты там вообще всё дивами сверстал.
Аноним 2018/06/14 20:39:27  №1210106 376
>>1210037
> инкапсулирует все остальные
Но тогда получится же просто свалка из функций многие из которых между собой не связаны?

> В фреймах для этого делают статические классы
Т.е. по сути ничего плохого в этом нет

> Я делаю базовые абстрактные модели, потом от них модели фронтенда и модели админки
Надо подумать о таком варианте, спасибо.
Ответы: >>1210145 >>1210146
Аноним 2018/06/14 21:51:41  №1210145 377
>>1210106
но фреймверки обычно имеют механизмы свойств, например в yii2 методы getMyProperty setMyProperty работают как свойство myProperty, уверен в ларавеле тоже есть чтото подобное
Ответы: >>1210146
Аноним 2018/06/14 21:52:01  №1210146 378
>>1210106
>Но тогда получится же просто свалка из функций
>>1210145
Аноним 2018/06/14 23:42:04  №1210170 379
Двощ, есть две таблицы - subscribers и tariffs. У каждого subscriber есть выбранный tariff_id. Надо вывести, сколько подписчиков на каждом тарифе.
Написал такое:

[code]
SELECT t.name,
COUNT(s.id) AS subscribers_qty
FROM tariffs AS t,
subscribers AS s
WHERE t.id = s.tariff_id
GROUP BY t.name
ORDER BY t.price;
[/code]

Проблема в том, что этот запрос не показывает тарифы с нулем подписчиков, а надо. Я понимаю, что если никто не выбрал такой тариф, то и join c такими строками не происходит. А как по-другому тогда?
Ответы: >>1210172 >>1210239 >>1210650
Аноним 2018/06/14 23:47:32  №1210171 380
>>1209516
В старых?
У меня так на VPS с фряхой 11 иноды кончились, когда я нагенерировал малюсеньких превьюшек целую гору.
Аноним 2018/06/14 23:49:24  №1210172 381
>>1210170
Тебе нужно написать явно LEFT JOIN
тогда получишь все тарифы даже те у которых нет подписчиков.

Могу быть не прав но твой запрос неявно использует INNER JOIN где все наоборот.
Ответы: >>1210225
Аноним 2018/06/14 23:56:29  №1210173 382
>>1208951
На каком этапе изучения начал искать работу?
Аноним 2018/06/15 02:25:10  №1210176 383
>>1208161
Выполни этот код:

$x = 'Alice';

true || $x = 'Bob';
echo 'Hello, ' . $x . '<br>';

true && $x = 'Bob';
echo 'Hello, ' . $x . '<br>';

Затем почитай мануалы, чтобы понять почему код ведет себя по разному и больше не позорься.
Ответы: >>1210177 >>1210648
Аноним 2018/06/15 02:36:45  №1210177 384
>>1210176
Ять! Не тот пример придумал.

Вот смотри на такой код:
$x = 'Alice' && false;
echo 'Hello by _&&_ ' . $x . '<br>';

$x = 'Alice' and false;
echo 'Hello by _and_ ' . $x . '<br>';

Он, конечно, выглядит экзотично, но при формировании сложных условий в ифах, не зная этой механики, можешь упереться в код, который не работает по непонятным тебе причинам. Хотя в некоторых коллективах за присвоение внутри условия могут оторвать руки.
Ответы: >>1210381
Аноним 2018/06/15 04:44:48  №1210186 385
Офицальный sql-тред с концами пропали?
Ладно, не важно. Спрошу тут.
Собираюсь вкатиться в sql по книге SQL за 10 минут. Какие подводные?
Ответы: >>1210187
Аноним 2018/06/15 04:45:25  №1210187 386
>>1210186
Тебе что, жалко 10 минут потратить и узнать?
Ответы: >>1210189
Аноним 2018/06/15 04:50:20  №1210189 387
>>1210187
На самом деле эту книгу не прочитать за 10 минут
Ответы: >>1210349
Аноним 2018/06/15 05:24:49  №1210193 388
15268838768720.jpg (18, 604x438)
438x604
Хочу пересесть с Битрикса(5 лет опыта в офисе/веб-студиях и удалёнка + фриланс) на Laravel и делать на нём мелкие сайты клиентов. Дальше планирую отказаться от местных клиентов и вкатиться на Upwork.
Сейчас беру по 1000/час и это по сути потолок для моего уровня и уровня моих клиентов, дальше только галерный(не свободный) вид работы - без продления дедлайнов, без ошибок и т.д.. Хочется большей з/п при таком же уровне свобод.

Какие подводные камни?
Ответы: >>1210204 >>1210255
Аноним 2018/06/15 05:49:31  №1210204 389
>>1210193
вроде взрослый дядя, а с такими вопросами приходишь
Ответы: >>1210207
Аноним 2018/06/15 06:02:58  №1210207 390
>>1210204
Треда про UpWork давно не нахожу, интересно мнение тех, кто там работает именно по Laravel, т.к. везде были восторженные отзывы всяких Нодо/Реакто-пидоров.
Аноним 2018/06/15 06:54:52  №1210225 391
rcMERwGo3UI.jpg (131, 960x960)
960x960
>>1210172
Ух ты, работает, спасибо!
Ответы: >>1211093
Аноним 2018/06/15 07:19:17  №1210239 392
>>1210170
У меня еще вопрос про нормализацию.
Подписчик может быть физлицо или юрлицо. Тарифы тоже для физлиц и юрлиц.
Избыточно ли иметь ENUM колонку subscriber_type и в таблице subscribers, и в tariffs? Чисто теоретически сейчас тип клиента можно узнать по выбранному тарифу, но мало ли что, вдруг в будущем можно будет не выбирать тариф, например.
Ответы: >>1210340 >>1210648
Аноним 2018/06/15 07:48:20  №1210255 393
>>1210193
>на Laravel и делать на нём мелкие сайты
Мелкие сайты лучше и проще делать на микрофреймворках - меньше зависимостей, больше свободы.
Ответы: >>1210397 >>1210648
Аноним 2018/06/15 07:53:35  №1210256 394
подскажите нубу, если в базе хранятся цифровые значения, но из значения на страницу нужно выводить только кол-во миллионов и через запятую кол-во десятков тысяч, отбрасывая "хвост" которые менее 10 тысяч ( т.е цифра из базы 9 678 300 , должна выводится на страницу как 9,67 ) - как это сделать?
Ответы: >>1210262 >>1210648
Аноним 2018/06/15 08:07:12  №1210262 395
>>1210256
три секунды в гугле
https:// www.w3schools.com/sql/func_mysql_round.asp
Аноним 2018/06/15 10:42:40  №1210340 396
>>1210239
В этой ситуации делаешь ENUM колонку. В дальнейшем когда у разных типов будут появляться рахные поля и связи просто сделаешь еще отдельные таблицвы, одну с доп инфой для физлиц другую для юрлиц.

Ответы: >>1210454
Аноним 2018/06/15 11:06:12  №1210349 397
>>1210189
Наверное, не очень хорошая книга, если врет уже с обложки.
Аноним 2018/06/15 11:44:05  №1210381 398
>>1210177
Ну во первых, то что ты нарисовал, в реальной жизни бывает? Во вторых, в оф. документации написано, что эти операторы различаются приоритетом, но примера различий не приведено. В третьих, тебя лично никто не спрашивал, не думаю, что ответы в таком тоне кому - то помогут
Аноним 2018/06/15 12:02:38  №1210397 399
>>1210255
Да мне бы руку набить, посмотреть что можно и нельзя.
А Ларавель разве такой большой?
Ответы: >>1210399 >>1210410
Аноним 2018/06/15 12:05:33  №1210399 400
>>1210397
>мне бы ебало набить
Поправил.
мимо преподаватель
Ответы: >>1210456
Аноним 2018/06/15 12:18:40  №1210410 401
>>1210397
Начинать лучше с yii2
Ответы: >>1210456
Аноним 2018/06/15 13:14:29  №1210454 402
>>1210340
Не, я имел в виду не грешно ли такое дублирование, когда и в таблице subscribers написано, что у нас subscriber_type юрлицо, и в таблице tariffs тоже. Сейчас это точно излишество, но в будущем может пригодиться.
Ответы: >>1210471
Аноним 2018/06/15 13:19:05  №1210456 403
>>1210410
А зачем мне yii2, если я не хочу учить очередной проходняк, а потом переучиваться на Laravel?
>>1210399
Сам учитель кстати по информатике, иди нахуй.
Ответы: >>1210475
Аноним 2018/06/15 13:36:49  №1210471 404
>>1210454
типо тариф только для юрлиц?

тогда это нормально, одно поле говорит что за подписчик, другое что за тариф. У них может отличаться набор значений, например тариф может быть для всех.
Ответы: >>1210690
Аноним 2018/06/15 13:43:09  №1210475 405
Аноним 2018/06/15 19:43:45  №1210648 406
Давайте не устраивать тут чат и обсуждать на полтреда, какой фреймворк лучше. Написали пару сообщений и хватит.

>>1210239

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

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

Все-таки тип клиента - это свойство клиента и должно быть указано в его таблице.

>>1210256

Погугли функции PHP round() и number_format().

>>1210255

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

>>1208161

Используй, если тебе удобнее. Но помни, что у них другие приоритеты ( мануал http://php.net/manual/ru/language.operators.logical.php ) и может понадобиться ставить скобки.

>>1210176

Не надо так писать, "не позорься". Ничего позорного, чтобы задать вопрос, нету.

Писать такой код точно не стоит из-за его непонятности: true || $x = 'Bob';

> $x = 'Alice' and false;

Это конечно уже косяк в проектировании PHP, что такой код воспринимается как ($x = 'Alice') and false. Ужасный стиль написания, не стоит так писать.
Ответы: >>1210690
Аноним 2018/06/15 19:44:11  №1210650 407
>>1210170

SELECT FROM tariff LEFT JOIN subsc ON ... GROUP BY t

Надо использовать LEFT JOIN вместо INNER JOIN, как у тебя.

>>1209992

На всякий случай напишу, что у меня есть урок про паттерны работы с БД: https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md

> Допустим у меня есть модель с конфигом, сейчас у меня я так понимаю далеко не лучшим образом работает - ей инжектится модель конфигурации и внутри из неё берутся значения, а наверное лучше все конфигурируемые переменные вынести в поля и конструктор и устанавливать в контейнере при инстанциировании, уже там вытаскивая значения из конфигурации?

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

> Еще не понимаю как лучше делать модели для сущностей занимающих более одной таблицы или имеющих сложные отношения.

Тут есть варианты. Допустим, у нас есть Пост, с Автором и Комментариями. Вот что можно сделать:

- сделать у Поста свойства Автор и Комментарии, и при загрузке из БД Постов подгружать в них Авторов и все Комментарии. Это будет затратно по ресурсам, так как у Комментариев могут быть например Автор, Лайки, у Автора тоже какие-то связи итд.
- сделать то же самое, но при загрузке Постов не подгружать в них связанные сущности, а вставлять вместо них прокси-объекты, которые не содержат данных, а подгружают их при первом обращении к объекту. Ну то есть они работают так:

$user = $db->loadUser($userId);
$userProxy = new UserProxy($userId, $db);
echo $user->getId(); // 1234
echo $userProxy->getId(); // 1234
echo $user->getName(); // Иван
echo $userProxy->getName(); // в этом месте прокси подгружает объект User из БД и передает вызов ему, возвращая "Иван"

Чтобы прокси можно было использовать вместо реальных объектов и они проходили тайп-хинты, они должны наследоваться от них.

Это стоит делать только из желания разобраться, если такого желания нет, то проще взять доктрину

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

Что точно не стоит делать - это делать так, что в Посте может быть объект Автор, а может не быть. Это будет создавать ужасную путаницу и будет постоянным источником ошибок.

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

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

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

Есть такие варианты:

- сделать поля специальными объектами, которые загружают данные только при обращении к ним:

$post->body = new LazyText($postId, 'body', $db);
echo $post->body->getValue();

- сделать этот функционал на уровне класса модели:

public function getName()
{
// обычное поле
return $this->name;
}

public function getText()
{
// ленивое
return $this->lazyLoad('text');
}

- разбить сущность на несколько объектов в сочетании с ленивой загрузкой:

public function getName()
{
// обычное поле
return $this->name;
}

public function getText()
{
// ленивое
return $this->postDetails->getText();
}

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

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

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

Трудно понять этот вопрос без примера кода.

> Еще байда с контроллерами, сейчас у меня все контроллеры - маленькие функции вызывающиеся по роутам, но в фреймворках я видел что их выносят в классы

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

> Подход с функциями у меня отлично работал до тех пор пока не нужно было начать выводить правильные хттп коды и заголовки для разных роутов

Вообще, это не проблема при использовании объекта Response:

$response->setCode(204);
$response->headers->add('x-header', '12345');
return $response;

Или проблема в чем-то другом?

> Опять же выделив их в классы можно будет тогда их автоматически тестировать.

По идее тестировать можно и коллбеки в фреймворке, если они возвращают объект Response.

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

Стоит сделать сервисы.

> Еще постоянный вопрос стоит на какой стадии можно использовать константы,

Чаще всего они используются для обозначения вариантов выбора:

class Order
{
// типы доставки
const DELIVERY_POST = 'post';
const DELIVERY_PICKUP = 'pickup';
const DELIVERY_COURIER = 'courier';
}

Иногда еще для кодов ошибок: ERROR_ORDER_NOT_FOUND. Иногда для каких-то реальных констант: GRAVITY_EARTH = 9.81

> допустим сейчас у меня есть вот такие две под-процедуры - послать письмо о регистрации и послать письмо с восстановлением пароля. В них внутри из конфига берутся адрес отправки и некоторые другие вещи согласно локали пользователя

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

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

> Нужно либо делать модель для работы с шаблонами

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

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

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

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

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

> Но, например, в бутстраппере стоит путь к файлу конфига и от этого уже никак не избавиться, получается тут константу можно не трогать.

Тут не нужна константа. Просто прописать имя файла и все.
Ответы: >>1210739
Аноним 2018/06/15 19:44:33  №1210651 408
>>1209996

Либо делается по несколько копий каждого поля (titleRu, titleEn, titleJa), либо делается отдельная таблица с локализованными данными вида:

ид поста | язык | название | текст

1 | ru | Привет мир | ...
1 | ja | こんいちは 世界 | ...

Выбор при этом можно сделать за счет методов, в первом варианте:

public function getPostTitle($lang)
{
if ($lang == 'ru') {
return $this->titleRu;
} elseif ($lang == 'ja') {
return $this->titleJa;
} else {
throw ...;
}
}

Во втором варианте:

public function getPostTitle()
{
// язык в localizedData выбирается в момент загрузки сущности
return $this->localizedData->getTitle();
}

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

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

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

>>1210057

ты по моему тоже делаешь ошибку, когда называешь "моделью" объект, который не представляет (не является моделью) какую-то одну сущность.
Аноним 2018/06/15 19:44:57  №1210653 409
>>1210039

Статические классы бывают разные. Если простым методам не нужен this - это Utility Class ( https://en.wikipedia.org/wiki/Helper_class )

Некоторым они не нравятся:

- http://www.ralin.net/blog/oop-anti-patterns-utility-or-helper-classes.html
- https://www.yegor256.com/2014/05/05/oop-alternative-to-utility-classes.html

То, что в Ларавеле - это просто копия идеи с Ruby on Rails, где полфреймворка сделано на статических методах. Не очень хорошо, у меня описано почему: https://github.com/codedokode/pasta/blob/master/arch/di.md .

>>1210033

Хорошо, тогда попробуй сделать. Тебе надо сделать клиентское приложение с использованием одной их технологий:

- React (+ опционально Redux)
- Vue
- Angular (это фреймворк, а не библиотека для view)
- Knockout

Ты можешь почитать общий обзор вариантов реализации MVC на клиенте тут: https://github.com/codedokode/pasta/blob/master/js/minesweeper-mvc.md

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

Также, тебе надо будет спроектирвоать серверное API (я советую описать его с помощью файла YAML в формате Swagger 2.0/OpenAPI 3.0. Swagger позволяет генерировать такую документацию с возможностью отправки запросов прямо из нее: http://petstore.swagger.io/ . А также там есть такой удобный редактор для просмотра результата сразу: https://editor.swagger.io/ )

Вот первый найденный в Гугле русскоязычный пример сделанной на Swagger документации: https://www.1gb.ru/api-doc/

Вот пример подробного описания API, не на Swagger, просто для сравнения: https://tech.yandex.ru/disk/api/concepts/about-docpage/

После проектирования API его надо реализовать, например, на микрофреймворке вроде Slim.

Вообще, задача про студентов слишком простая для SPA. Я бы советовал взять что-нибудь посложнее, или TestHub (сложное редактирование тестов - самое то для SPA) или адскую задачу на SPA из оп-поста или придумать какую-то свою идею. У тебя есть идея какого-то приложения, которое хотелось бы сделать? Управление чем-нибудь, редактирование чего-нибудь, планирование или организация чего-нибудь. Ну или можешь сделать клон твиттера или инстаграма, например. Или защищенный мессенджер. У нас тут есть someApprentice, который его неспешно пилит.
Ответы: >>1211592
Аноним 2018/06/15 19:45:34  №1210654 410
>>1209737

Прописываешь путь к скрипту в /etc/sudoers. Почитай мануал по нему. Ну например, если ты хочешь разрешить пользователям перезапускать нгинкс, то делаешь скрипт /usr/local/bin/restart-nginx и прописыаешь разрешение на его запуск от sudo.

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

>>1209764

Тогда www-data сможет запускать что угодно от рута. Надо вписать конкретные команды. Почитай мануал по sudoers.

>>1209804

Впиши перенаправление в скрипт и дай права на запуск скрипта.

>>1209820

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

>>1209652

Мы не даем решения, но отвечаем на вопросы, если что-то непонятно.

Ответы: >>1210662
Аноним 2018/06/15 19:48:12  №1210659 411

>>1208119

Тут есть разны варианты. Например: не указывать число страниц, а дать только ссылки первая/предыдущая/следующая/последняя. Или использовать фичи MySQL вроде SQL_COUNT_ROWS.

Также, можно допилить код, чтобы выполнение 2 запросов не вызывало проблем. Заодно при подсчете можно убрать часть джойнов, сортировок и тд.
Аноним 2018/06/15 19:51:32  №1210662 412
>>1210654
Странный ты человек, отвечаешь на уже отвеченные вопросы, наверное чтобы простыни выглядели больше а ты умнее.
Аноним 2018/06/15 20:27:04  №1210679 413
Опчик! Помоги! Есть ли возможность ебашить условную функцию проверки по времени. Типа если сейчас меньше 5 вечера, то возвращает 1, если больше, то возвращает 0? Вне зависимости от даты, то есть в любой день.
Ответы: >>1216151
Аноним 2018/06/15 20:47:28  №1210690 414
15261580096422.jpg (508, 2448x3264)
3264x2448
>>1210471
>>1210648
Спасибо!

Я воткнулся в новую проблему.
К таблице subscribers у меня еще есть таблицы subscriber_phones и subscriber_links. В них хранятся контактные телефоны и ссылки на социальные сети.
В запросе я все это LEFT JOIN, и при трех телефонах и трех ссылках, я получаю 9 записей одного подписчика, в каждой разное сочетание телефона и ссылки. Я понимаю, что mysql не может вернуть мне вложенные таблицы.
Что делать? Мудрить обработку одинаковых записей? Не выеживаться и просто посылать отдельные запросы в БД?
Использую PDO. На выходе хочу получить массив параметров подписчика и вложенные массивы с телефонами и ссылками.
Ответы: >>1210694 >>1216151
Аноним 2018/06/15 21:01:19  №1210694 415
>>1210690
получаешь subscribers, собираешь их id, получаешь разом все телефоны и потом все ссылки WHERE subscriber_id IN (....)
Ответы: >>1210695
Аноним 2018/06/15 21:03:59  №1210695 416
>>1210694
А как потом это обработать?
Пройтись по телефонам и ссылкам foreach и положить их в subscribers?
Ответы: >>1210696
Аноним 2018/06/15 21:05:13  №1210696 417
>>1210695
>положить их в subscribers
Внутрь массива нужного подписчика, я хотел сказать.
Ответы: >>1210712
Аноним 2018/06/15 21:34:41  №1210712 418
>>1210696
ага, в любом случае нужно пройтись по массивам после получения данных. В первом случае у тебя много лишних повторяющихся значений во втором больше запросов.
Ответы: >>1210752
Аноним 2018/06/15 22:56:23  №1210739 419
>>1210650
Да небольшая путаница понятий вышла, судя по всему то что я называл моделями вернее называть сервисами. Именно моделей у меня по итогу вообще до сих пор нет (!).
Под константами имелись ввиду не `const` а, ну, кароче захардкоденые значения. Почему-то кажется в корне неверным внутри сервисов хардкодить пути к каким-то файлам и тому подобное.

Про догрузку полей я имею ввиду сущности которые именно сами размазаны по разным таблицам (может, все 1:1 поля лучше слить в одну? `денормализовать` типа). Суть в том что там довольно много может получаться данных и я так думал что правильнее за раз брать только те что нужны в конкретном случае.

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

Т.е. как второй вариант который ты описал (ну только без собственно моделей).

Я думал уже делать объект для ответа. Проблема контроллеров как функций вместо объектов, ну вобщем не проблема даже наверное. Надо еще подумать чтобы сформулировать.

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

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

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

Спасибо за ответ!
Ответы: >>1210741 >>1216151
Аноним 2018/06/15 23:01:42  №1210741 420
>>1210739
Даже не сервисами, а гейтами (ну сервисы там тоже есть)
Аноним 2018/06/15 23:26:45  №1210752 421
Аноним 2018/06/16 11:47:21  №1210956 422
Снимок.PNG (76, 1892x235)
235x1892
Ответы: >>1210971
Аноним 2018/06/16 12:08:25  №1210971 423
Ответы: >>1211018
Аноним 2018/06/16 13:02:53  №1211018 424
>>1210971
Так это ты сейчас повелся на жир, дурочок.
Аноним 2018/06/16 14:03:52  №1211093 425
Ответы: >>1211341
Аноним 2018/06/16 19:01:49  №1211341 426
>>1211093
Это просто ракурс такой.

Аноним 2018/06/16 21:28:07  №1211450 427
Кто-нибудь работал с google sheets api?
Нужна помощь в том, что бы писать инфу в разные листы.

Пока научился писать в 1 лист. Но например мне надо писать в разные листы. Где это выставлять? И как проверить есть ли условынй "Лист1" или "Лист2" в нашем документе, перед тем как пытаться в него писать.
Аноним 2018/06/16 23:06:51  №1211524 428
>>1199390 (OP)
Почему в учебники для решения задачи "Сумма прописью" вы не рекомендуете использовать функцию strlen? Она считает вполне правильно и это удобно, зачем мне писать свой велосипед?

"Некоторые делают ошибку, пытаясь работать с числами строковыми функциями вроде mb_substr() или mb_strlen(). Это неправильно."

Заранее спасибо!
Ответы: >>1211530
Аноним 2018/06/16 23:18:10  №1211530 429
>>1211524

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

echo 123456789012345 . "\n"; // 1.2345678901234E+14

Если ты от такого числа попробуешь взять первые 3 символа, то получишь 1.2, а не 123.

Безопаснее работать с числами математическими методами.

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

echo (12.000000009 % 10) . "\n" ; // 2

А если использовать строковые методы, то последняя цифра будет 9.
Ответы: >>1211535
Аноним 2018/06/16 23:34:00  №1211535 430
>>1211530
Понятно, пасиба!

Еще вопрос. Можно ли для подчета количества чисел использовать подобную конструкцию?

$count = preg_match_all('/\\d/', $number);
Ответы: >>1211538
Аноним 2018/06/17 00:18:53  №1211538 431
>>1211535

Конечно, нет, по тем же причинам. Если число целое, то проще всего посчитать количество цифр с помощью десятичного логарифма.

Логарифм - это операция, обратная возведению в степень. Например, 10 в 3 степени = 10 x 10 x 10 = 1000. А логарифм(x) позволяет узнать, в какую степень надо возвести 10, чтобы получить x. Потому log10(1000) = 3.

Вот еще пара примеров:

log10(999) = 2.99956549
log10(1001) = 3.00043408

log10(99) = 1.9956351
log10(100) = 2
log10(101) = 2.00432137

В общем, поломай голову, как это использовать. Логарифм можно вычислить, если вбить выражение вроде log10(100) в Гугл.

Ответы: >>1211539
Аноним 2018/06/17 00:30:05  №1211539 432
>>1211538
Спасибо, постараюсь решить.
Аноним 2018/06/17 08:31:19  №1211592 433
>>1210653
>Вообще, задача про студентов слишком простая для SPA. Я бы советовал взять что-нибудь посложнее, или TestHub (сложное редактирование тестов - самое то для SPA) или адскую задачу на SPA из оп-поста или придумать какую-то свою идею. У тебя есть идея какого-то приложения, которое хотелось бы сделать?
Идей много, но я плохо js знаю, поэтому думаю мне spa студентов на данный момент хватит. СДобра за ответ!
Аноним 2018/06/17 11:54:26  №1211728 434
Утро неслышно ступает по коду,
И за компом
Безмятежная спишь ты
PHP улыбаясь в рассветном блаженстве
Самая лучшая в мире программа
ПУСТЬ ТЕБЕ ПРИСНИТСЯ
ЭЛЕМЕНТ В МАССИВЕ
В ЦИКЛЕ ИЛИ В ФАЙЛЕ
ЛАСКОВЫЙ ОБЪЕКТ
ИЛИ В ПЕРВОМ СКРИПТЕ
ЭХО У ЗАПРОСА
Только, чтобы вместе,
Был у нас с деплой
Аноним 2018/06/17 13:11:52  №1211781 435
Capture.JPG (20, 588x418)
418x588
Опушек, возникла острая необходимость использования WebSQL. Что ты можешь рассказать про нее в 2к18? Не нашел пока никакой вразумительной инфы, где-то даже писали, что поддержка закрылась за ненадобностью, но я вижу ее в инструментах разработчика значит не мертво. Или?
Ответы: >>1216150
Аноним 2018/06/17 14:23:36  №1211831 436
Спецназовцы, у меня возникла проблема, я должен отправить запрос в базу данных, но искомый элемент должен быть в кавычках, в любых, как сформировать правильный запрос в таблицу? или просто добавить кавычки в переменную? И то и другое я не умею, подскажите!
Запрос у меня такой:'SELECT COUNT (*) FROM students WHERE email = :email
естественно делаю через холдеры и не могу понять как мне экранировать эти долбанные ковычки, помогите знатоки
Ответы: >>1211846 >>1211894 >>1216150
Аноним 2018/06/17 14:39:56  №1211846 437
Аноним 2018/06/17 14:56:18  №1211866 438
Поясните за видимость файлов лежащих в корне? Например если я сложу рядом с index.php условный db_config.php, то могут ли его как-то скачать, прочитать, заинклудить в конце концов? Лучше в папочку на уровень ниже хотя бы складывать?
Ответы: >>1211892 >>1212085
Аноним 2018/06/17 15:33:53  №1211892 439
>>1211866
не могут, если ты не сделаешь ничего в эхе
если никакие переменные извне не будут использоваться.
безопаснее например кинуть в соседнюю папку с /www
и обращаться к файлу через ./db_config.php сидя в публичной папке
Ответы: >>1211923
Аноним 2018/06/17 15:37:18  №1211894 440
>>1211831
строку запроса в пхп всегда обрамляй двойными кавычки, названия таблиц и полей обрамляй косыми кавычками, одинарные кавычки строк в запросе не вызывают проблем, так как запрос берется в двойные.

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

Ю':email'
Ответы: >>1211957
Аноним 2018/06/17 15:58:04  №1211922 441
>>1199390 (OP)

>Что почитать
> ...
>- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл

А оно в 2018 ещё актуально?
Ответы: >>1211924
Аноним 2018/06/17 16:01:37  №1211923 442
>>1211892
Там на сервере кажется все папки публичные, так что успокоило.

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

Думаю уже как-нибудь в строку захардкодить прямо в пхп, и эту строку дергать, только вот пока не могу разобраться с форматом. Наверное стоит обычный массив создать и потом конвертнуть его в json?
Ответы: >>1212085
Аноним 2018/06/17 16:02:26  №1211924 443
>>1211922
Неактуально. Лучше Котерова рнр7. В книге куча классных вещей рассмотренно.
Аноним 2018/06/17 16:42:19  №1211957 444
Ответы: >>1211970 >>1216150
Аноним 2018/06/17 17:00:23  №1211970 445
>>1211957

>https://github.com/Lolodin/htdocs/blob/ilii4/Model/User.php
$result->fetchColumn(); // вот тута мы извлекли единственную строку (если такой емаил нашёлся) и сразу её потеряли
if ($result->fetchColumn()) // вот тута мы пытаемся извлечь следующую строку (которой нет, ибо емейлы у нас уникалные) — и благополучно получаем ответ false
return true;
else
return false;

Ну и аккуратнее было бы сделать так:
return (bool) $result->rowCount();
Ответы: >>1211977
Аноним 2018/06/17 17:11:52  №1211977 446
>>1211970
Благодарю, светоч разума
Аноним 2018/06/17 20:26:31  №1212085 447
>>1211923
>>1211866

Надо выносить все лишнее за корень сервера, как описано тут: https://github.com/codedokode/pasta/blob/master/student-list.md#Выносим-код-за-корень-сервера

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

Ответы: >>1212185
Проблема с регистрацией Аноним 2018/06/17 21:26:07  №1212132 448
image.png (543, 1440x860)
860x1440
Делал регистрацию первый раз по видеоуроку,но вылазят ошибки как на пикче,в инете не нашел инфы почему так,прошу помочь
ссылка на код https://pastebin.com/raw/BJEtSsVb
Ответы: >>1212144 >>1212146 >>1216150
Аноним 2018/06/17 21:39:25  №1212144 449
>>1212132
Оно тебе прямым текстом говорит. Нужен объект mysqli, а не ресурс. Ты используешь mysql_connect который возвращает ресурс, а потом пихаешь этот ресурс в функцию имя которой я отказываюсь произносить. Тебе бы например:
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
А еще лучше использовать PDO. А еще лучше не учится по устаревшим на 10+ лет урокам. Если прямо хочется по видео то ищи видео от profit. Лучше на русском я не видел.
Аноним 2018/06/17 21:45:56  №1212146 450
>>1212132
Ты уже спрашивал неделю назад.
Аноним 2018/06/18 00:11:46  №1212168 451
Bump
Аноним 2018/06/18 00:12:34  №1212169 452
Bump
Аноним 2018/06/18 00:14:06  №1212170 453
Bump
Аноним 2018/06/18 03:49:56  №1212185 454
>>1212085
>https://github.com/codedokode/pasta/blob/master/student-list.md#Выносим-код-за-корень-сервера
Так а что делать если там есть типа public_html - в которой тупо лежит вся цмс со всеми внутренними папками. Этот самый public_html на популярных хостингах и есть та самая публичная папка как я понимаю? При том что слкладывать надо на 1 уровне с ней и всё будет нормально работать изнутри, но недоступно из вне?
Ответы: >>1212240
Аноним 2018/06/18 07:47:37  №1212240 455
>>1212185

Кто тебе на хостинге запрещает класть файлы за пределы public_html? Я не помню хостинга, где это было бы нельзя, а на некоторых можно выбрать даже название публичной папки.

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

Я когда-то, когда делал сайты на CMS, поступал так: CMS клалась на отдельный домен, полностью закрытый HTTP-авторизацией (без пароля на него не зайти), а на основном домене был итнтерфейс на PHP, который просто брал данные из БД и отображал. Соответственно о безопасности CMS можно было не беспокоиться, но при этом мы имели возможность экономить на написании админки.
Ответы: >>1212594
Аноним 2018/06/18 09:24:21  №1212297 456
В первом уроке с гитхаб есть пример Произвольные URL в самом низу. И я уже не знаю куда себя деть. Почему оно работает как надо при вводе path вида /hello или /latest-news через встроенный в пхп сервер, но если запустить через apache то начинает вот это Error 404. А если через apache напрямую обратиться к news.php то скрипт срабатывает и он говорит мне что я дебил. Проверял одновременно с апачем на одном порту и встроенном на другом, на одной одной и той же папке с файлами.
Ответы: >>1216149
Аноним 2018/06/18 10:03:49  №1212328 457
Че как идет вкатывание, анончики? Я месяц позанимался этой хуйней и чет меня заебало. Сначала было интересно, когда учебник ОПа проходил, но на студентах обосрался, ибо вообще не знал как делать. Потом пошел посмотрел какой-то видеокурс на английском и щас ваще не хочется этим заниматься.
Ответы: >>1212357
Аноним 2018/06/18 10:30:27  №1212357 458
>>1212328
Прохожу на хекслете.
Скоро уже месяц.
Зависимость есть.
Аноним 2018/06/18 10:47:41  №1212371 459
Screenshot8.png (16, 315x827)
827x315
Анончики, знающие ларавель, или просто шарящие в фреймворках, подскажите, будьте добры, как быть. Ситуация такая:
Готовится довольно крупный проект в плане количества кода, наша контора купила готовую платформу на ларавель, которая покрывает процентов 60 нужного нам функционала, остальное нужно переделывать/делать. В самой платформе часть функционала вынесена в плагины.
Ознакомившись с кодом выяснил, что код платформы вынесен отдельно.
Сам я с ларавель не работал, только yii2, поэтому мне не помешал бы совет как правильно организовать работу, как с архитектурной точки зрения правильно работать с уже имеющимся кодом и как добавлять новый.
Ещё нужно добавить, что на саму платформу часто выходят обновления и не хотелось бы что-то менять в коде платформы, дабы избежать гемора.
Пробовал наследовать контроллеры/модели и менять их функционал, но во первых гемор в неймспейсах, во вторых нужно вносить в код платформы(роутеры).

Структура на пикрил.
Заранее благодарю!
Ответы: >>1212383
Аноним 2018/06/18 11:11:45  №1212383 460
>>1212371
через композер подключи платформу как зависимость и пили свой код.
Если боишься, что платформу обновят, то зафиксируй версию например на 3.5.x
https://semver.org/lang/ru/
Аноним 2018/06/18 14:12:47  №1212594 461
>>1212240
Как думаешь, можно ли взломать такое?

RewriteCond %{REQUEST_URI} .
RewriteRule .
index.php

Я вижу только вариант через запихивание вредоносного хтацесс куда-нибудь еще, но если какая-то уязвимость на сайте позволяет ложить любые файлы куда угодно, то тут, по моему, проблема будет уже не в том где какие файлы лежат. Разве что немного обойти запретив выполнение скриптов из паблик папки впринципе.
Ответы: >>1212599 >>1216149
Аноним 2018/06/18 14:18:29  №1212599 462
>>1212594
Блин * за разметку сошло, ну вобщем "вобще всё реврайтим на индекс"
Аноним 2018/06/18 15:02:04  №1212622 463
Ребят значит такая проблема. Есть старый говносайт на цмс, тот самый с открытыми папками, но это похуй.

К нему надо прикрутить google-sheet апи, в папке с сайтом даже есть композер, но какой-то старый видимо, потому что есть composer.json, но папки vendor при этом нету. И собственно в чем проблема. Когда я попробовал накатить гугло-апи через композер, то на сайте какие-то аяксовые перделки пошли попизде.

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

Проблема в том, что я даже файлов На сайте не трогал и нигде не инклудил автолоад композера - как такое возможно?


И как можно накатить подобного монстра (гугло апи) в ручную что бы ничего не сломать?
Если я просто себе заведу на локалке пустую папку и накачу в неё композером это самое апи, а потому в ручную накачу папку vendor на этот сайт, потом например переименую, что бы не конфликтовала с поделками будущих поколений несчастных работяг которые будут за этим сайтом потом присматривать и просто заинклужу где мне надо из этой папки автолоад, то запустится ли подобным образом гугло-либа?
Ответы: >>1212627 >>1212730 >>1216149
Аноним 2018/06/18 15:12:42  №1212627 464
>>1212622
в папке вендор под автолоадинг классов индекс создается, так что переименовать не получится точно, на счет скопировать перенести тоже не уверен.

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

Просто сделай сайт заново и не парься.
Ответы: >>1212648
Аноним 2018/06/18 15:56:26  №1212648 465
>>1212627
>Просто сделай сайт заново и не парься.
?
Аноним 2018/06/18 16:43:39  №1212684 466
Бля, я нихуя не понимаю ООП. Вот я разобрался как объявлять класс, наследования-хуедования и все такое. Как это использовать на практике, так сказать?
Ответы: >>1212696 >>1212709
Аноним 2018/06/18 16:58:50  №1212696 467
>>1212684
Класс — это пользовательский тип данных.
Аноним 2018/06/18 17:15:04  №1212709 468
>>1212684

Одно из применений объектов - это представлять в коде модели каких-то реальных сущностей. Ну например, Номер, Гостя или Бронь.

Попробуй решить задачу про Гостиницу или Вектор для начала.

Гостиница тут: https://phpclub.tech/pr/res/1082507.html#1097078

Вектор тут: https://phpbooktest2.ga/l1/pasta.html

Как решишь, скидывай решение. Если что-то непонятно, задавай вопросы.

Классы еще используют, чтобы делать сервисы, но тебе надо сначала с основами разобраться.
Аноним 2018/06/18 17:34:57  №1212730 469
>>1212622
Бля, я рили что-то не понимаю в этом дерьме.

Значит сутки назад я делал изменения на сайте, сегодня утром мне сказали, что часть функционала на сайте легла, ну ок, я сделал из панели управления хостингом откат к бекапу на 2.5 суток назад, на позавчерашнее утро то бишь. Функционал встал на место всё работает всё ок.

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

ЛИБА СТОИТ В ВЕНДОРЕ И ДАЖЕ РАБОТАЕТ. Видимо вся поломка была чисто в файле composer.json - в нем теперь ничего нет, кроме каких-то кусков для cms

И да, предостерегаю всех кто вкатывается, не работайте с ебаным modx - эта срань может и имеет право на жизнь, но явно не стоит дальше передавать это следующим поколениям, пусть спокойно себе доживает.
Сравнение фреймворков Аноним 2018/06/18 18:10:15  №1212764 470
Как пояснить за выбор PHP-фреймворка?
Например, пишу проект на Laravel, но с легкостью, например на дипломе могут спросить, а почему не Yii2?
Функционал у них примерно одинаков, синтаксис тоже, разве что Yii2 чуть быстрее.
Подскажите пожалуйста весомые аргументы в пользу Laravel(если таковые вообще есть)
Ответы: >>1212768 >>1212772
Аноним 2018/06/18 18:16:21  №1212768 471
>>1212764
Great community, abundance of learning material, dominance on foreign freelance markets.
Fast development and deployment of small to middle size projects.
Ответы: >>1212822
Аноним 2018/06/18 18:21:54  №1212772 472
>>1212764
Если бы я был студентом, то приплетал бы всякое тупое говно из разряда какие там парадигмы используются, как с секьюрностью и всё такое. В общем чем меньше шаришь, тем большую хуйню несешь. Сейчас с опытом в 3 года в вебе я ты твердо и четко на твоем месте привел сорт оф пикрил в своей презинтации, а еще если говорить о yii, то ключевым минусом является то, что он перестал обновляться, а это в современном мире веба смерти подобно. Ты ведь хочешь в процессе обучения в вузике освоить инструмент который даст тебе возможность быть востребованным на рынке труда.
Ответы: >>1212825
Аноним 2018/06/18 19:19:49  №1212822 473
>>1212768
ну, по поводу abundance of learning material, в частности доки, у Yii2 насколько я знаю она намного лучше, чем у Laravel, но для Laravel есть laracasts, безумно крутая вещь, относительно комьюнити и фриланс бирж не примут такой аргумент, я сам сдаю диплом сейчас, и нужно будет обосновать именно относительно диплома. Суть диплома в обучении людей разработке или языкам программирования/технологиям, что-то типа codecademy
Ответы: >>1212826
Аноним 2018/06/18 19:23:47  №1212825 474
>>1212772
я заканчиваю шарагу, при этом год уже работаю в одной конторе фуллстак раз(раб)ом, пишу лару, аутсорс, но никогда не задумывался над такими вещами как выбор фреймворка, точнее такими близкими как Laravel И Yii2. Да, по поводу обновления это точно, Laravel постоянно обновляется, при этом использует все новшества PHP, то есть самые последные версии, вот в Laravel 5.6 уже используется PHP7.2, и меньше нельзя. Кстати, это его минут, то есть версии лары обратно несовместимы.. И вроде в Yii2 блейда нет и уровень абстракции меньше
Ответы: >>1212828
Аноним 2018/06/18 19:23:59  №1212826 475
>>1212822
Ты слишком паришься, если в твоем вузе еще курсе на третьем не вербуют во всякие яндексы и прочее, то в любом случае дипломом можно подтереться, да и в тех что вербуют, можно собственно на этапе вербовки дропать вуз и идти нормально работать + учиться сразу на бою. Дрочи чисто скиллы, а не думай как на такие ебанутые вопросы отвечать.
Ответы: >>1212834
Аноним 2018/06/18 19:24:31  №1212828 476
Аноним 2018/06/18 19:28:33  №1212834 477
>>1212826
у меня college(!), но понятно что говно (там даже инета нету, но он якобы лучший в области), работаю уже год, но больше тянет к железу, а пока веб это изимани, но все равно интересно довольно, веб тоже довольно сложно пилить
Не знаю даже где в яндексы вербуют, но точно не у нас, хотя, если на защите видят что ты хоть как-то шаришь, то могу захантить. У меня просто пиздец сейчас, я из-за работы проебал дохуя времени, и у меня продукт готов процентов на 30 максимум, но при этом опыту меня уже есть, я хз че делать, походу меня изнасилуют
Аноним 2018/06/18 22:36:15  №1212987 478
jackdaniels.PNG (104, 552x881)
881x552
Аноним 2018/06/19 07:00:44  №1213051 479
Никогда бы не догадался как решить задачку про банкомат не используя жадный алгоритм.
Все оче плохо?
Ответы: >>1213053 >>1213167
Аноним 2018/06/19 07:04:23  №1213053 480
>>1213051
Забей, если ты будешь делать сайты на php, то забудешь вообще все алгоритмы и вообще это слово забудешь
Аноним 2018/06/19 10:53:24  №1213167 481
>>1213051
Но знать алгоритмы надо
Ответы: >>1213525
Аноним 2018/06/19 18:56:11  №1213430 482
Сап, пхписты. Только начал изучать это говно. Возникла проблема. В файле index.php есть функция web_page. Она отображает html-код готовой страницы. Но получается так, что даже не вызвав саму функцию, браузер комментит весь php код до тега <html> и начинает просто отображать весь код после. Как это исправить?
Аноним 2018/06/19 19:20:15  №1213442 483
Аноним 2018/06/19 20:37:00  №1213467 484
Аноним 2018/06/19 20:37:08  №1213468 485
image.png (17, 397x312)
312x397
>>1213430
потому шо строки в одинарных кавычках нельзя переносить

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

лучше сделай так

Ответы: >>1213469
Аноним 2018/06/19 20:51:13  №1213469 486
>>1213468
Но ведь ты сделал ещё хуже, дебич.

>>1213430
Используй heredoc/nowdoc или конструкцию для переменных ${variable} внутри кавычек.

Но откровенно говоря, не страдай хуйней. То что ты делаешь полный бред. Ты хочешь сделать шаблонизатор, а там все совсем по другому работает.
Ответы: >>1213471 >>1216149
Аноним 2018/06/19 20:55:27  №1213471 487
>>1213469
чем это хуже? разрыв пхп блока внутри функции выебал твой мозжечек?
Ответы: >>1213529
Аноним 2018/06/20 03:55:56  №1213525 488
>>1213167
Лолчто? Алгоритмы? Это вообще что? Я знаю алгоритм пузырьковой сортировки. Этому тебя в ВУЗе учат?
Аноним 2018/06/20 04:53:34  №1213529 489
>>1213471
Ты чёрт. Это было во-первых. Во-вторых, то что ты привёл на своём скриншоте - так никто не пишет, вернее это говнокод уровня ванички из 2Б. Опездоо ты малолетний, ты кого из себя строить тут вздумал ебеныть?
Аноним 2018/06/20 08:49:21  №1213593 490
Акутального треда по фреймворкам типа Yii или Laravel нет?
или тут можно спрашивать?
Ответы: >>1216149
Аноним 2018/06/20 12:00:02  №1213694 491
Лев, мы с тобой виделись на собеседовании в Un* с месяц назад. Ты мне оставил почту и телефон, но я где-то прошляпил листочек с ним. Если вспомнил, напиши на nnenter na гуглпочту.
Ответы: >>1218754
Аноним 2018/06/20 14:30:24  №1213809 492
Блядь, я уже начал учить ПХП и идти к своей мечте, но внезапно погряз в адской пучине онлайн-игр. Ну пиздец, пять лет, сука, держался.
Жизнь боль.
Ответы: >>1213965 >>1214366
Аноним 2018/06/20 16:39:05  №1213963 493
ОП еще проверяет большие задачи? Есть список студентов сюда постить?
Ответы: >>1213976
Аноним 2018/06/20 16:42:09  №1213965 494
>>1213809
Так ты совмещай изучение с онлайн-играми!
Ответы: >>1214108
Аноним 2018/06/20 16:59:02  №1213976 495
>>1213963

Проверяет, но может быть придется подождать, пока дойдет очередь. Так что пости, иногда заглядывай и бампай.
Аноним 2018/06/20 17:16:00  №1213991 496
Аноны, а кому-нибудь из вас удалось вкатиться с нуля?
Аноним 2018/06/20 18:03:25  №1214020 497
Аноним 2018/06/20 18:14:48  №1214033 498
без английского стоит пробовать?
Ответы: >>1216147
Аноним 2018/06/20 18:34:04  №1214056 499
>>1213991
Куда вкатиться? В язык? Вкатился по урокам опа 3.5 года назад.
3 года назад уже работал на первой подработке по 4 часа в день за 12к

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

Ща вот вроде бы устроился в место где будут платить 50к (новосиб), а мой знакомый из яндекса говорит что я пиздец тормоз и за 3 года люди строят норм карьеру в прогании, а я типа пиздец слоупок.

По навыкам:
Студентов всяких до сих пор не начинал еще делать, всё пытался в свободное время начинать осиливать, но до сих пор толком не знаю ооп, регулярки, мускуль, js, css и прочие тонкости.
Аноним 2018/06/20 19:10:25  №1214100 500
>>1213991
Я гуманитарий (работа совсем с ит не связана), пару лет в треде сижу. Ходил пару раз на собеседования ради лулзов, меня брали, но зарплату предлагали ниже чем на моей нынешней работе, на которой я ничего не делаю. Еще один раз после тестового звали на собес в веб отдел студии Лебедева, лол, но я не поехал (я не из ДС).
Ответы: >>1215440
Аноним 2018/06/20 19:21:33  №1214108 501
>>1213965
Как это сделать, я ща просыпаюсь в 4 часа дня, и сразу же дружаня звонит и такой "го покатаем)))" и я такой "ок)))" мы такие катаем, и вот уже 6 утра, и пиздец.
Ответы: >>1214339
Аноним 2018/06/20 20:20:40  №1214166 502
>>1213991
поясни, что значит вкатиться не с нуля
Аноним 2018/06/20 23:56:19  №1214334 503
baka.jpg (23, 550x550)
550x550
Чет подзаебался с задачей "сумма прописью", аж дропнул и несколько дней играл в дотку, но таки сделал, реквестирую критики и все такое.
https://pastebin.com/uPnbA3Jw
Ответы: >>1216147
Аноним 2018/06/21 00:07:23  №1214339 504
>>1214108

Зато у тебя есть опыт в играх, ты знаешь как прокачивать персонажа, как абузить имбу и тащить на скиле, вот это вот все, можешь стоять по хардкору.
Аноним 2018/06/21 04:09:54  №1214366 505
>>1213809
Не имей свободного времени, получай по жопе, расставляй приоритеты.
Аноним 2018/06/21 08:53:32  №1214442 506
Бля, какой же я тупой. Пол часа ебался с задачей про кубик, а оказывается написал error с одной r.
Ответы: >>1214465
Аноним 2018/06/21 09:58:01  №1214465 507
>>1214442
в голосину с дебиса) нахуй ты такой уродился???
Ответы: >>1214468
Аноним 2018/06/21 10:00:16  №1214468 508
>>1214465
Да вообще блять, сам не знаю.
Аноним 2018/06/21 10:20:44  №1214478 509
Вопрос по задаче про ООО Вектор.
В процессе обдумывания как сделать классы, я пришел к двум путям:
1)
класс компания, в ней поле департаменты (массив)
класс департамент, в нем поле сотрудники (массив)
2)
класс сотрудник, в нем поле департамент (объект)
класс департамент в нем поле компания (объект)

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

Сам сделал вторым способом.
А как правильно с точки зрения ПРОФЕССИОНАЛЬНОГО ПОГРОММИРОВАНИЯ делать? Или тут без разницы?

Ответы: >>1214504
Аноним 2018/06/21 11:13:48  №1214504 510
>>1214478

Обычно делают классы для каждой сущности, а именно:

- класс Сотрудник
- класс Департамент, содержащий массив нанятых Сотрудников
- класс Компания, содержащий список Департаментов

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

Это позволяет например в Департаменте сделать метод вроде "получить сумму расходов по департаменту", а в Компании "получить сумму по всей компании".

Но конечно, возможны и другие подходы.

Советую запостить свой код на проверку. Если ты хочешь посмотреть предыдущие проверки этой задачи, то пожалуйста, можно поискать тут https://phpclub.tech/search/?q=%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80&page=1

Ответы: >>1214563
Аноним 2018/06/21 12:48:35  №1214563 511
Ответы: >>1216146
Коця 2018/06/21 13:17:56  №1214582 512
14950969081830.jpg (27, 534x370)
370x534
Привет, котики
Ответы: >>1214602
Аноним 2018/06/21 13:55:29  №1214602 513
hqdefault[2].jpg (38, 480x360)
360x480
>>1214582
милости прошу, к нашему шалашу
Аноним 2018/06/21 15:13:28  №1214653 514
Собираюсь стать программистом, начать решил с гайда из оп-поста, а уже потом решать куда дальше вкатываться и че делать. Завтра же начну учить.
Ответы: >>1214789
Аноним 2018/06/21 17:39:32  №1214760 515
Не хочу вкатываться в программирование. Что делать?
Аноним 2018/06/21 18:06:16  №1214784 516
Бля в треде какая-то параша. Неужто школьники повыпускались из школ и думают о БУЩУЮЩИЕМ?

Нахуй идите с такими тупыми вопросами.
Аноним 2018/06/21 18:10:39  №1214789 517
>>1214653
Начни с html/css лучше в кокодемии.
Аноним 2018/06/21 19:02:35  №1214835 518
Поясните за потоки. Может есть какая нибудь годная статья, чтобы почитать? В мануале сейчас смотрю, как происходит отдача файла сервером, но что то ничего не понимаю.
Аноним 2018/06/22 07:40:22  №1215065 519
Анон, обязательно ли знать/пользоваться Linux? Есть кто на работе пользуется Windows?

Я сижу на Ubuntu уже несколько месяцев и это какой-то пиздец. Когда просто сервишь инетик еще терпимо.

Вот потрачую я пол дня на настройку этой хуний. Но сделает ли это меня лучшим программистом? Получ ли я какие-то полезные навыки, кроме гугления в копи-паста в консольку.
Ответы: >>1215066 >>1215073 >>1216145
Аноним 2018/06/22 07:41:26  №1215066 520
>>1215065
Хотел прикрепить скриншот с проблемой, но не смог этого сделать скриншот)))
Ответы: >>1215069 >>1216145
Аноним 2018/06/22 07:43:00  №1215069 521
>>1215066
Просто не сохранился скриншот на рабочем столе. Очередна gnuППРПШНАЯ УТИЛИТА. unix way. Wi-fi тоже постоянно отваливается.
Аноним 2018/06/22 07:45:48  №1215073 522
>>1215065
Вывод терминала
awd@awd-ThinkPad-T420:~/Рабочий стол/student$ php index.php
PHP Warning: PHP Startup: Unable to load dynamic library 'mysqlnd.so' (tried: /usr/lib/php/20170718/mysqlnd.so (/usr/lib/php/20170718/mysqlnd.so: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/mysqlnd.so.so (/usr/lib/php/20170718/mysqlnd.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'mysqli.so' (tried: /usr/lib/php/20170718/mysqli.so (/usr/lib/php/20170718/mysqli.so: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/mysqli.so.so (/usr/lib/php/20170718/mysqli.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql.so' (tried: /usr/lib/php/20170718/pdo_mysql.so (/usr/lib/php/20170718/pdo_mysql.so: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_mysql.so.so (/usr/lib/php/20170718/pdo_mysql.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

Какие-то сошки нужны. А поч такое гавно?
Php устанавливал командой:
sudo apt-get install php
Ответы: >>1215131 >>1216145
Аноним 2018/06/22 09:18:25  №1215131 523
>>1215073
Ну так установи еще и расширения.
Ответы: >>1215242
Аноним 2018/06/22 11:32:06  №1215242 524
>>1215131
Ой все. Я уже в докере запустил.
Ответы: >>1216145
Аноним 2018/06/22 15:47:50  №1215381 525
Стоит ли очищать урл перед использованием? Ну, там теги удалять и прочее.
У меня урл используется для маршрутизации - разбивается, затем части используются для конроллеров/экшенов/всяких слагов.
Также я удаляю все спецсимволы из получившихся строк. Но сейчас подумал, а нужно ли?
Даже если юзер напишет что-то левое - всё равно, это используется только для маршрутизации. Просто нужный файл будет не найдет, а пользователь увидит ошибку 404.
А если для слагов - общение с базой через пдо с подготовленными запросами с отключенной эмуляцией, посему тут проблем тоже быть не может.

Но моя паранойя не даёт мне убрать эту штуку. Что делать?
Ответы: >>1215402
Аноним 2018/06/22 16:27:55  №1215402 526
>>1215381

Если ты на 100% уверен что на твоем сайте не бывает спецсимволов в URL, то можно при их обнаружении выдавать подходящую по смыслу 4xx ошибку.

Лучше конечно писать код так, чтобы ничего не ломалось от любых символов в URL. B,j d query string после знака вопроса могут быть почти любые символы.

Удалять спецсимволы не стоит, так как тогда у тебя страница будет доступна под несколькими разными URL, а это плохо с точки зрения SEO, и вообще, у страницы должен быть ровно один URL.
Ответы: >>1215424
Аноним 2018/06/22 16:53:48  №1215417 527
Кароче, пачаны, что мне нужно уметь чтобы вкатиться на низшие уровни ИТ?
Ответы: >>1215419
Аноним 2018/06/22 16:59:36  №1215419 528
>>1215417

Для начала, ты пробовал зайти на сайты вакансий вроде hh.ru и посмотреть вакансии без опыта? Там обычно пишут требования. Если что-то в них непонятно, то спрашивай.
Ответы: >>1215433
Аноним 2018/06/22 17:09:47  №1215424 529
>>1215402
Нет, там есть спецсимволы. Логика (упрощенно) такая:
Есть класс Router, отвечающий за маршрутизацию, и есть класс System, где собраны разные системные функции и данные.
В классе System есть метод getRoute(bool $clear = true), который по-умолчанию очищает строки и возвращает массив.
Класс Router использует этот метод именно в этом виде.
А есть еще класс Request, который отвечает за обработку post/get запросов. Он уже не использует метод getRoute, а получает инфу из суперглобальных массивов типа $_POST.

Поэтому маршрутизация происходит по одному сценарию, а работа с get-параметрами - по другому. Поэтому этот метод никаким образом не влияет на то, с чем работает класс Request.

>Удалять спецсимволы не стоит, так как тогда у тебя страница будет доступна под несколькими разными URL, а это плохо с точки зрения SEO, и вообще, у страницы должен быть ровно один URL.
Вот это хорошая мысль, я даже об этом не подумал. Спасибо.
Ответы: >>1216145
Аноним 2018/06/22 17:32:42  №1215433 530
>>1215419
Кстати да, намного показательней так смотреть, чем гуглить отдельно языки и сравнивать общие значения, js все говорят, а по вакансиям без опыта в моем городе пхп и sql почти везде
Аноним 2018/06/22 17:46:25  №1215438 531
Ответы: >>1215773 >>1216144
Аноним 2018/06/22 17:49:17  №1215440 532
>>1214100
>зарплату предлагали ниже чем на моей нынешней работе
Сколько предлагали? Что на собесах спрашивали по тех.части?
Аноним 2018/06/22 19:40:20  №1215491 533
Аноны, работающие в пхп, приходится ли вам верстать, а особенно додумывать дизайн? Задачи из оп поста нравятся, но вот этим заниматься на будущей галере совсем не хочется
Ответы: >>1215519
Аноним 2018/06/22 19:55:54  №1215496 534
Всех приветствую. Ребят, не подскажите возможно ли коннект с помощью php к сетевому оборудованию по rlogin? хочу скрипт для снятия логов, а как сделать не знаю. Если можно то скиньте ссылку как это сделать.
Ответы: >>1216145
Аноним 2018/06/22 20:38:58  №1215519 535
image.jpeg (85, 464x229)
229x464
>>1215491

Ну мне дают макет формы. И я хуярю его с помощью одной из жс-библиотек. Какую форму нахуярю - такой и будут пользоваться. Простора для полёта фантазии не особо много. Пикрилейтед.
Ответы: >>1215523
Аноним 2018/06/22 20:42:33  №1215523 536
>>1215519

А, ну и этим приходится заниматься только когда прилетает задача на новую йоба-тулзу. В основном-то ковыряю няшный пхп-говнокод.
Ответы: >>1215525
Аноним 2018/06/22 20:44:39  №1215525 537
>>1215523

...Ну и занимаюсь фронтендом я только если интерфейс простой. Если что-то хитрожопое — всегда есть доступ к телу фронтендеров из дружественных подразделений.
Аноним 2018/06/23 02:28:39  №1215596 538
>>1199390 (OP)
> Верстальщику - HTML/CSS, JS, jQuery.
В 2018 можно устроиться зная эти вещи? Или теперь только вкупе с РНР можно заниматься версткой, типа всё делаешь и бек и верстку и жиквери прикручиваешь?
Ответы: >>1215698
Аноним 2018/06/23 09:49:56  №1215698 539
>>1215596
Если JS знать на уровне, то почему бы и нет?
Ответы: >>1215719
Аноним 2018/06/23 10:13:38  №1215719 540
>>1215698
То есть таки можно, просто используя жс, без Реакта, Вью и Ангуляра?
Ответы: >>1215726
Аноним 2018/06/23 10:23:48  №1215726 541
>>1215719

Версталой мб и устроишься. Фронтендером — вряд ли. Хотя бы с одним популярным фреймворком стоит познакомиться.
Ответы: >>1215728
Аноним 2018/06/23 10:26:52  №1215728 542
>>1215726
Просто я думал, что верстальщики вымерли. Ибо вакансий не видно, либо фронтендер с тремя фреймворками и нодой, либо РНР, HTML, CSS, JQuery. Плюс верстка-тред исчез и остался только фронтенд-тред.
Ответы: >>1215730 >>1215731
Аноним 2018/06/23 10:33:43  №1215730 543
>>1215728

У нас в конторе около 50-60 программеров.
Верстальщиков всего несколько.

Верстальщики нужны только там, где делают сайты. Программеры нужны везде.
Аноним 2018/06/23 10:36:29  №1215731 544
>>1215728

Ну и верстку я бы рассматривал лишь как перевалочный пункт на пути к становлению фронтендером. Больше возможностей для развития.
Аноним 2018/06/23 10:48:44  №1215740 545
Часто вижу методы с такой сигнатурой:
public function set(Foo &$foo){};

Но зачем писать &
Разве объекты не по умолчанию передаются по ссылке?
Ответы: >>1215759
Аноним 2018/06/23 11:05:45  №1215759 546
>>1215740

> Разве объекты не по умолчанию передаются по ссылке?

В пхп так было не всегда. Скорее всего, эти примеры кода написаны в бородатые времена.
Аноним 2018/06/23 11:27:50  №1215773 547
Ответы: >>1216144
Аноним 2018/06/23 15:31:07  №1215908 548
Почему пхп скрипты не минифицируют?
Ответы: >>1215970
Аноним 2018/06/23 17:39:43  №1215970 549
ОП, спасибо что обновил репозиторий ссылками на гисты. Предлагаю поправить описание репозитория с "Уроки и черновики для изучающих PHP" в "Уроки и черновики для изучающих web-разработку" или что-то в этом духе? В репозитории очень много общей информации, не привязанной к языку, так описание будет лучше отражать содержание.

>>1215908
Потому что в этом нет смысла. Минификация актуальна для фронтенда, так как минифицированный код будет меньше весить и пользователь его быстрее скачает. Ещё такой код сложно читать (тем не менее такой код можно деобфусцировать прямо в браузере, но изначальных имён переменных там, конечно же, не будет).

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

Аноним 2018/06/23 20:41:16  №1216065 550
Возможно ли выучить ларавель, не зная php?
Ответы: >>1216066
Аноним 2018/06/23 20:44:30  №1216066 551
Аноним 2018/06/23 21:23:59  №1216088 552
>>1199390 (OP)
Котаны, котаны, вы КОТАНЧИКИ!

Посоветуйте пиздатый туториал по Laravel :3
I beg you!
410-552 Вектор Аноним 2018/06/24 01:44:24  №1216144 553
>>1215773
>>1215438

Задача про Вектор.

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

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

Мануал: http://php.net/manual/ru/functions.arguments.php#functions.arguments.type-declaration

Обрати внимание, что php7 усовершенствовал систему тайп-хинтов - теперь можно в их качестве указывать примитивные типы вроде int/string, а в php7.1 стало можно указывать тайп-хинт для возвращаемого функцией значения: https://habrahabr.ru/post/267799/ , причем можно указать тип void, значащий, что функция ничего не возвращает.

Тут в функции серьезная проблема:

> function getSalaryAndCoffee(){
> ...
> $this->salary *= 1.25;

Вызов этой функции изменяет значение поля salary. Если мы вызовем ее несколько раз, то она каждый раз будет возвращать все увеличивающееся значение зарплаты. Это неправильно. Функция вида getX() не должна менять состояние (значения полей) объекта.

Далее, ты использовал наследование для того, чтобы сделать классы Manager, Engineer и тд. По задумке, наследники должны задавать значения базовой зарплаты, потребления кофе итд. Но это никак не документировано и никак не проверяется. Соответственно, если кто-то захочет добавить новую профессию, они могут просто не догадаться об этом. Это можно исправить тем, что для определения базовых значений зарплаты вместо полей использовать абстрактные методы:

abstract public function getBaseSalary();

Тогда их нельзя будет забыть переопределить.

> function getEmployeers($department){

Тут очень много какой-то копипасты, нехорошо заставляють людей все это читать. Плюс логика работы этого метода не понятна. Мы получаем какой-то объект $department неизвестного класса, и зачем-то ищем в нем непонятные поля вроде engineer_1. Увы, понять логику работы этого метода тяжело. Да и вообще, непонятно, зачем он нужен в классе Department, если он ничего из этого класса не использует.

Единственное, что можно понять, что тут стоило использовать массивы. Вместо объекта с полями engineer_1, engineer_2 логичнее было сделать массив вида $x['engineer'][0]. Массивы специально придуманы для хранения наборов данных, и поиска их по индексу.

> function getTotalInfo($department){
>\t\t$a \t\t\t = self::getEmployeers($department);

Здесь странно, что мы в объект Департамент передаем какой-то еще департамент. Было бы логичнее сделать так:

$x = $department->getSomething();

Идея ООП-подхода в объединении в классе данных (полей) и функций (методов) для работы с ними. В ООП ты обычно не передаешь департамент в метод класса Департамент. В ООП объект класса Departament хранит информацию о департаменте внутри себя и в него не надо специально ничего не передавать. А с твоим подходом не очень понятно, зачем вообще нужен класс. Не проще было сделать просто функцию getTotalInfo()?

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

Также, функция getTotalInfo() добавляет в объект поля, которых в нем изначально не было. Это плохо. В такой ситуации нужен массив, а ты используешь объект, как будто это и есть массив. Это не ООП-подход, конечно же. Недостаток тут в том, что эти поля могут быть, а могут не быть, и ты не можешь нормально работать с объектом, так как не знаешь, есть они или нет. Ты не можешь посмотреть на заголовок класса и узнать, какие в нем есть поля, для этого тебе надо разбирать весь код класса.

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

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

То есть вот это плохой паттерн:

$object->calclulateSomething();
...
echo $object->x;

Лучше делать так:

$result = $object->calculateSomething();
echo $result->x;

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

> class DepartmentOfAdvertising extends Department{

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

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

Потому вывод данных лучше вынести из объектов.

Задавай вопросы, если что-то непонятно, если понятно, то ждем исправленные версии + доработки по второй части задачи.

Ответы: >>1216199
Аноним 2018/06/24 01:44:56  №1216145 554
>>1215496

Я бы погуглил "php rlogin".

>>1215424

Ну судя по описанию, у тебя все сильно перепутано. Например, класс System - что он представляет, какую еще систему? Название как минимум странное.

> В классе System есть метод getRoute(bool $clear = true), который по-умолчанию очищает строки и возвращает массив.

Опять же непонятно, почему получением роута занимается не роутер. Метод getRoute как раз логичнее поместить в роутер. И я писал выше - можно выдавать 404 при наличии каких-то запрещенных символов, но молча удалять их и продолжать работать, как ни в чем не бывало, не стоит. То есть функция "очистки" не нужна. Соответственно, непонятно, зачем нужна опция для нее.

> А есть еще класс Request, который отвечает за обработку post/get запросов.

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

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

>>1215073

Расширения к PHP устанавливаются отдельно. Они имеют названия вроде php7-curl итд.

>>1215242

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

>>1215066

Может ты сделал что-то не так или забыл нажать кнопку сохранения? Я, кстати, пользовался дебианом и в нем вайфай в сочетании с андроидом работал безупречно, без проблем при засыпании/просыпании.

>>1215065

У линукса много преимуществ. Например, ты можешь сам исправлять в нем баги, а не молиться на то, что майкрософт когда-нибудь заметит тебя с твоей проблемой. Софт ставится через пакетный менеджер. И тот же дебиан не станет сливать про тебя информацию. Вот, для примера, что собирает винда на "базовом" (минимальном) уровне телеметрии: https://docs.microsoft.com/en-us/windows/privacy/basic-level-windows-diagnostic-events-and-fields

Тебе надо просто получше разобраться в системе, почитать статьи про нее.
Ответы: >>1216236 >>1219238
Аноним 2018/06/24 01:45:26  №1216146 555
>>214835

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

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

$a = file_get_contents('/tmp/file.txt');
$b = file_get_contents('http://example.com/file.txt');
$c = file_get_contents('ftp://ftp.example.com/file.txt');

// Чтение из архивированного файла с распаковкой на ходу:
$d = file_get_contents('compress.zlib://tmp/file.txt.gz');
$e = file_get_contents('zip://archive.zip#file.txt');

Общая информация про потоки: http://php.net/manual/ru/intro.stream.php
Список типов потоков: http://php.net/manual/ru/wrappers.php

Кстати, ты можешь при желании зарегистрировать свой новый тип потока, и стандартные функции вроде file_get_contents() будут с ним работать: http://php.net/manual/ru/function.stream-wrapper-register.php

>>1214563

У тебя та же проблема, что и в решении задачи, которое я разобрал выше. В ООП объекты обычно объединяют в себе данные (поля) и функции (методы) для работы с этими данными. Если у тебя, например, есть объект, который представляет, допустим, маршрут автобуса (BusRoute), то в нем скорее всего будут храниться параметры маршрута (например, список остановок или их координат), и методы для получения информации о маршруте.

У тебя же в классе Компания данные никакие не хранятся, а список департементов и сотрудников передается в метод getCompanyReport() через аргументы.

Очевидно, в Компании стоит хранить список Департаментов, в Департаменте - список Сотрудников, а в Сотруднике - его свойства. Если хочешь, ты можешь поддерживать обратные ссылки (в Сотруднике - ссылку на Департамент), но тогда желательно обеспечить автоматическую поддержку их актуальности при найме/увольнении сотрудников.

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

> $emp->profession = $professions[0];
Для профессий лучше было не использовать массив, а использовать переменные вроде $engineer.

> array_push($employees, $emp);
Можно писать $x[] = $y;

id можно было не добавлять или проставлять автоматически, например, используя функцию в Компании generateNewId().

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

Аноним 2018/06/24 01:45:48  №1216147 556
>>1214334

> https://pastebin.com/uPnbA3Jw

> function getWordForm($number, $order){
На мой взгляд, было лучше не закладывать в функцию формы слов, а передавать через аргументы. Тогда она бы умела склонять любые слова.

> if($number > 99){
> $number-=floor($number/100)*100;

Тут проще использовать остаток от деления на 100: $x % 100

Также, в этой функции в конце нет return, и получается, есть вероятность, что она вернет null? Лучше было бы тогда последний return писать без if.

> $num = $number;
Плохо так называть переменные, так как непонятно, в чем между ними разница.

Вместо array_push короче писать $x[] = ...;

return implode(...) повторяется много раз, можно было бы вынести его в конец функции.

> $numbers = array_reverse(explode(" ", number_format($number, 0, ',', ' ')));
Число на части лучше бы разбивать математически, благо это несложно. А то выглядит как переусложнение.

В функции numberToText() проверку на 0 можно было поставить в самом начале функции.

Не очень понятно, почему в numberToText() число формируется с конца, а не в нормальном порядке.

>>1214033

Стоит, если параллельно начинать его изучать.

Ответы: >>1218646
Аноним 2018/06/24 01:46:04  №1216149 557
>>1213593

Спрашивать можно.

>>1213469

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

Тем более, что проблема не в функции.

>>1213430

Проблема не в функции, а где-то раньше. Например, ты забыл поставить маркер <?php

>>1212622

Скорее всего ты что-то путаешь. Композер работает только с папкой vendor (если другая папка не задана в конфиге). Но конечно это не исключает того, что криво написанный сайт мог в нее лезть. Тебе надо было разобрать его код, а не лезть вносить изменения.

>>1212594

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

>>1212297

Потому что для разных серверов способы задания обработчика для данного URL разные. В Апаче это задается в файле htaccess или конфиге сервера. А по умолчанию он просто ищет указанный в URL файл.

Ответы: >>1216933
Аноним 2018/06/24 01:46:29  №1216150 558
>>1212132

Я бы пересмотрел видеоурок внимательно. Может быть, ты опечатался при переписывании кода. Или не сделал что-то или не настроил что-то в каком-то конфиге.

Например, у тебя смешаны mysql- и mysqli-функции в коде.

Также, это плохо, смешивать в одном файле логику работы с БД и HTML код. Почитай про шаблоны на досуге: https://github.com/codedokode/pasta/blob/master/php/templates.md

>>1211957

Вообще, для проверки наличия строки в БД лучше использовать не SELECT ×, а SELECT (COUNT(×)).

Также, по моему у тебя неудачно назван класс, обычно модель - это объект, который представляет одного Пользователя и хранит данные о нем, а у тебя это просто набор статических методов и назвать было его надо как-нибудь по-другому, например, UserUtils. Почитать, чем плохо статические методы, можно тут https://github.com/codedokode/pasta/blob/master/arch/di.md

>>1211831

Тут ничего экранировать не надо, так как PDO или БД сами закранируют и заключат в нужные кавычки значение, переданное вместо :email. И соответственно, никаких инъекций не будет. Исключение: если ты задал в БД экзотическую восточную кодировку вместо utf-8, то там остается шанс инъекции. Для интересующихся: https://stackoverflow.com/a/12202218 (англ.)

>>1211781

Не использовал, погугли. Вроде как там что-то отдаленно напоминающее SQLite. В википедии написано, что развивать ее не хотят: https://en.wikipedia.org/wiki/Web_SQL_Database и предлагают использовать IndexedDB. Это key-value хранилище с добавлением вторичных индексов и транзакций.

Key-value хранилища - это такие примитивные БД, которые хранят массив пар "ключ-значение" и поддерживают всего несколько операций: найти значение по ключу, перебрать все значения в БД, добавить, удалить, заменить значение с данным ключом (чем-то напоминает PHP-массив). IndexedDB в качестве значений может хранить JSON (то есть словари JS), умеет добавлять к базе индексы для быстрого поиска не только по ключу, но и по полям JSON-объектов, использует транзакции (позволяет делать несколько изменений атомарно, так, что либо они все применяются, либо не применяется ни одно).

key-value хранилища не поддерживают язык SQL. Написано огромное число хранилищ, использующих такую архитектуру: начиная с легендарного dbm, написанного Кеном Томпсоном (основатель Unix, разработчик ОС Plan9, разработчик предшественника языка Си, разработчик языка Го) в 1979 году ( https://en.wikipedia.org/wiki/Dbm ), и продолжая (с дополнениями и улучшениями) BerkeleyDB, Memcache, Redis, CouchDB, MongoDB.

Также, в некоторых компаниях пишут свои key-value хранилища, например, вконтакте использовал их и часть даже выложил в open source.

https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Basic_Concepts_Behind_IndexedDB

Аноним 2018/06/24 01:46:54  №1216151 559
>>1210739

А хардкодить и не надо - их удобно передавать через конструктор:

$config = new ConfigReader('/tmp/config.ini');

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

Это известная проблема SELECT N + 1 problem. Вариантов решений не так и много, либо ленивая загрузка, либо жадная (заранее указываем, какие связи надо подгрузить сразу, а остальные остаются ленивыми). Причем это надо тестировать, у меня в некоторых тестах с Доктриной например выходило, что ленивая загрузка дешевле, хотя это может зависеть еще и от количества и типа связей.

Вообще, если тебе надо получить очень много данных, то лучше без ORM, просто взять массив результатов (разница по времени и памяти может легко быть в 5-10 раз). Но в 95% случаев это не требуется, а использование ORM экономит кучу времени и делает работу с кодом более удобным за счет моделей и автоматической подгрузки связей.

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

> Я думал уже делать объект для ответа.

Только не изобретай свой стандарт, а используй PSR-7: https://www.google.com/search?q=psr-7 - хотя под него уже есть готовые библиотеки, но в образовательных целях может попробовать реализовать его сам.

>>1210679

Урок про работу с датой и временем: https://github.com/codedokode/pasta/blob/master/php/datetime.md

>>1210690

Удобнее первым запросом выбрать всех подписчиков, вторым - все их телефоны и далее, если надо, скомбинировать на стороне PHP.
Ответы: >>1216933
Аноним 2018/06/24 08:24:03  №1216199 560
>>1216144
Спасибо за подробный разбор, но я не понял нескольких вещей.
>Вызов этой функции изменяет значение поля salary. Если мы вызовем ее несколько раз, то она каждый раз будет возвращать все увеличивающееся значение зарплаты. Это неправильно. Функция вида getX() не должна менять состояние (значения полей) объекта.
А почему нельзя? Проблема только в неудачно выбранном глаголе? Если я назову эту функцию increaseSalaryAndCoffee будет нормально?
>Это можно исправить тем, что для определения базовых значений зарплаты вместо полей использовать абстрактные методы:
abstract public function getBaseSalary();
Я сейчас погуглил про абстрактные методы. Получается, что если я объявляю пустой абстрактный метод в классе, то его обязаны использовать и описывать все наследники? Хотя я сам сейчас это проверю.
>Тут очень много какой-то копипасты, нехорошо заставляють людей все это читать. Плюс логика работы этого метода не понятна.
Логика была такой: есть четыре профессии три ранга и руководители. Мы передаем в этот метод любой объект департамента (кроме Department), например, DepartmentOfSales. Внутри этого департамента есть несколько переменных с разными профессиями. Все они имеют вид профессия_ранк и возможно _босс. Внутри метода есть массив с названиями четырех профессий и цикл проходится по каждой из них, подставляя название профессии $value в большую копипасту. В копипасте есть варианты для трех рангов каждой профессии и боссов. Если переменная с таким названием есть в департаменте и ее значение больше нуля, то запускается цикл, добавляющий нужное количество объектов-работников в массив.
Как сделать по-другому, мне что-то в голову не приходит, но я попробую покопаться.
>Вообще, тут особо нет смысла применять наследование, так как департаменты ничем не отличаются друг от друга, кроме значений полей. Проще просто сделать несколько объектов одного класса. По идее, конечно, и с сотрудниками можно поступить так же.
То есть сделать один класс Departament и создать в нем поле, например, $employeers, для хранения объектов-работников?
>С классом Company та же проблема, что в нем не хранится никакой информации о компании.
Класс Company я создал, чтобы после создания нового объекта этого класса и использования метода getInfoAboutAllCompany, можно было получить объект с данными о каждом департаменте и сумме их значений. В первом варианте я использовал класс bookkeeping, типа бухгалтерия, в котором делал разные методы. Как вообще стоит называть такие классы?

Ответы: >>1217289 >>1222566
Аноним 2018/06/24 08:51:03  №1216212 561
Подскажите пожалуйста, как решить подобную задачу? Регулярку я написал, или тут лучше несколько регулярок сделать и для каждой по новой функцию вызывать?
«Grammar Nazi». Напиши скрипт, проверяющий текст на наличие злостных ошибок:
нет пробела после запятой, точки с запятой, восклицательного знака, вопросительного знака, двоеточия
«жи» или «ши» написано с буквой ы
в тексте есть слово «координально» или «сдесь», «зделал», «зделаю», «зделан»
в тексте есть слова «а» или «но» без запятой перед ними.
(можешь добавить еще несколько правил, если хорошо знаешь русский язык)
В случае обнаружения ошибки скрипт должен писать сообщение об этом и выводить кусок текста с ошибкой (чтобы было понятно, что не так).
Ответы: >>1222567
Аноним 2018/06/24 09:34:10  №1216236 562
>>1216145
>Я бы погуглил "php rlogin"
Гуглил, но не нашел внятных примеров с объяснениями. Поэтому и спросил здесь. Может кто сталкивался с подобным и скажет в каком направлении копать.
Аноним 2018/06/24 11:19:53  №1216330 563