«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Клуб изучающих PHP #83 Аноним 2016/11/23 09:12:43  №880700 1
14798815638230.png (33, 500x500)
500x500
14798815638241.jpg (157, 1024x683)
683x1024
14798815638272.png (188, 853x480)
480x853
14798815638323.jpg (181, 500x676)
676x500
Добро пожаловать в наш уютный тред. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- SPA (сложно): https://github.com/codedokode/pasta/blob/master/js/spa.md
- Проверялка решений на JS: http://dkab.github.io/jasmine-tests/
- MySQL: https://github.com/codedokode/pasta/blob/master/db/databases.md

Что почитать

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

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

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

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

------------------

Итак, ты зашел в тред и решил помочь какому-то анону, дав ему совет или подсказку. Спасибо! Но прочти сначала эти напоминания, чтобы твоя помощь действительно была полезной.

Давай удочку, а не рыбу

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

Будь доброжелателен

Не годится: «Ты мануал хоть раз в жизни открывал, обезьяна?»
Не годится: «В гугле забанили?»
Не годится: «Твой код плохой»
Хорошо: «Вот, как можно улучшить этот код: ...»
Хорошо: «Ты неправильно используешь функцию abc(). Вот ее описание: ссылка, и как видишь ей надо передать строку, а не массив»

Не придирайся к знанию английского или русского языка.

Объясняй

Не очень хорошо: «сделай как в этом коде»
Хорошо: «если ты вставляешь текст от пользователя в SQL запрос, то получается SQl-инъекция, которая позволяет взломать твой сервер (ссылки). Чтобы этого избежать, надо вставлять данные с помощью плейсхолдеров (ссылки)»
Хорошо: «Помни, что код пишется для людей. Если писать такие большие функции, то в них становится трудно разобраться...»

Не проповедуй

Мы учим использованию самых распространненных подходов, стандартов, библиотеки фреймворков. Если ты не любишь ООП, пробелы в коде, jQuery, сам PHP, то рассказать об этом стоит в каком-нибудь другом треде.

Не придирайся к знанию английского языка, анон пишет как умеет.

Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
Аноним 2016/11/23 10:05:07  №880716 3
Аноним 2016/11/23 11:14:42  №880735 4
Подскажите как можно в пхп сгенерировать массив из последовательных дат?

Например как примерно выглядит функция, которой я кормлю
скажем

$a = some_func('2016-09-28, '2016-11-23');

и в а в итоге лежал последовательный массив вида:
[
'2016-09-28',
'2016-09-29',
'2016-09-30',
'2016-10-01',
'2016-10-02',
...
'2016-10-30',
'2016-10-31',
'2016-11-01',
'2016-11-02',
...
'2016-11-22',
'2016-11-23'
]

может быть есть уже какое-то готовое решение в самой пхп? Нужно для построения графиков в общем, что бы потом к к каждому элементу с датой какую-то инфу добовлять.
Ответы: >>880744 >>880752
Аноним 2016/11/23 11:34:55  №880744 5
>>880735
Если тебе нужен именно массив и дата окончания включительно, то вряд ли получится что-то короче этого: http://ideone.com/GtvENn

А так хватит следущих строк:
$period = new DatePeriod(
____new DateTime($from),
____new DateInterval('P1D'),
____new DateTime($to)
);
Ответы: >>880873
Аноним 2016/11/23 11:50:48  №880752 6
>>880735

Взять timestamp первого дня и прибавлять по 24 * 3600.
Ответы: >>880873
Аноним 2016/11/23 13:23:37  №880795 7
Подскажите где поискать готовые проекты на yii2 с исходниками?
На русскоязычном форуме чет не густо.
Ответы: >>880845
Аноним 2016/11/23 14:51:33  №880845 8
>>880795
У Макарова на гитхабе (samdark)
Аноним 2016/11/23 15:45:46  №880873 9
>>880744
>>880752
Спасибо ребят, уже сам залез в самые дебри мануала куда не ступала нога современных школьников и прокурил DateTime класс в php
Аноним 2016/11/23 16:25:08  №880900 10
Сап зекач, студент 3 курсник. Сам вкатываюсь в JEE, нравится. Тут недавно приходили работодатели в универ и приглашали писать на magento, что за говно и стоит ли бросать, то что нравится, только для того что бы сейчас начать работать ?
Ответы: >>895687
Курсы Аноним 2016/11/23 18:58:04  №880980 11
У меня есть возможность пойти на курсы PHP, или выучить его самостоятельно. Что лучше?Сейчас заканчиваю курсы Html, а после них куда пойти?
Ответы: >>883228
Аноним 2016/11/24 05:01:30  №881329 12
Аноны, если вы понимаете английский, можете поиграть в игру по поиску XSS от Гугл. Ничего устанавливать не надо, все в браузере: https://xss-game.appspot.com/

Если вы не знаете, что такое XSS, у меня есть урок по ней: https://github.com/codedokode/pasta/blob/master/security/xss.md

Ну и разумеется, вам надо знать основы HTML и JS (из JS нужна функция alert).
Аноним 2016/11/24 14:04:07  №881470 13
https://github.com/codedokode/pasta/blob/master/html/html.md#Главное-задание-на-верстку-макета

Размеры макета конечны?
Шапка высотой 200px на экране с большим разрешением -- смех, а буквы не читаются: как исправить?

Возможно ли проставить высоту в% без потери возможности скроллить вниз?

Если возможно - пару комментариев
>не используй <a href="#" или <a href="javascript:void(0)" никогда. Для этого есть кнопки или <span>
Ответы: >>885044
Аноним 2016/11/24 20:59:49  №881635 14
Добрый вечер. Знаком с программированием аж 20 минут. И назрел вопрос
if(a1==a2 && a3==a4)

if(a1==a2)&&(a3=0a4)

Как правильней и как грамотней?
Ответы: >>881640 >>881820 >>885072
Аноним 2016/11/24 21:03:25  №881640 15
>>881635
да, я один из тех, которые не дочитали второй пост. Сорян, ухожу из программирования
Аноним 2016/11/24 22:04:47  №881676 16
14800142873050.png (45, 1360x607)
607x1360
>>880411
А как мне это поможет?
Ответы: >>885072
Аноним 2016/11/24 23:34:24  №881710 17
Помогите с циклами, ребята.
<?php
error_reporting(-1);

for ($i = 1; $i<=10; $i++) {
$b =$i$i;
echo "$i
$i = $b \n";

}
Вот данный код, возводит каждое следующее число в квадрат. До 10 включительно.
Но как сделать так, чтобы цикл работал до того момента, пока результат квадрата числа меньше 1000 например.
Ответы: >>881715 >>881716 >>885072
Аноним 2016/11/24 23:41:33  №881715 18
>>881710
задай условие типа если результат равен н выход или же пока н меньше условия сорян в синтаксе пхп не очень как именно не могу точно написать
Ответы: >>881718
Аноним 2016/11/24 23:41:42  №881716 19
>>881710
там еще знак умножения между $i*$i
Аноним 2016/11/24 23:42:55  №881718 20
>>881715
а это где записывать ? На русском объясни, хз)Спасибо
Ответы: >>881721
Аноним 2016/11/24 23:45:13  №881721 21
>>881718
Все, понял .Спасибо огромное
Аноним 2016/11/24 23:48:05  №881722 22
Тогда другой вопрос, товарищи.
<?php
error_reporting(-1);

for ($i = 1; $b<10; $i++) {
$b =$i$i;
echo "$i
$i = $b \n";

}
Вот результат этого :
Успешно time: 0.01 memory: 52488 signal:0
11 = 1
2
2 = 4
33 = 9
4
4 = 16
.
А как сделать так, чтобы на 9 заканчивался цикл? Понять не могут ? В принципе, логика понятно, почему 16 получается . 33 = 9;, проверяется это условие , потом выполняется действие и выводится 16. А как сделать так, чтоб на 33 цикл заканчивался ?
Сори за спам
Ответы: >>881724 >>885072
Аноним 2016/11/24 23:55:42  №881724 23
>>881722
дак задай конкретное условие
если известен результат то укажи в условии
если нет то сделай типа пока b!=i
хз че первое в голову пришло
Аноним 2016/11/25 01:38:06  №881760 24
Ответы: >>885072
Аноним 2016/11/25 08:49:24  №881820 25
>>881635
Правильней if (($a1 === $a2) && ($a3 === $a4)) (если тебе нужно зачем-то сравнивать с автоприведением типов, то используй ===)
Ну а совсем правильно будет книжки читать.
Ответы: >>881821
Аноним 2016/11/25 08:51:48  №881821 26
>>881820
...если не нужно сравнивать с автоприведением...
самофикс
Аноним 2016/11/25 10:02:24  №881835 27
возьмите кто-нибудь 30летнюю пхп макаку без образования, опыта, знания матана и алгоритмов в ДСаъх за еду.
._.
Ответы: >>885072
Аноним 2016/11/25 12:30:08  №881873 28
Наткнулся в статье ( https://m.habrahabr.ru/company/badoo/blog/316050/ ) на скриншот: https://habrastorage.org/files/4a5/5fc/929/4a55fc9297e14722bc9508f0fa1c8fda.png

А вы бы обратили внимание на чебокс, старательно замаскированный под серую галочку? Это же прекрасно. Впрочем, что еще ждать от убогой устаревшей системы платежей с технологиями транзисторной эры, которая позволяет такие трюки. Я бы никогда не стал платить настоящей картой в интернете.
Ответы: >>881926
Аноним 2016/11/25 14:35:20  №881926 29
14800737202900.png (279, 589x678)
678x589
>>881873
Вот пидорасы.

Хотя, пользователям-социоблядкам с баду и прочих параш, тащемта, так и надо.
Аноним 2016/11/25 18:49:02  №882063 30
Добрый вечер. Вопрос по структуре директории хранения изображений, как лучше всего хранить? Есть к примеру товары и есть категория. К примеру 28 миллионов товаров, и 40 категорий. Связь примерно такая: Главная категория -> категория X -> Товар
То-есть хранить в data/categoryX/product_id уже не выйдет из за того что в среднем будет 500к+ товаров в одной категории. Есть так же производители, но неизвестно есть ли приозводитель со 100к+ товаров и будет ли в будущем.
Ответы: >>882142 >>882163 >>882165
Аноним 2016/11/25 20:41:03  №882142 31
>>882063
Ну то-есть я не прошу за меня придумать это, у меня есть пару идей к примеру: "категория > производитель > [0] > photo.png" по достижению первой директории лимита ( к примеру 1к фото ) создавать вторую и заливать туда.
Просто может есть какие то паттерны общепринятые или идеи, я конечно поискал, но ничего занимательного не нашел.
Аноним 2016/11/25 21:45:07  №882163 32
>>882063

1) делать папки по дате загрузки
2) делать папки по первым цифрам id товара, например id 12345678 -> 123/123456/12345678.png. Тут правда надо помнить, что мы обязаны сохранять картинку до записи информации в базу и придется изворачиваться с транзакциями, чтобы это обеспечить.

Аноним 2016/11/25 21:46:43  №882165 33
>>882063

Или 123/123456/12345678-телевизор-самсунг.jpg если ты хочешь читабельные имена которые возможно улучшат позицию в поиске по картинкам.
Аноним 2016/11/26 01:44:47  №882285 34
14801138880510.jpg (361, 1024x772)
772x1024
>>880700 (OP)
Антоши, элементарный для вас, знатоков, вопрос: как красиво вывести данные из БД в html в виде таблицы, чтоб без <tr><td>? Без шаблонизаторов специальных не обойтись?
Ответы: >>882288 >>882290
Аноним 2016/11/26 01:57:16  №882288 35
>>882285
Без <tr><td> непосредственно в коде php, естественно.
Ответы: >>882290
Аноним 2016/11/26 02:08:44  №882290 36
>>882285
>>882288
Ты хочешь разделить HTML разметку и PHP код? Хорошая мысль, для этого можно использовать шаблонизатор вроде Twig. Если не хочешь, можно использовать сам PHP, он имеет встроенный шаблонизатор. Почитай советы в пасте про список студентов из ОП-поста, там были ссылки на статьи в которых объяснялось как это работает.
Ответы: >>882323 >>882645
facebook api ACCESS TOKEN Аноним 2016/11/26 03:58:51  №882320 37
Сап аноны, кто работал с апи фейсбука? хочу получить токен на доступ, постоянный токен, не тестовый, чтоб мне не приходилось его вводить каждый день. долго гуглил ( на самом деле не пойму почему такая простая вещь столь не доступна)
нашел этот сайт https://smashballoon.com/custom-facebook-feed/access-token/ который как бы поясняет как его получить и в конце статьи показывает его ( что мне показалось сомнительным). Получил , значит, этот токен доступа, вставил в положенное место и в итоге получил такое сообщение
"An active access token must be used to query information about the current user."
в общем реквестую помощь. Как справиться с этим говном, как мне без жопоболи работать с этим приложением?
По аналогии с тестовыми токенами все нормально работает, только вот их каждый день нужно новые постить
Ответы: >>895687
Аноним 2016/11/26 04:27:39  №882323 38
>>882290
Спасибо, анончик. Изучаю.
Аноним 2016/11/26 10:18:13  №882344 39
Оффтоп, душу излить

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

Теперь вот задумываюсь над тем, чтобы начать искать работу сейчас или после НГ. Задачи на студентов и файлхостинг у меня сделаны на хорошем уровне. На тестхаб, видимо, придётся забить. Надо подтянуть CSS, JS, подготовиться к вопросам собеседований и вперёд
Ответы: >>882361
Аноним 2016/11/26 11:38:05  №882361 40
>>882344
> Задачи на студентов и файлхостинг у меня сделаны на хорошем уровне.
Покажешь?
Ответы: >>882378
Аноним 2016/11/26 11:48:31  №882369 41
Ответы: >>892217 >>892218 >>892219
Аноним 2016/11/26 12:16:43  №882378 42
Ответы: >>882408
Аноним 2016/11/26 12:59:40  №882390 43
Решаю задачки с оп-поста. Не могу раздуплить о кредитах

Школьник решил купить айфон и для этой цели взял кредит. Сумма кредита — 40000 р., банк в начале каждого месяца (включая первый) начисляет 3% от остатка долга за пользование кредитом и 1000 р. комиссии (да, а ты думал, обойдешься процентами?). После этого, в конце каждого месяца, наш герой идет в банк и пытается выплатить долг, но он не может заплатить более 5000 р за раз (сэкономленных на школьных завтраках). Вопрос, когда он избавится от долга? Во сколько школьнику обошелся айфон?

<?php

error_reporting(-1);

$creditBalance = 4000; / Долг анона перед банком /
$percent = 1.03; / Банк начисляет 3% в месяц от суммы /
$servicePayment = 1000; / А также 1000 рублей в месяц комиссии за обслуживание счета /
$monthlyPayment = 5000; / Анон платит 5000 р в месяц, это все, что ему дает мама на завтраки /
$paymentTotal = 0; / Сколько всего отдал банку анон /

/ Посчитаем расходы 20 раз на 20 месяцев вперед /
for ($month = 1; $month <= 20; $month ++) {
$creditBalance = ( $creditBalance $percent ) + $servicePayment - $monthlyPayment;
$paymentTotal = ($paymentTotal + $monthlyPayment)+$creditBalance;
echo "{$month} месяц спустя: долг = {$creditBalance} руб, выплачено всего {$paymentTotal} руб. \n";

/
Если баланс отрицательный — хватит считать */
if ($creditBalance < 5000) {
echo "С меня хватит!\n";
break;
}
}
Ответы: >>882411 >>882420
Аноним 2016/11/26 13:19:49  №882404 44
>>880700 (OP)
Вы пока выучите пыхапы, он устареет окончательно и исчезнет с рынка.
Ответы: >>882410
Аноним 2016/11/26 13:20:36  №882407 45
Аноним 2016/11/26 13:22:18  №882408 46
Ответы: >>882964
Аноним 2016/11/26 13:23:26  №882410 47
>>882404
Я это слышу с 2002 года.
Аноним 2016/11/26 13:24:56  №882411 48
>>882390
Код в тред не кидай. Читай внимательнее оппост и задачник, там всё расписано для новичков. Или посмотри как местные код кидают хоть.
Аноним 2016/11/26 13:46:05  №882420 49
>>882390

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

Чтобы не уходить в минус, надо перед тем как платить, посмотреть, какая сумма долга, если маленькая, то платить не 5000, а сколько осталось.
Ответы: >>882477
Satosi 2016/11/26 14:19:00  №882445 50
14801591404390.jpg (51, 660x495)
495x660
Сап тред. Пробую с переменным успехов вкатиться в MVC (Отчасти поэтому не постил тут недели 2).
Пока изучал не по ОП мануалам, но блииин.
Какой-же MVC сложный. Просто ужос. Я не могу понять буквально ничего. Ну то-есть я понимаю как всё работает, как всё теоретически устроено, но как например прикрутить сбор данных из БД - это для меня загадка, прикрутить новый функционал - тоже. Вообще не понимаю как происходит наследование в некоторых случаях. Не могу понять как происходит передача данных по структуре от POST.
Антоны, я последню неделю я только и делал что ковырял всякие MVC по мануалам с сайтов и ютюбов, но я уже просто отчаялся.
Неужели я просто тупой и не судьба мне в программирование?
Ответы: >>882451 >>882691 >>882698
Аноним 2016/11/26 14:24:20  №882451 51
>>882445
Не ссы, продолжай учить, пока осознание не придёт само.
Аноним 2016/11/26 15:12:11  №882477 52
>>882420
вот примерно до этого я дошел, но не знаю как выразить оплату только остачи. гуглил, но по теме не нашел
Ответы: >>882480
Аноним 2016/11/26 15:17:35  №882480 53
>>882477
>перед тем как платить, посмотреть, какая сумма долга, если маленькая, то платить не 5000, а сколько осталось.
Ответы: >>882500
Аноним 2016/11/26 15:53:51  №882500 54
>>882480
вот это я и не понимаю.
додумался до такого костыля, но он не работает
if ($creditBalance < 0) {
$paymentTotal = $paymentTotal + $creditBalance;
$creditBalance = 0;
echo "С меня хватит!\n";
break;
Ответы: >>882502
Аноним 2016/11/26 15:56:39  №882502 55
Ответы: >>882515
Аноним 2016/11/26 16:21:39  №882515 56
Ответы: >>895687
Аноним 2016/11/26 18:55:51  №882588 57
Собираюсь заниматься версткой, нужно ли мне знать php?
И совсем не в том местеспрашиваю, но сколько времени займет путь от "полный 0" до создание сайта по шаблонам?
Ответы: >>882609 >>882610
Аноним 2016/11/26 19:27:04  №882609 58
>>882588
чисто для вёрстки - нет. для создания возможности общения между клиентом и сервером - да.
Аноним 2016/11/26 19:30:21  №882610 59
Аноним 2016/11/26 19:59:14  №882619 60
Привет ребята, начал осваивать php и решил свой старый сайт перенести на php. Начал все делать по модулям, но столкнулся с такой проблемой в модуле "header" ( меню сайта ) как не удивительно есть гиперссылки. Вопрос, нужно создавать каждую страницу заново? Или можно как-то с помощью хитроумного кода менять содержимое основной страницы.
Ответы: >>895687
Аноним 2016/11/26 20:33:23  №882645 61
14801816037710.jpg (35, 530x300)
300x530
>>882290
Итак, нихуя я и не нашёл как вывести таблицу без смешивания кода html с php. Придётся хуячить по воробьям с ионной пушки.
Ответы: >>882669 >>895687
Аноним 2016/11/26 20:37:46  №882653 62
Для чего указывается префикс @ перед обращением к переменной?
Например,
@$array[z]=round($array[x]/$array[y]);
Ответы: >>882691
Аноним 2016/11/26 20:51:47  №882669 63
>>882645
> как вывести таблицу без смешивания кода html с php.
<td>{$data}</td>
Не?
Ответы: >>882673 >>895687
Аноним 2016/11/26 20:58:01  №882673 64
>>882669
До такого и я додумался, а как со строками быть? Предполагается, что количество строк динамическое.
Ответы: >>882686 >>882691
Аноним 2016/11/26 21:17:34  №882686 65
>>882673
Что такое строки? Я тебя не понимаю?
Ответы: >>882690
Аноним 2016/11/26 21:22:44  №882690 66
>>882686
HTML-таблица состоит из тегов <tr>, строк таблицы, и <td>, колонок таблицы. Есть двумерный массив, которым эту таблицу нужно заполнить. Предполагается, что массив расширяемый.
Как создать таблицу, не выводя тегов в php, а используя шаблон максимально эффективно? Или таблица в хтмл - это настолько рудиментарное говно, что даже и пытаться не стоит?
Ответы: >>882692 >>882696
Аноним 2016/11/26 21:23:29  №882691 67
>>882445

Почему бы не почитать мануал ОПа? https://github.com/codedokode/pasta/blob/master/arch/mvc.md

>>882653

Мануал: http://php.net/manual/ru/language.operators.errorcontrol.php

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

>>882673

Прочитай http://www.phpinfo.su/articles/practice/shablony_v_php.html
Ответы: >>882697 >>882700 >>882704
Аноним 2016/11/26 21:25:16  №882692 68
>>882690
Как-то так.
<table>
<?php for($i=0;$i<$colls;$i++){?>
<tr><td>{$data}</td><td>{$data2}</td><td>{$data3}</td>
</tr>
<?php } ?>
</table>
Ответы: >>882694
Аноним 2016/11/26 21:26:08  №882694 69
Ответы: >>882695
Аноним 2016/11/26 21:27:17  №882695 70
>>882694
Насколько я понял вопрос, у него не та ситуация, когда шаблоны можно было-бы применить.
Ответы: >>882701
Аноним 2016/11/26 21:28:47  №882696 71
14801849275080.jpg (29, 400x600)
600x400
>>882690
Таки кошерно.
Премного благодарю. До сих пор плохо понимаю что в альтернативном синтаксисе писать можно, а что нельзя.
Ответы: >>882701
Аноним 2016/11/26 21:29:51  №882697 72
>>882691
Про шаблоны прочёл, иначе вопросов бы не задавал.
Ответы: >>882700
Аноним 2016/11/26 21:30:24  №882698 73
>>882445

> Вообще не понимаю как происходит наследование в некоторых случаях.
А какое отношение это имеет к MVC? Наследование изучают в теме про ООП. Если что, в моем учебнике в главе про ООП это немного изучается.

> Не могу понять как происходит передача данных по структуре от POST.
Удобно данные из POST внести в объект-модель и дальше работать с ней. Хотя некоторые предпочитают гонять туда-сюда большие массивы.
Ответы: >>882704
Аноним 2016/11/26 21:31:41  №882700 74
>>882697
> используя шаблон максимально эффективно?
Вообще, да
>>882691 - прав конечно. Максимально эффективно только как он посоветовал. С этим не спорю ни разу.
Аноним 2016/11/26 21:32:23  №882701 75
>>882695

Какие шаблоны нельзя применить? Шаблоны на PHP? Шаблоны на twig? Оба этих варианта решают его проблему.

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

>>882696

МАнуал объясняет http://php.net/manual/ru/control-structures.alternative-syntax.php
Ответы: >>882703
Аноним 2016/11/26 21:33:39  №882703 76
>>882701
>Или ты имел в виду какие-то придуманные тобой самодельные шаблоны?
Я имел ввиде что у человека наверное MVC вообще нет.Иначе-бы такие вопросы он не стал задавать.
Ответы: >>882705
Satosi 2016/11/26 21:37:17  №882704 77
14801854373420.jpg (38, 480x310)
310x480
>>882698
>Удобно данные из POST внести в объект-модель и дальше работать с ней.
Я про то, что POST теряется пока до модели доходит. И не могу понять почему.

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

>>882691
Как ни странно времени не было, сейчас уже буду его усиленно учить.
Ответы: >>885080
Аноним 2016/11/26 21:37:18  №882705 78
>>882703
Да, mvc там и рядом не валялось. Это простецкая визитка с вау-вау, динамическим выводом прайслиста. Тупо нужно быстрее сделать, но чтобы я это потом ещё мог поддерживать и допиливать туда разные элементы, не дёргая верстальщика по пятнадцать раз в день.
Ответы: >>882707
Аноним 2016/11/26 21:40:51  №882707 79
>>882705
Можно сложнее сделать, с div и прочее. Но с таблицей вариант очень хорош тем, что его я тебе накидал за минуту и он работает вообще во всех браузерах одинаково. Даже в IE 4.5!
Ответы: >>882708
Аноним 2016/11/26 21:41:49  №882708 80
>>882707
Вот я и говорю, что наикошернейше. Благодарю вас, товарищ.
Аноним 2016/11/26 21:50:18  №882712 81
Как сохранить файл, загружаемый через
<form>
<input type="file"/>
</form>
на сервере? Пытаюсь сделать по инструкции с w3school
if (move_uploaded_file($_FILES["filename"]["tmp_name"], $target_file))
echo "done";
Но у меня move_uploaded_file ничего не возвращает, ну и файл не появляется, разумеется. В php.ini file_uploads=On.
Ответы: >>882726 >>885086
Аноним 2016/11/26 22:18:55  №882726 82
>>882712
$target_file
А тут что? Скорее всего в этой переменой проблема.
if (move_uploaded_file($_FILES["filename"]["tmp_name"], $target_file)){
echo "Загрузилось";
}else{
echo "Сообщение об ошибке";
}
Ответы: >>882727
Аноним 2016/11/26 22:22:00  №882727 83
>>882726
В $target_file - путь к файлу, который составляется следующим образом:
$target_file="/"."uploads/" . basename($_FILES["filename"]["name"]);
Ответы: >>882728 >>882731
Аноним 2016/11/26 22:22:49  №882728 84
>>882727
Папка "uploads" лежит в папке с .php файлом, в котором происходят описанные выше действия, да.
Ответы: >>882731
Аноним 2016/11/26 22:31:42  №882731 85
>>882728
>>882727
Пиздец, ладно, проехали. Не знаю, что за хуйня творится в вашем PHP, но я заменил значение атрибута name у <input type="file"...> и эта сука заработала. У вас всегда так, или я совсем криворукий уебан?
Ответы: >>882747 >>885086 >>895687
Аноним 2016/11/26 22:38:13  №882737 86
Поясните за обращения к свойствам объекта user-defined класса с помощью оператора []? Где то читал, что можно обращаться к свойству объекта подобным образом:
echo $classInstance['propertyName'];
Но именно такой синтаксис у меня не работает. Или для того, чтобы он работал, нужно кастовать объект к массиву, и только потом уже брать значения свойств по ключу-названию свойства?
Ответы: >>883494 >>885086
Аноним 2016/11/26 22:51:13  №882741 87
Посоны, импортирую csv файл в sql-таблицу, проблема в том, что в одной из строчек в имени есть ', и при запросе естественно пидорасит все, и эта строчка не попадает в базу, как исправить?
Ответы: >>882746 >>885086
Аноним 2016/11/26 23:01:37  №882746 88
Аноним 2016/11/26 23:02:31  №882747 89
>>882731
В инпуте имя файла должно совпадать с тем. что в пхп-файле.
Ответы: >>882748
Аноним 2016/11/26 23:05:53  №882748 90
>>882747
Дак оно и так совпадало. Потом я сменил имя файла в инпуте и в пхп файле, и только тогда заработало. Скорее всего, я еще помимо этого делал какие то мелкие изменения, которые повлияли на результат, но чё то в голове из последних действий отложилось только изменение атрибута name
Ответы: >>882753
Аноним 2016/11/26 23:11:56  №882753 91
>>882748
Может имя было ЗАРЕЗЕРВИРОВАНО?
Ответы: >>882759
Аноним 2016/11/26 23:18:57  №882759 92
>>882753
да не должно быть. datDB было, FUCKTHAT стало.
Аноним 2016/11/26 23:23:34  №882762 93
14801918144600.png (41, 799x462)
462x799
14801918144611.png (42, 797x521)
521x797
14801918144632.png (36, 799x364)
364x799
Оцени резюме, анон.

Через какое-то время допишу о знаниях JS и CSS, как доделаю задачки в ОП-посте
Ответы: >>882782 >>882804 >>885086
Аноним 2016/11/27 00:09:02  №882782 94
>>882762
А ты на ИБ учился?
Ответы: >>882809
Аноним 2016/11/27 00:51:45  №882804 95
>>882762
А почему среднее специальное? В колледже учился?
Ответы: >>882809
Аноним 2016/11/27 00:56:52  №882809 96
Аноним 2016/11/27 07:30:14  №882957 97
>>880700 (OP)
буду писать ломатель куков на пхп ^^
пока что только для фейсбука но мы будем расширяться.
Аноним 2016/11/27 08:14:54  №882958 98
Можно ли убить процесс firedox.exe как в питоне средствами пхп?

#kill firefox
PROCNAME = "firefox.exe"

def kill_firefox():
for proc in psutil.process_iter():
try:
if proc.name() == PROCNAME:
proc.kill()
except:
pass
kill_firefox()
Ответы: >>885086
Аноним 2016/11/27 09:47:08  №882963 99
14802292282260.png (3, 367x122)
122x367
Мне всё равно сложно. Я хоть в правильном направлении двигаюсь?
Ответы: >>882964 >>885086
Аноним 2016/11/27 09:48:05  №882964 100
Аноним 2016/11/27 11:41:10  №882978 101
14802360703310.png (17, 468x237)
237x468
Ответы: >>885086
Аноним 2016/11/27 12:41:27  №882999 102
php-анон, у меня есть один сырой движок говнофорума для обучения погромированию. Так вот, он настолько убогий что не поддерживает создание тематических разделов. Следовательно у меня вопрос: как сделать несколько разделов?
Ответы: >>883035 >>883077 >>885101
Аноним 2016/11/27 14:20:34  №883035 103
>>882999
Найди другой движок.
Ответы: >>883045
Аноним 2016/11/27 14:32:54  №883042 104
Искал небольшую cms для личного бложика, нашел Pico cms.
О нем пишут, что он работает без использования базы данных.
Отзываются о нем так, например:
>>Pico is another really simply CMS. It doesn't have a backend to edit (there is a plugin to enable that). It doesn't use database queries therefore making it super fast.
>>It doesn't use database queries therefore making it super fast.
Неужели использование базы данных медленне, чем использование файлов?
Ответы: >>885089
Аноним 2016/11/27 14:38:00  №883045 105
>>883035
>для обучения погромированию
Жопой читаешь?
Аноним 2016/11/27 15:29:43  №883077 106
Аноним 2016/11/27 15:44:23  №883087 107
Поясните за пхп7. Понятно, что если и возьмут джуниором чистить вилкой легаси пхп4, но всё же.
Ответы: >>883089 >>885101
Аноним 2016/11/27 15:49:28  №883089 108
>>883087
>если и возьмут джуниором чистить вилкой легаси пхп4
Тут тебе не Java уже везде где только можно 7 версия, и 7.1 на подходе.
Аноним 2016/11/27 16:28:35  №883101 109
>>880700 (OP)
>На 2016 год писать на ES5 рановато
Что-то проигрунькал.
Ответы: >>883102
Аноним 2016/11/27 16:31:08  №883102 110
Ответы: >>883103
Аноним 2016/11/27 16:33:00  №883103 111
>>883102
В мануале по жс из ОП-поста написано.
Ответы: >>883104
Аноним 2016/11/27 16:35:15  №883104 112
>>883103
Их есть несколько версий? Срисли? А как же обратная совместимость? Или у JS с этим совсем беда?
Ответы: >>885101
Аноним 2016/11/27 19:22:04  №883199 113
Ответы: >>885101 >>885107
Аноним 2016/11/27 19:38:34  №883206 114
Есть ли в php встроенные агрегатные функции типа avg, count, которые можно было бы использовать на массивах, и при этом ставить ограничение. Например, если в элементы в массиве - экземпляры класса, у которого есть некоторое поле "Х", посчитать сколько у скольких объектов Х больше Y?
Ответы: >>883410 >>883494 >>885107
Аноним 2016/11/27 20:36:03  №883228 115
>>880980
Пару месяцев кручусь в веб-разработке. Учил PHP сам, методом проб и ошибок(не было денег на курсы какие-то, да и курсов полноценных в моем мухосранске нету). Так что, если у тебя есть шанс пойти на такие курсы, я рекомендую сделать это. Это в том случае, если ты всерьез хочешь заняться веб-разработкой. Мне, например, сейчас иногда аукается мое самообучение, иногда не в очень хорошую сторону.
Аноним 2016/11/27 22:34:52  №883301 116
PHP'ч, какую IDE посоветуешь для учёбы/работы? Сейчас использую atom, да да, это и не ИДЕ вовсе, а редактор кода но хотелось бы функционала как на visual studio, ну или максимально приближенного к ней.
Ответы: >>883306 >>883310 >>883411
Аноним 2016/11/27 22:42:04  №883306 117
>>883301
Присоединяюсь к вопросу, только мне требуется отладчик и ничего больше.
Ответы: >>883310
Аноним 2016/11/27 22:50:50  №883310 118
>>883301
>>883306
NetBeans, Eclipse из бесплатных.
PhpStorm от JetBrains из платных (для студентов бесплатно, при желании можно взять торрент-эдишен).
По поводу отладчика - для PHP это xdebug и необязательно для его использования иметь ИДЕ.
Я всегда пользовался атомом, для него есть пакет php-debug который добавляет функционал отладчика в редактор.
https://atom.io/packages/php-debug
По поводу других редакторов вроде Sublime Text когда-то в треде писали что дополнения тоже существуют.
Ответы: >>883321 >>885107
Аноним 2016/11/27 23:07:38  №883321 119
Аноним 2016/11/28 00:01:41  №883374 120
14802805013040.jpg (194, 1024x768)
768x1024
Аноним 2016/11/28 01:32:35  №883410 121
>>883206
>если в элементы в массиве - экземпляры класса
Это зачем так?
Ответы: >>885107
Аноним 2016/11/28 01:34:01  №883411 122
>>883301
>функционала как на visual studio
Там же был бесплатный плагин к ней. По крайней мере в 2011 году. А сейчас все на PHPStorm перекатились. Удобнее ничего не найти.
Аноним 2016/11/28 06:49:58  №883466 123
Господа, как мне найти первую часть директории, если мне известна только последняя часть ее поддиректории? по всем директориям в папке дуже долго проходить...
Ответы: >>883475 >>883494 >>885119
Аноним 2016/11/28 07:20:02  №883475 124
Аноним 2016/11/28 09:01:03  №883494 125
>>882737
Реализуешь интерфейс ArrayAccess для класса: http://php.net/manual/en/class.arrayaccess.php

>>883206
В PHP нет, так как обычно достаточно встроенных функций. Если не достаточно, то есть обёртки-коллекции, предоставляющие как раз нужные тебе методы, пример: https://laravel.com/docs/5.3/collections#method-avg

Но конкретно в твоём случае, если я правильно понял, хватит функций array_filter и count. Вбрось на ideone пример исходного массива и то, что тебе нужно из него получить.

>>883466
http://php.net/manual/en/function.realpath.php
Может это?
Что значит последняя часть поддиректории? Просто вбрось пример.
Ответы: >>883495
Аноним 2016/11/28 09:06:29  №883495 126
>>883494
Например, есть такой путь.
C:/Users/Dima/AppData/Mozilla/Firefox/Profiles/kslj498/cookies.sqlite

Я точно знаю, что AppData/Mozilla/Firefox/Profiles и cookies.sqlite должны быть в поддиректории, а другие папки, например Dima и kslj498 находятся динамически. из них строится путь до файла
мне придется все директории и поддиректории в диске С обходить?
Ответы: >>883621
Аноним 2016/11/28 09:32:14  №883499 127
14803147342890.png (18, 215x119)
119x215
Привет, анонас.
Есть вопросцы, в юношеском запале клепал магазины на wp и woocommerce, но потом очнулся и понял что это раковник. Вкатился в yii2 (пара успешных крупных проектов и куча опыта) и для своего бизнеса (оптовый портал с 1000+ позиции (раковый webasyst - достался в наследство, от предыдущего хозяина) и розничный(wp+woo)) делаю новый магаз с преферансом и куртизанками. Работают у меня макаки на кассах которые и вордпресс ложили на пол, поэтому неубиваемая трехкнопочная система - это мой выбор. В целом я добрался до отличного результата с rbac, виджетами, но все равно ощущение что что-то забыл. Точнее, что можно больше.

Что посоветуешь, анончик? Как бы ты аноний сделал магазин для розничной и оптовой сети и как бы ты его писал, что использовал? Как не обосраться и сделать магазин 10 из 10? Что тебе кажется нужным, а что нет?

Больше мотивационно хочется пообщаться, а то очень иногда грустно одному сидеть в тоске.
Ответы: >>895687
Аноним 2016/11/28 12:54:24  №883563 128
В чём разница между :: и -> ? Что делает эта строчка:
>$Frame::getInstance()->startDynamicWithID("delivery-info");
Заранее спасибо.
Ответы: >>883566 >>885119
Аноним 2016/11/28 12:55:58  №883566 129
>>883563
Первое статический метод вызывает
Аноним 2016/11/28 14:59:24  №883621 130
>>883495
Есть функция glob: http://php.net/manual/en/function.glob.php
Но она не умеет в рекурсивный поиск, чтобы найти cookies.sqlite нужно точно знать на каком уровне вложенности находится файл, т.е. писать как-то так: glob('folder/✱/✱/cookies.sqlite')

Для произвольной вложенности нужно всё обходить ручками. Но есть готовые итераторы из SPL: http://php.net/manual/en/class.recursivedirectoryiterator.php
Использовать как-то так: http://stackoverflow.com/a/36912410

А на линуксе есть find, с помощью которого задача решается одной короткой строчкой.
Ответы: >>884867 >>885119
Аноним 2016/11/28 17:52:31  №883720 131
Есть следующий код http://ideone.com/x1B5CD
Вопрос - можно ли как-то так заюзать тернарный оператор, что бы сократить немного этот код? Думал что это будет что-то такое (empty($_COOKIE['user_id'])) ? $this->actionRegistr() : $this->action(), но не работает.
Ответы: >>885119
Аноним 2016/11/28 18:20:56  №883745 132
На проверку:

Граммар Наци

http://ideone.com/uNsBBv - первое задание с выделением текста. У меня сложилось ощущение, что тут нужно больший кусок текста выводить с ошибкой, но я без понятия как это сделать. В голову приходит работа с флагом PREG_OFFSET_CAPTURE, но как на деле это все применить - хз...

http://ideone.com/XHg06L - вторая часть с тихим исправлением полегче.
Ответы: >>885119
Аноним 2016/11/28 20:18:14  №883810 133
В PHP есть какие нибудь особенности работы со ссылками имею в виду в описании сигнатур функций параметры указывать со знаком ссылки - &$a_variable? Должен ли я знать при работе с ними что нибудь кроме того, что по умолчанию параметры всех типов при передаче в функции копируются? Используются ли ещё ссылки как нибудь кроме передачи параметров?
Ответы: >>885119
Аноним 2016/11/28 21:22:43  №883842 134
Ребят, есть интересный вопрос. Какой самый тяжелый этап в изучении программирования? Может есть какая-то тяжелая тема, или тяжелый этап это теория и тд. Что самое тяжело, когда прям хочется забросить изучения программирования ?
Ответы: >>883849 >>883851 >>883863
Аноним 2016/11/28 21:31:34  №883849 135
Ответы: >>883857
Аноним 2016/11/28 21:35:04  №883851 136
>>883842
Нет такого этапа, каждый раз когда я думал, что все самое тяжелое уже позади и дальше осталось только попивать смузи, читая хабр, меня настигала еще большая жопа и осознание того, что я нихуя не знаю.
Аноним 2016/11/28 21:43:59  №883857 137
>>883849
а фрилансер 300/сек?
Ответы: >>883865
Аноним 2016/11/28 21:50:01  №883863 138
>>883842
>Ребят, есть интересный вопрос. Какой самый тяжелый этап в изучении программирования? Может есть какая-то тяжелая тема, или тяжелый этап это теория и тд.
Архитектурные всякие дела, ну и всякие алгоритмы сложные. Если освоишь это - считай ты понял программирование как таковое.
Аноним 2016/11/28 21:51:01  №883865 139
>>883857
Что бы стать таким фрилансером надо сначала минимум пару лет бичпакетами питаться.
Аноним 2016/11/28 22:24:49  №883894 140
Как вызвать функцию у объекта некоторого класса, который является элементом массива? PHPSTORM при операции
$x = $somearray[$i]->SomeFunction();
ругается, что не найдена функция SomeFunction();
Я так понимаю, надо кастовать элемент массива к классу, и потом только вызывать функцию?
Ответы: >>883909 >>885119
Аноним 2016/11/28 22:43:58  №883909 141
>>883894
> $x = $somearray[$i]->SomeFunction();
Ничего кастовать не нужно, такой код должен работать, если в массиве под индексом $i действительно есть объект с методом SomeFunction().
Ты лучше вбрасывай код на ideone, а не рассказывай что там IDE показывает. IDE не знает, что добавится в массив во время выполнения программы.
Можно использовать докблоки для помощи IDE: http://stackoverflow.com/a/29999292
Аноним 2016/11/29 00:11:27  №883980 142
Вопрос по задачке из курса.
"W5.2 Некто кладет в банк 10000 р. Банк начисляет 10% годовых (то есть, каждый год на счету становится на 10% больше, чем в прошлом году). Напиши программу, считающую, через сколько лет в банке будет миллион? Сколько лет будет этому некто? Доживет ли некто до этого дня, если сегодня ему 16 лет?"
Решаю так:

for ($l=1000;$l<1000000;$l=$l+$l*0.1) {
echo "l=$l\n";
}

Получаю столбец результатов.
Собсн вопрос: как вывести в конце число строк (лет)?
И является ли решение правильным, если крайнее число в столбце равно l=955593.81772732 ?
Ответы: >>883982 >>885119
Аноним 2016/11/29 00:14:15  №883982 143
>>883980
Фикс.
for ($l=1000;$l<1000000;$l=$l+$l*0.1) {
echo "l=$l\n";
}
Ответы: >>884036
Аноним 2016/11/29 01:50:33  №884036 144
>>883982
зачем кучу раз выводить, сколько денег и когда?
невыводи ничего, а сделай counter на года типа кол-во год депозита ++
for ($l=1000;$l<1000000;$l=$l+$l0.1) {
$goda ++;
$babki =$l;
}
if $babki<1kk {
$goda ++;
$babk=$babki+$babki
0.1
}
echo $goda;
echo $babki;
это хоть и говнокод, но получше твоего варианта
Ответы: >>884250 >>885119
Аноним 2016/11/29 11:09:59  №884130 145
>>880700 (OP)
Девушка с оппика позожа на мою коллегу просто 1 в 1!
Аноним 2016/11/29 16:03:56  №884250 146
>>884036
Код не пашет даже после исправления опечаток. Я только начинаю, не мог бы подробнее расписать что к чему? Просто ума не приложу что делает вот эта команда "$goda ++;" (ну кроме того что с каждым разом эта переменная должна расти) во второй строке, этой переменной даже начальное значение не присваивалось, не говоря уже о том, что она никак не связана с основным вычислением.
Ответы: >>884272 >>885119
Аноним 2016/11/29 16:59:09  №884272 147
>>884250
<?php
$goda =0; //ставишь сколько изначально лет вкладчику этк. это входное значение годов.
for ($l = 1000 ;$l < 1000000; $l=$l+$l0.1) {
$goda ++;
$babki =$l;// после конца цикла переменная $l превратится в тыкву(на нормальных языках, на пхп останется, собственно этот костыль необязателен)
}
if ($babki < 1000000) {// при значении меньше 1кк цыкл выше перестает работать, потому как делать надо было через do while, фиксим это проверкой, если мы вышли из предыдущего цыкла, а бабки меньше ляма, нада еще на 1 год оставить на депозите.
$goda ++ ; //увеличит на 1 значения года
$babki = $babki + ($babki
0.1) ; //добавит бабки заработаные за этот дополнительный год
}
echo $goda;
echo $babki;
?>

Ответы: >>884298 >>885119
Аноним 2016/11/29 17:47:09  №884298 148
14804308292600.jpg (98, 807x900)
900x807
>>884272
Нихуя не понимаю.
Ответы: >>884303
Аноним 2016/11/29 17:53:17  №884303 149
14804311973660.jpg (106, 811x872)
872x811
>>884298
Так лучше, но почему у автора ответ 42?
Ответы: >>884329 >>885119
Аноним 2016/11/29 18:30:05  №884323 150
Почему так много заданий, связанных с регулярками в стартовом гайде ? Решил все задачки со страницы "регулярные выражения", уже тошнит от них. В надежде на что-то более интересное перехожу на страницу "повторим", а там снова они.... То, что это офигенно мощный инструмент я понимаю, но неужели он настолько часто используется в реальной работе, что нужно их настолько задрачивать ?
Ответы: >>884393 >>885119
Аноним 2016/11/29 18:38:20  №884329 151
>>884303
Потому-что у тебя неправильное решение например.
Аноним 2016/11/29 19:51:39  №884393 152
>>884323
Почему ^[+7|8][ --()]{1,}[0-9]{10}$ не пашет?
Аноним 2016/11/29 19:58:13  №884396 153
решаю задачки. возникла проблема со стихом
http://codepad.org/JrKDe8It
выводит 2 раза одно и тоже, а надо чтобы разное.
Ответы: >>884402 >>885119
Аноним 2016/11/29 20:07:01  №884402 154
>>884396
Сначала первую строку выводишь, затем рандомишь опять и снова выводишь
Аноним 2016/11/29 20:19:48  №884415 155
Ответы: >>888303 >>892266
Аноним 2016/11/29 20:59:14  №884454 156
Ответы: >>894463
Аноним 2016/11/30 10:01:46  №884795 157
В старом треде я проверил все посты. Если кого-то пропустил - напомните о себе тут.

Вот, в частности, последние ответы:

>>884783 - тут https://bitbucket.org/learningacc/file-downloader/
>>884472 - про аякс и почему не работает класс alert-success
>>884470 - про ООП, и что значит атрибут form action
Аноним 2016/11/30 12:28:37  №884867 158
Аноним 2016/11/30 13:41:12  №884908 159
Вопрос по задачкам. Задача на палиндром. Нашел вариант с strrev для кириллицы. Подходит ли такое решение или думать еще?
https://web2033.com/strrev-php/
Ответы: >>884924
Аноним 2016/11/30 13:59:29  №884924 160
>>884908

Нет. Программа должна вывести, является ли слово палиндромом или нет. Программа по ссылке этого не делает.

Также, код избыточен и его можно упростить.
Ответы: >>884939
Аноним 2016/11/30 14:16:49  №884939 161
Ответы: >>885033
Аноним 2016/11/30 15:33:58  №885027 162
Скажите, вот с помощью пхп можно записать на комп экзешник, а как сделать, чтобы он самозапустился?
Ответы: >>885037 >>885041
Аноним 2016/11/30 15:38:46  №885033 163
>>884939

Ты можешь объяснить, какие недостатки имеет используемый тобой подход? Ну например, будет ли работать проверка на палиндром для любого текста в кодировке utf-8 или не для любого? Если нет, то для каких входных данных программа будет работать правильно?

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

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

> function strrev_enc($text2)
Надо писать названия не через подчеркивания, а кемел кейсом. Название функции желательно начинать с глагола. Переменную надо назвать не text2, а просто text, так как в этой функции нет text1 и это просто выглядит нелогично.

Аноним 2016/11/30 15:43:23  №885037 164
>>885027

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

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

Если ты хочешь писать консольные скрипты (или тем более десктопные программы), которые надо запускать без PHP, я бы советовал использовать другие языки. Для десктопных программ хорош C# (но ему нужен дотнет) или Java (тоже надо сначала саму Яву ставить), еще можно писать на C++, но это намного сложнее и неудобнее.

Для консольных программ можно использовать Го, но не уверен, что у него все хорошо с поддержкой винды. Он в первую очередь на Линукс ориентирован.
Ответы: >>885053
Аноним 2016/11/30 15:46:40  №885041 165
>>885027

Или я не понял вопрос и ты просто хочешь чтобы Апач с PHP в составе запускался сам при загрузке ОС? Тогда достаточно просто добавить Апач как службу.

Чистый PHP самозапускать немного странно - зачем? Если ты используешь его как сервер, то можно записать код запуска сервера в bat-файл и перетащить этот файл в раздел "автозагрузка" в меню Пуск -> Программы.
Ответы: >>885053
Аноним 2016/11/30 15:56:04  №885044 166
>>881470

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

- зафиксировать максимальную ширину содержимого (например 1200-1400px), если окно шире то центрировать содержимое, добавив поля с краев
- на ширине от ~600-800 до максимальной - сделать верстку резиновой, чтобы содержимое растягивалось на эту ширину. Ну например, блок с картинками может на узкой ширине превращаться в 3 колонки вместо 4, а на большой - в 5.
- на ширине меньше 600-800 переходить на мобильную верстку - обычно там все содержимое выводится в 1-2 колонки

Вот в помощь таблица размеров экранов мобильных устройств: http://mydevice.io/devices/

Если ты не знаком с адаптивной версткой, то погугли "примеры адаптивных сайтов", или просто используй кнопку "тестирование адаптивной верстки" в инструментах разработчика в Хроме/ФФ (Ctrl + SHift + I).

> Шапка высотой 200px на экране с большим разрешением -- смех, а буквы не читаются: как исправить?
Почему не читаются? Они довольно большие в макете. И как на этом экране выглядят другие сайты, например Хабр?

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

>>не используй <a href="#" или <a href="javascript:void(0)" никогда. Для этого есть кнопки или <span>
Ссылка должна куда-то вести, то есть в href должен быть указан URL. Ссылку можно открыть в новом окне, скопировать. Если ты не можешь указать URL - у тебя не ссылка. Скорее всего у тебя кнопка, для которой есть тег button.

Если есть какие-то еще вопросы - задавай.
Аноним 2016/11/30 16:12:20  №885053 167
>>885041
>>885037
Нет, я с помощью пхп хочу создать и записать на компе юзера ехе файл. Это можно сделать, вот только как его запустить - не знаю. Можно сделать так, чтобы юзер кликнул на этот файл, но как сделать шоб .ехе файл запустился без клика.
Ответы: >>885120
Аноним 2016/11/30 16:34:00  №885072 168
>>881635

Выражение в if (а также в for, while, switch) всегда должно быть заключено в скобки, так что второй вариант неправильный.

>>881676

Я из скриншота вижу, что правило в файле uploader-master.css перекрывает правила в бутстрапе. Приоритет у них равный, скорее просто причина в том что тот файле позже подключен.

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

>>881710

Тебе надо вместо $i <= 10 написать кое-что другое.

>>881722

У тебя в коде есть ошибка. Условие $b < 10 проверяется в первый раз до того, как переменная будет создана, и происходит ошибка обращения к несуществующей переменной.

Также, условие фактически проверяет значение переменной с предыдущего шага. То есть сначала выводится 4x4 = 16, а только потом идет проверка и обнаруживается, что из цикла пора выходить. Посмотри в моем учебнике картинку с порядком выполнения цикла.

>>881760

Код для любых слов пишет, что это палиндром: http://ideone.com/Uw7SWV

Ведь фактически ты проверяешь только средние 2 буквы. У тебя в коде вообще нет слова "не палиндром".

>>881835

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

Ответы: >>886803
Аноним 2016/11/30 16:41:47  №885080 169
>>882704

> Я про то, что POST теряется пока до модели доходит. И не могу понять почему.
Ставь везде var_dump и смотри, в каком именно месте данные теряются. Если у тебя IDE, то можно попробовать настроить и использовать отладчик, чтобы пройти код по шагам.

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

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



Аноним 2016/11/30 16:51:08  №885086 170
>>882712

Проверь с помощью var_dump, что в переменных ($_FILES и других). Проверь, что возвращает функция move_uploaded_file и прочти мануал по ней, а также это целиком: http://php.net/manual/ru/features.file-upload.php

Открой отладчик в браузере (Ctrl +Shift + I) и проверь на вкладке Network, отправляется ли файл вообще.

Проверь лог ошибок PHP, нет ли ошибок.

> ничего не возвращает
Что значит "ничего"? Проверь с помощью var_dump что именно.

>>882731

Что значит "у нас"? Кривой код у тебя, а не у нас.

>>882737

Надо реализовать ArrayAccess.

>>882741

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

>>882762

2017 год рано писать.

>>882958

Твой вопрос неудачно сформулирован. Что значит "можно"? В теории на PHP сделать такое можно, на практике не факт что есть нужная библиотека. Ну например, под виндой можно использовать утилиту pskill или как-то так от Русиновича. Но это уже не совсем PHP.

>>882963

Нет. Ты вызываешь функцию N раз, передавая ей 1 аргумент, а надо вызвать 1 раз, передав все аругменты.

Ты почитал про apply() и call() ? Сделай-ка пример кода для каждой функции, если не пробовал.

>>882978

Откуда ты пытаешься прочитать эти директивы? Куда ты пытаешься вывести их названия? В браузер?

В браузере воспринимаемая кодировка зависит от тега meta charset и HTTP заголовка Content-Type.




Аноним 2016/11/30 16:56:11  №885089 171
>>883042

Базы данных в конечном итоге тоже хранят данные в файлах. Где тут выигрыш? Разве что могут быть накладные расходы на передачу данных из приложения в СУБД по сети.

Я думаю, что "super fast" это маркетинговое заявление. Там есть примеры тестов, показывающих разницу в скорости с обычными СУБД? Нет. Ну а слово "super fast", как ты понимаешь, может значить что угодно.

Я не сравнивал, но Бд вроде MySQL не медленные, я добивался там тысяч вставок в секунду при грамотном использовании, Бд поддерживают язык SQL , транзакции, параллельный доступ. Я сильно сомневаюсь что самописный движок на PHP будет работать лучше чем отлаживаемый годами профессиональный продукт.

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

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

Аноним 2016/11/30 17:04:44  №885101 172
>>882999

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

>>883087

Изучи, чем отличается от PHP5, что нового, какую выгоду это дает.

>>883104

Забили на нее. Если у тебя андроид 2-летней давности то хипстеров твои проблемы не волнуют.

Я конечно советую пока писать на ES3.

Также есть транспайлеры, которые могут транслировать код в более раннюю версию, но они пока умеют только превращать ES6 -> ES5. Никто не хочет попробовать в ES3 транспайлер написать? Тут конечно надо понимать, что часть кода все равно преобразовать не удастся.

>>883199

Стену кода тяжеловато читать, инициализацию стоило засунуть в функцию.

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

socket_close может выдать ошибку.

> $buf = trim($buf);
> if ($buf == "\r\n") {
Это никогда не сработает. Догадайся, почему.

Советую не требовать наличия \r для совместимости с теми кто использует только \n (но при этом слать \r\n в ответе).

Аноним 2016/11/30 17:09:32  №885107 173
>>883199

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

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

>>883206

Нет, но можно написать цикл, либо array_filter, либо использовать array_reduce с анонимной функцией.

>>883310

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

>>883410

А как еще хранить набор объектов, если не класть их в массив? Ну например, список новостей?


Аноним 2016/11/30 17:21:55  №885119 174
>>883466

Можно составить индекс (список всех путей) заранее и искать в нем.

>>883563

http://php.net/manual/ru/language.oop5.paamayim-nekudotayim.php
http://php.net/manual/ru/language.oop5.basic.php

это из ООП. Изучи его сначала.

>>883621

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

Я не думаю, что тут будет 1 строка. Я обычно исплоьзую Symfony Process для запуска внешних команд, а тут выгоднее написать все на PHP.

>>883720

Тут нужен именно иф, сокращать нечего, код станет хуже читаемым.

>>883745

Отвител тут >>884790

>>883810

Надо полностью прочесть этот раздел http://php.net/manual/ru/language.references.php

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

>>883894

Класс не может быть элементом массива. Правильно писать "объект класса X хранится в массиве/является значением элемента массива"

Твой код должен работать.

Кастовать объекты нельзя.

>>883980

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

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

>>884036

Не надо писать переменные русскими словами. Используй Гугл транслейт.

Иф в коде лишний - зачем он?

>>884250

$x++ равносильно $x += 1 или $x = $x + 1

>>884272

Иф не нужен.

>>884303

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

>>884323

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

Пригодятся они не раз. даже в редакторе кода в поиске их можно использовать.

>>884396

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

Аноним 2016/11/30 17:24:01  №885120 175
>>885053

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

Ну и это плохая идея, писать инсталляторы на PHP. Есть гораздо более подходящие для этого средства.
Ответы: >>885351
Аноним 2016/11/30 18:30:53  №885155 176
"Внедрение зависимости (англ. Dependency injection, DI) — процесс предоставления внешней зависимости программному компоненту. Является специфичной формой «инверсии управления» (англ. Inversion of control, IoC), когда она применяется к управлению зависимостями. В полном соответствии с принципом единой обязанности объект отдаёт заботу о построении требуемых ему зависимостей внешнему, специально предназначенному для этого общему механизму[1].

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


Перечитываю и перечитываю раз за разом, это какой-то мертвый язык? Как это можно понимать вообще?
Ответы: >>885192
Аноним 2016/11/30 19:46:17  №885192 177
>>885155

Почитай у меня: https://github.com/codedokode/pasta/blob/master/arch/di.md

Или у Фаулера (он очень умный) (англ): http://www.martinfowler.com/articles/injection.html
Перевод не очень читабельного качества: http://yugeon-dev.blogspot.ru/2010/07/inversion-of-control-containers-and_21.html

Также предлагаю, если есть желающие, составить нормальное определение для Вики, желательно опирающееся на труды Фаулера.

Ответы: >>885761
Аноним 2016/11/30 20:33:03  №885216 178
Привет, я снова на связи

переделал 13 задачу по JS: http://ideone.com/7lG98j

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

>> @param {сonst} timesOfDay - Константы класса DepartmentOfEnergy
>Мне стало интересно, а можно ли описать как-то что тут константы, с помощью jsdoc? Я нашел такое:

>- http://usejsdoc.org/tags-enum.html
>- https://github.com/jsdoc3/jsdoc/issues/629

>Но это по моему все не то. В TypeScript вроде есть enum для этого.

Для обозначения констант решил сделать так:
* @param {(PowerDepartment.DAY|PowerDepartment.NIGHT)}
Так как, данная конкретная константа сама по себе является новым, определенным типом данных,
я указываю ее название в качестве этого типа данных. А варианты показаны как Multiple types (type union) http://usejsdoc.org/tags-type.html
Хотя, если констант больше двух, запись будет очень длинной. Но зато, название константы сообщает о том, что она константа, и дополнительно то, в каком месте кода она объявлена. А ее значение {string}, не важно для метода класса, который с ней непосредственно работает, т. к. значение может поменяться в том месте, где она объявляется, без нарушений в работе данного метода.


Аноним 2016/11/30 20:58:30  №885240 179
Что то торможу, что значит в Yii2 вот это \Yii это же не псевдоним который должен начинаться с @?
Аноним 2016/11/30 21:39:52  №885262 180
В общем я походу совсем деградировал, только начал, и сразу затрял.
Не могу понять как решить задачу с годовыми процентами.
http://ideone.com/wmAd6C
Намекните что делать.
Ответы: >>885307
Аноним 2016/11/30 21:42:20  №885263 181
Может кто пояснить неофиту следующий аспект работы с PDO:
что происходит при использовании следующей конструкции:
http://ideone.com/IYyjOd

Вот я создал database handler, и вот мне нужно запросить с БД х строк из представления. На W3schools я прочел, что в контексте работы с БД рекомендуется запрашивать хэндлер подгатавливать некий стейтмент (чё вообще возвращает DBH->prepare()?), после чего указанный в prepare() запрос компилируется на сервере
и тут вопрос номеро один: только компилируется запрос, не подгатавливаются никакие данные? Сколько потом на сервере хранится скомпилированный скрипт, и вообще, важно ли это, что он там хранится с какой либо другой точки зрения, кроме как серверу не придется парсить текст запроса и компилировать запрос по новой и той, что подготовленные запросы якобы уменьшают риск сикуль инъекций?
Далее, вот есть объект, возвращенный prepare()'ом - некоторый statement. Далее, на w3schools'е в примерах его тут же вызывали через
$statement->execute();
тут вопрос нумеро дос. Что происходит при вызове execute()? Интуитивно из названия функции мне казалось, что execute() тут же выполняет подготовленный запрос в БД и, следовательно, если это селект-запрос, то сервер тут же предоставляет мне информацию в полном объеме
Но тут я наткнулся на $statement->fetch(...)
И здесь вопрос нумеро трес - что происходит при вызове функции fetch()? Как я понял, считывается одна строка из результирующей таблицы, ну и интерпретируется в соответствии с аргументами. Но что происходит с точки зрения взаимодействия с БД? fetch каждый раз обращается к БД за очередной строчкой, или извлекает из результата работы (не возвращаемого значения) $statement->execute() строку?

И ещё, если после $statement->execute() данные всё таки в полном объеме берутся из БД, то где и как они хранятся после этого, когда удаляются?
Ответы: >>885391 >>885402
Аноним 2016/11/30 23:22:30  №885307 182
>>885262
а как же основной баланс?

Аноним 2016/12/01 00:52:14  №885337 183
Объясните, пожалуйста, это:

function test_global_ref() {
global $obj;
$obj = &new stdclass;
}

>$obj = &new stdclass;
Что, черт возьми, это значит?
Я понимаю, что "$obj = new stdclass;" - это создать экземпляр класса и присвоить его переменной $obj. Но если перед new стоит &, как это понимать? Ссылка на экземпляр класса? Но ведь он еще не создан и ничему не присвоен.
Пример взят из справочника с php.net.
Ответы: >>885366
Аноним 2016/12/01 01:08:31  №885351 184
>>885120
Я тебе еще раз объясняю, с помощью пхп я смогу создать на компе юзера файл с расширением ехе, который будет написан на крестах или шарпе. Вопрос как с помощью пхп или того яп, на котором он написан, сделать, чтобы файл с расширением ехе самозапустился. Или ты других яп кроме пхп не знаешь?
Ответы: >>885366
Аноним 2016/12/01 01:22:35  №885366 185
>>885337

Это ссылка и я подозреваю, что это устаревший пример кода, так как в PHP5 объекты передаются как бы по ссылке и & не нужен:

- http://php.net/manual/ru/language.references.php
- http://php.net/manual/ru/language.oop5.references.php

>>885351

Но что тебе мешает сделать нормальный инсталлятор? Некоторые программы позволяют создать инсталлятор даже без программирования. Я не вижу смысла городить какую-то сложную схему с установкой PHP, затем установкой через него программы - это слишком переусложнено.
Ответы: >>885372
Аноним 2016/12/01 01:27:51  №885372 186
>>885366
огоспади. смотри, я вешаю скрипт на сервер в публичный доступ. сторонний юзер переходит по ссылке и у него на компе (не на моем) создается файл екзешник. теперь мне надо чтобы у него на компе этот файл самозапустился. не на моем. грубо говоря, вирусняк хочу через ссылку юзеру закинуть.
Ответы: >>885373
Аноним 2016/12/01 01:31:15  №885373 187
>>885372

Тогда уходи. Наш тред не для создателей вирусов. Ну и дополню, чтобы ты не тратил время, юный вирусописатель, что с помощью PHP екзешник ты создать можешь разве что на сервере.
Ответы: >>885379
Аноним 2016/12/01 01:31:27  №885374 188
ОП ответь на regex, плис
Ответы: >>885391
Аноним 2016/12/01 01:34:55  №885379 189
>>885373
не правда, я могу создать файл с помощью fopen и присвоить ему расширение .ехе. Причем на компе у того, кто открыл ссылку
Ответы: >>885391
Аноним 2016/12/01 01:48:24  №885384 190
я слишком ахуел с таким решением задачи?
for($age=16, $money = 10000;$money<1000000;$age++,$money+=$money*0.1){

}
echo $age."\n";
echo $money;
Ответы: >>885986
Аноним 2016/12/01 02:04:48  №885391 191
>>885379

Перечитай теорию про то, как взаимодействует браузер и сервер.

>>885374

А номер поста?

>>885263

Для начала почитай мануал по PDO::prepare http://php.net/manual/ru/pdo.prepare.php

Там написано, что возвращается объект PDOStatement.

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

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

Но важно знать, что PDO поддерживает 2 вида подготовленных запросов - настоящие, реализуемые с помощью БД, и эмуляцию, когда ничего не подготавливается, а просто PDO сам подставляет в запрос знаечния и отправляет на сервер. Эмуляция используется если сервер БД не поддерживает подготовленные запросы или поддерживает, но не полностью. Эмуляцию можно включить опцией принудительно и тогда ничего сохраняться естественно не будет. Также, как я помню, MySQL поддерживает только плейсхолдеры-вопросики и с двоеточиями автоматически включается эмуляция.

Далее нам надо обратиться к документации MySQL. MySQL включает в себя как сервер (отдельная программа), так и клиентскую библиотеку. В случае PDO, в PDO встроена нужная клиентская библиотека (но не та, что распространяется с MySQL, а своя, совместимая, написанная, чтобы не зависеть от владельца MySQL). Соответственно, имеет смысл почитать документацию по MySQL, либо по серверу, либо по клиентской библиотеке.

Идем на сайт MysQL: http://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html

Видим там пункт "Prepared Statements in Application Programs" - это как раз наш случай, речь о подготовке запроса клиентом. Конечно, там описана поставляемая с MySQL библиотека-клиент, но я думаю что та что в PHP работает аналогично. По крайней мере она использует тот же протокол и серверный код одинаков. Идем по ссылке и находим статьи

1) http://dev.mysql.com/doc/refman/5.7/en/c-api-prepared-statements.html
2) http://dev.mysql.com/doc/refman/5.7/en/c-api-prepared-statement-problems.html

Открываем 1 и там мы видим " For more information, see Section 9.10.4, “Caching of Prepared Statements and Stored Programs”." и снова идем по ссылке http://dev.mysql.com/doc/refman/5.7/en/statement-caching.html

Видим: "The max_prepared_stmt_count system variable controls the total number of statements the server caches. (The sum of the number of prepared statements across all sessions.)" - то есть есть ограничение на общее число закешированных в памяти подготовленных запросов. Можешь просмотреть эту переменную запросом SHOW VARIABLES LIKE 'max_prepared%';

> The server maintains caches for prepared statements and stored programs on a per-session basis. Statements cached for one session are not accessible to other sessions. When a session ends, the server discards any statements cached for it.

Кеш свой для каждого соединения с БД. Он очищается при отсоединении от нее.

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

Их используют в основном ради плейсхолдеров.


Ответы: >>885401 >>885405 >>885525
Аноним 2016/12/01 02:25:36  №885401 192
>>885391
сам почитай. я прямо сейчас так и делаю.
Аноним 2016/12/01 02:25:42  №885402 193
>>885263

> тут вопрос нумеро дос. Что происходит при вызове execute()? Интуитивно из названия функции мне казалось, что execute() тут же выполняет подготовленный запрос в БД
Да, в случае эмуляции PHP собирает и отправляет запрос на сервер, в случае реальных подготовленных запросов - PHP посылает только значения плейсхолдеров. Сервер начинает выполнять запрос и скорее всего возвращает какой-то идентификатор, по которому можно позже получать результаты.

Далее, возможны вариации. Сервер обычно старается вернуть данные как можно раньше, по мере выполнения запроса. Но с PHP не все так просто. Он может прочитать результат полностью, а может не дожидаться окончания и возвращать данные тоже по мере поступления. Это называется буферизация результата. Отсутствие буферизации ограничивает наши возможности: к примеру, мы не можем узнать общее число результатов и не можем вернуться к уже полученному ранее результату. Мы не можем запустить второй запрос, не дождавшись окончания первого. Но зато это позволяет обрабатывать огромные результаты, не занимая много памяти и не дожидаясь окончания запроса.

Библиотека mysqli умеет работать с небуферизованными данными ( http://php.net/manual/ru/mysqlinfo.concepts.buffering.php ). Умеет ли PDO?

Тут http://php.net/manual/ru/ref.pdo-mysql.php есть константа PDO::MYSQL_ATTR_USE_BUFFERED_QUERY. Я предлагаю тебе выяснить, работает ли она?

Выяснить, какой способ используется, можно так:

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

SELECT 1
UNION ALL
SELECT SLEEP(3)
UNION ALL
SELECT 2
UNION ALL
...

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

Попробуй потестировать, интересно, что получится.

> И здесь вопрос нумеро трес - что происходит при вызове функции fetch()? Как я понял, считывается одна строка из результирующей таблицы, ну и интерпретируется в соответствии с аргументами
При буферизации PHP прочитает весь ответ в память во время execute (я так думаю, надо проверять) и вернет ответ из памяти. При отсутствии буферизации fetch должна ждать прихода следующей строки результата от MySQL и сразу возвращать ее.

> данные всё таки в полном объеме берутся из БД, то где и как они хранятся после этого, когда удаляются?
В полном объеме в БД данные не хранятся так как это не позволяет возвращать много результатов. Как я понимаю, они шлются клиенту (в PHP), если он их не спешит забирать, то запрос приостанавливается, пока он их не примет: http://stackoverflow.com/questions/33573434/how-does-mysql-server-retrieve-and-send-data-to-clients/33573678#33573678

Сетевой протокол TCP имеет небольшой буфер и имеет обратную связь, то есть MySQL знает, сколько именно данных успешно передано в PHP, и знает, если он приостановил их прием.

Казалось бы, при такой схеме памяти много в MYSQL не израсходуется. Но не все так просто. Для некоторых запросов MySQL придется создавать буфера в памяти. Ну например, для сортировки не по индексу
мы должны выбрать все нужные данные в память mysql, отсортировать их там и только после этого можем передавать. также, огромные временные таблицы могут получаться при использовании JOIN без индексов + сортировка. Для временного хранения исплоьзуется либо буфер в памяти либо временный файл:

- http://dev.mysql.com/doc/refman/5.7/en/memory-use.html
- https://dev.mysql.com/doc/refman/5.7/en/internal-temporary-tables.html

> Most requests that perform a sort allocate a sort buffer and zero to two temporary files depending on the result set size. See Section B.5.3.5, “Where MySQL Stores Temporary Files”.
> All joins are executed in a single pass, and most joins can be done without even using a temporary table. Most temporary tables are memory-based hash tables. Temporary tables with a large row length (calculated as the sum of all column lengths) or that contain BLOB columns are stored on disk.

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

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

Ответы: >>885525
Аноним 2016/12/01 02:28:47  №885405 194
>>885391
на почте, но вот: " ^[\+]?[\ ]?(7|8)([-]?[ ]?[(]?[)]?){1,}[0-9]{10}$ почему пробел\скобка\- в номерах не ищутся между цифрами? Кучу вариантов перепробовал пиздос"
Ответы: >>885411
Аноним 2016/12/01 02:32:35  №885411 195
>>885405

Потому, что [0-9]{10} значит "10 идущих подряд цифр". Минусы и скобки у тебя разрешены только между цифрой 7/8 и второй цифрой номера.

Я советую написать так:

- 10 раз повторить: "1 любая цифра, за ней любое число минусов/скобок в любом порядке"

Кстати, у тебя заложен порядок знаков (что минус идет до пробела и до скобок). Не советую так делать. Лучше написать "любое число знаков в любом порядке". Для этого надо использовать либо квадратные скобки, либо вертикальную черту.
Аноним 2016/12/01 03:47:34  №885467 196
Ответы: >>885473 >>885499 >>885510
Аноним 2016/12/01 04:03:02  №885473 197
>>885467
$str обращается к байту строки под номером i. Юникод строка использует 2 байта для хранения символа. Поэтому выводится первые $length-1 байт сроки. Используй mb_substr например.
Ответы: >>885475
Аноним 2016/12/01 04:06:40  №885475 198
>>885473
Чет пол сообщения пропало. Ну надеюсь ты понял куда копать.
Аноним 2016/12/01 04:47:25  №885491 199
Добрый анон, можешь подсказать курсы по PHP, где за всё поясняет битард с картинками, а в конце каждой темы даёт задания вроде написания кода с кубиками или шифратором и т.д
Ответы: >>885493
Аноним 2016/12/01 05:03:09  №885493 200
>>885491

Няша, а в Оп посте нет ли случайно того, что ты ищешь?
Ответы: >>885496
Аноним 2016/12/01 05:15:05  №885496 201
>>885493
Ой лол, спасибо анон, я дебил
Аноним 2016/12/01 05:28:56  №885497 202
Есть ли компании или какие-то организации, которые берут тебя учить программированию, чтобы потом настажировать и взять к себе? Прост самому 18, времени свободного много, родители обеспечивают, хоть за нихуя готов
Аноним 2016/12/01 05:41:41  №885499 203
Аноним 2016/12/01 06:02:17  №885510 204
>>885467
$str = $text;
$length= mb_strlen($str);
Крутой код.
А почему не
$length= mb_strlen($text);

?
Аноним 2016/12/01 08:48:31  №885525 205
>>885402
>>885391
Спасибо вам (тебе?), что вы есть. Впервые в /pr встречаю такую активную помощь новеньким.
Аноним 2016/12/01 12:35:17  №885608 206
Добрый день, в общем дали один говносайт какой-то.

Зашел на фтп, слил себе папку сайт\паблик_хтмл на локалку.

сделал локальный домен, залил её туда.

Захожу значит на локальный домен - меня редиректит на основной сайт.
до index.php даже не доходит дело.

.htacess вообще удалял, всё равно редиректит.

Дошло до того, что я вырубил локальынй сервер и всё равно всё редиректит. Что это за пакость прописалась у меня?
Ответы: >>885975
Аноним 2016/12/01 13:33:36  №885630 207
Блин, объясните кто-то тупице, почему при выводе массива $matches - он выводится без изменений, которые в цикле производятся ?
http://ideone.com/ZULwK4
Ответы: >>885658
Аноним 2016/12/01 14:13:43  №885658 208
>>885630
Во-первых, твоя функция makeFirstLetterUppercase ничего не возвращает. Она принимает строку, делает её копию, изменяет эту копию и всё.
Во-вторых цикл foreach работает с копиями элементов массива $matches. То есть ты в foreach'е изменяешь копию элемента, а не сам элемент массива, следовательно все твои изменения сохраняются в копиях и на исходный массив никак не влияют. Плохой способ решения проблемы - использовать ссылки - &, выше вбрасывали где почитать о них. Способ получше - добавлять новые апперкейсные значения в другой массив. В PHP есть удобная функция array_map, но тебе наверное будет проще циклом сделать. Если ты зачем-то хочешь менять именно исходный массив $matches, то тебе нужен цикл for и обращения по индексу.
Ответы: >>885690
Аноним 2016/12/01 14:45:11  №885682 209
>>885497
Ты че, сука, думаешь тебе весь мир должен?
Просто в ахуе, таких родителей стерилизовать нужно. Нарожают бля трутней.
Ответы: >>885713 >>885970
Аноним 2016/12/01 15:00:45  №885690 210
>>885658
благодарю за ответ.
Где, кроме оф мануала можно почитать подробно про колбэк функции ?
Ответы: >>885975
Аноним 2016/12/01 15:19:53  №885699 211
14805947933250.jpg (6, 250x250)
250x250
Анонс у меня к тебе вопрос. Я не понимаю как это реализовать.
Длинный текст писал, потом подумал и решил не удалять, мало ли. В коротком тексте вроде короче и понятней
У меня некоторые проблемы с ООП и я решил попробовать реализовать получение данных через API, чтобы понять некоторые особенности этого самого ООП. Данные получаются по ссылке с непостоянным количеством параметров, которое указано в методе, и в xml.
Нужно:
1. Получить с помощью CURL файл
2. Получить объект SimpleXML и отдать его.
Это самое минимальное.
У меня есть:
Класс со всеми доступными вызовами в виде методов, ни от кого не наследуется.
Как я представляю работу:
1. Вызывается метод $api->accountData(); Это один из возможных вызовов в API.
2. Он должен взять BASE_URL(адрес api), которую я не знаю где объявить, присоединить к нему адрес конкретного метода, BASE_URL.'/account_info.xml', получить это по CURL и через SimpleXML вернуть объект с данными. Причем к ссылке должен быть постоянно подставлен id и password, которые я думаю передавать в конструктор при создании экземпляра объекта


Пока писал, продумал часть.
$api = new Api($login,$password);
Api ничего не наследует.
Такой вызов $api->get('accountData'); Возвращает просто готовую ссылку на xml, как сделать так, чтоб он возвращал объект? То есть обрабатывался тем же CURL и SimpleXML?
Ответы: >>885970 >>885971
Аноним 2016/12/01 15:41:29  №885713 212
Ответы: >>885791 >>885970
Аноним 2016/12/01 16:26:27  №885750 213
>>885497
Знакомый так устроился 1ass ковырять. Но это не программирование.
Аноним 2016/12/01 16:45:19  №885761 214
>>885192
Вот, вот оно! И почему дядьки стараются писать заумно? Оп-няшка, #спасибо_что_живой. Разжевано, понравилось, почитал еще твои статьи, кто-нибудь пробовал делать задание на браузерный проект (рассчитанный на 2-3 месяца): https://github.com/codedokode/pasta/blob/master/js/spa.md ?
Ответы: >>885970
Аноним 2016/12/01 17:07:27  №885775 215
>>885497
у нас в новосибе есть noveo среди таких, но там надо хотя бы учебник из этого треда знать да, прям блядь так и спрашивают, прошел ли ты учебник из пхп треда на дваче нет
В общем примитивы самые учишь и дуешь к ним на стажировку.
Аноним 2016/12/01 17:09:04  №885777 216
for($i = 0; $i < 10; $i++) {

if($www == true) {
echo $correctNumbers[$i];
echo "verno ";

почему перед Иф элемент массива показывает, а в иф уже нет? через foreach тоже
Ответы: >>885970 >>886054
Аноним 2016/12/01 17:36:15  №885791 217
>>885713
Так ты еще и тупой...
Ответы: >>886021
Аноним 2016/12/01 17:48:58  №885801 218
Ответы: >>885950
Аноним 2016/12/01 18:10:07  №885813 219
Господа, как мне зайти через куки манагер в соц. сеть, если мне известны куки? Я вбиваю туда куки, запускаю facebook.com, а на страницу от кук не входит и они пропадают потом из манагера.
Ответы: >>885950
Аноним 2016/12/01 19:33:30  №885850 220
не могу разобратся в регулярках, что вот тут не правильно например?
/8|(\+ *7)/
в идеале оно должно ловить начало либо с 8 либо с +, потом любое кол-во пробелов, потом 7рка?
Ответы: >>885852 >>885950
Аноним 2016/12/01 19:41:23  №885852 221
>>885850
Сейчас уже есть примерно такой регексп, не пойму только как сделать, что б любое колво пробелов черточек и дужек между цифрами не ловилось =(
^(8|(\+ *7))[0-9]{10}$
Ответы: >>885950
Аноним 2016/12/01 21:07:06  №885908 222
Откуда берётся переменная $content в yii2? Что в ней содержится?
Ответы: >>885986
Аноним 2016/12/01 21:44:08  №885926 223
Секунду назад исчез прошлый тред. Можно где-нибудь посмотреть архив?
Ответы: >>885946 >>886835
Аноним 2016/12/01 22:23:21  №885946 224
Аноним 2016/12/01 22:30:14  №885950 225
>>885850

Тут почти правильно, только нет привязки к началу строки так что он будет искать цифру 8 или + не только в начале, но и в середине.

>>885852

[0-9]{10} значит 10 идущих подряд цифр

Напиши выражение "ровно 1 минус, скобка или пробел". Затем сделай из этого "любое число минусов/скобок/пробелов в любом порядке". затем сделай "1 цифра, за ней любое число минусов/скобок/пробелов" . затем добавь, что это должно повторяться ровно 10 раз.

>>885813

заходи через логин с паролем.

>>885801

Есть. В одном из банков должно получиться около 61270. Срок выплаты по моему там 13 месяцев.

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

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

Ответы: >>886085
Аноним 2016/12/01 22:45:49  №885970 226
>>885682

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

>>885777

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

>>885761

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

>>885713

Это мусорный комментарий не по теме.

>>885699

В общем, ты мыслишь в верном направлении. Для работы с АПИ действительно удобно сделать объект, методы которого соответствуют вызовам АПИ. Единственное, что имена методов принято начинать с глагола и вместо accountData логичнее писать getAccountData(...), но и странно, что у этого метода нет аргументов - надо же указать, чьи данные мы хотим получить.

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

$apiClient = new TradingApiClient('http://www.api.dev/endpoint');

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

$apiClient->setTimeout(3);
$apiClient = new TradingApiClient('http://', ['timeout' => 3]);

Далее, у АПИ часто бывает авторизация. Как ее реализовать? Тут есть 2 варианта.

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

Ошибки в АПИ (при передаче данных итд) обычно принято показывать с помощью исключений. Разные классы исключений соотвествуют разным видам ошибок.

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

- низкоуровневый HTTP клиент
- высокоуровневый API клиент, использующий объект HTTP клиента

(когда ты начнешь писать HTTP клиент, классы запросов и ответов, тебе может придти в голову мысль что наверно такие клиенты уже написаны. И действительно, поиск выдаст тебе множество библиотек, например, Guzzle)

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

Насчет SimpleXML - я бы не советовал особо обольщаться названием simple, у него куча неудобных моментов, наверно удобнее с XML работать через DOM, хотя это твое дело.
Ответы: >>886054 >>886183
Аноним 2016/12/01 22:47:26  №885971 227
>>885699

И обрати внимание, что ты неудачно выбрал название класса.
Ответы: >>886183
Аноним 2016/12/01 22:52:16  №885975 228
>>885608

Открой инструменты разработчика (Ctrl + Shift + I) на вкладке Network. Ввведи в адресную строку УРЛ локального сайта и нажми Enter. Посмотри что появится в инструментах разработчика.

>>885690

На хабре врод было что-то https://www.google.ru/search?q=habr+php+%D0%B0%D0%BD%D0%BE%D0%BD%D0%B8%D0%BC%D0%BD%D1%8B%D0%B5+%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&newwindow=1&gbv=1&sei=N39AWMbjHILN6QSfoqLYCQ

Анонимные функции удобно использовать, когда надо передать какое-то условие, записанное в виде кода. Ну например вместе с array_map, array_filter, preg_replace_callback.

Аноним 2016/12/01 23:02:13  №885986 229
>>885384

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

>>885908

Если это переменная в шаблоне layout, то подозреваю, что в ней отрендеренный в HTML строку шаблон серединки страницы. Ты код самого Юи смотреть не пробовал и поискать там по этому слову?

>>885497

Есть. Например:

- Школа Анализа Данных Яндекса
- Java школа Дойче Банка

Подробнее https://habrahabr.ru/company/tceh/blog/250333/

Вот например про Дойче Банк (это было в 2013 году, может сейчас поменялось): https://habrahabr.ru/company/changellenge/blog/196664/

> Во время обучения каждый студент получает заработную плату в размере 100 тысяч рублей. Лучшие ученики по окончании Школы приглашаются на работу в Центр Разработки Дойче Банка.

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

При желании на Хабре можно найти отзывы тех, кто например, в ШАД учился.
Аноним 2016/12/02 00:12:21  №886021 230
>>885791
Ты очень плохой человек. И злой
Аноним 2016/12/02 02:29:53  №886054 231
Ответы: >>886059 >>886740
Аноним 2016/12/02 02:50:45  №886059 232
Аноним 2016/12/02 04:31:49  №886085 233
>>885950
>заходи через логин с паролем.
нет, мне нужно через куки)
Аноним 2016/12/02 10:58:48  №886183 234
>>885971
>>885970
Спасибо тебе за такой полный ответ. SimpleXML был выбран просто как пример. Имя Api знаю что не сильно хороший выбор, но пока это не имеет значения.
Я понял твои мысли насчет разделения и думаю действительно так и сделать, я просто не понимаю как мне использовать другие классы в моем. Мне просто создать где-нибудь вне методов объект того-же HTTP клиента и DOM? Или наследовать? Если наследовать то что? Мне нужен и HTTP и DOM одновременно. Вернее последовательно, сначала первое, потом второе.
Ответы: >>886737 >>886740
Аноним 2016/12/02 11:04:21  №886189 235
PHPч, PAMAGI.
Есть файл, в котором csv-данные. Есть задача - перенести данные в MySQL-БД. Запихиваю данные через подготовленные запросы с параметрами (пробовал как именованные, так и анонимные) посредством PDO. Всё бы хорошо, но один из столбцов в csv-файле - дата в формате "дд.мм.гггг", и эта сука постоянно делает дату 0000:00:00 (вот что то меня немного напрягает, что формат другой - не ДД.ММ.ГГГГ, как в csv-файле, а ГГГГ,ДД,ММ или ГГГГ.ММ.ДД). Так вот, вопрос - как запихать в MySQL строковое представление даты в столбец с типом Date?
Ответы: >>886193 >>886230
Аноним 2016/12/02 11:09:04  №886193 236
Ответы: >>886196
Аноним 2016/12/02 11:15:22  №886196 237
14806665225720.png (3, 85x222)
222x85
14806665225721.png (38, 975x173)
173x975
Ответы: >>886198 >>886230 >>886740
Аноним 2016/12/02 11:17:39  №886198 238
14806666592410.jpg (13, 300x200)
200x300
>>886196
php.net не читай, функцию применяй
Аноним 2016/12/02 11:20:35  №886199 239
Какие сейчас на рынке самые востребованные фреймворки?
Ответы: >>886201
Аноним 2016/12/02 11:23:29  №886201 240
>>886199
yii, laravel, symfony, 1с битрикс
Аноним 2016/12/02 12:11:43  №886230 241
Аноним 2016/12/02 13:43:45  №886274 242
Аноны, такой вопрос.
Каким образом формируются веб-странички для каждого из элементов списка?
Например интернет-магазин. Есть список товаров, для каждого товара отдельная страничка формируется. Но я так понимаю на сервере для каждого элемента не создается файл "id12344567.php", а как-то динамически туда данные идут. В какую сторону копать?
Ответы: >>886286
Аноним 2016/12/02 14:03:47  №886286 243
>>886274
Это и есть так сказать эссенция веб-разработки, и то чем мы тут занимаемся.

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

И например там есть "страничка", которая называется show_item.php в которой будет лежать скрипт, ответственный за то, что ты сказал.

Например так же у тебя есть база, в которой лежат товары, у них есть id, name, price например

Когда пользователь бегает по каталогу, ему опять же скрипт, формирует хитрые ссылки, по которым можно пройти на каждый товар.
ссылка будет вида shop.sru/show_item.php?id=123

Чувак кликает по этой ссылке, скрипт который сидит в show_item.php видит что прилетел get запрос: https://ru.wikipedia.org/wiki/HTTP#GET
(бывают и другие способы спросить что-то у сервера)

И он значит понимает (потому что программист так запрограммировал заранее), что нужно из базы спросить инфу о товаре с таким id
он отправляет в базу запрос что-то вида ВЫБРАТЬ ИЗ таблица_товаров, ГДЕ id = 123.
Прилетает ответ от базы с информацией о товаре с нужным id которая лежит в полях name и price (полей может туча)

далее скриптик берет заранее заготовленную html-ку (шаблон) и подставляет в нужные места всю информацию в этот шаблон.

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

В теории всё будет примерно так. Даже на дваче всё на этом же принципе. Посты хранятся в базе. Спрашиваешь у базы все посты такого-то треда. Он собирает их в кучу и отрисовывает тебе по порядку циклом.
Ответы: >>886353 >>886359
Аноним 2016/12/02 15:46:09  №886353 244
>>886286
Да, база есть, но я именно на могу понять как формируются отдельные странички для каждого элемента. Я могу тупо выгрузить, скажем, в индекс, табличку с базы, можно там с определенными параметрами.
Могу также допустим к тексту позиции присобачить уникальный урл(ну можно по тому же айдишнику)
Но как сделать так, чтобы кликая на этот урл я переходил бы на страничку, где отображалась конкретная информация по определенной записи?
Какой модуль копать? Или может есть какие примеры? Как ни гуглю, а найти не могу.

Или вот пример. Могу сделать блог, с добавлением записей. Но как сделать так, чтобы каждая запись была доступна отдельно? То есть получается на ходу формируется страничка, а там уже выгрузка по определённым параметрам?
Ответы: >>886453 >>886725
Аноним 2016/12/02 15:50:40  №886359 245
>>886286
А, прости, не развернулся полностью пост. Значит скрипт и шаблон. Будем копать
Ответы: >>886453
Аноним 2016/12/02 17:47:57  №886430 246
Как правильно открывать и закрывать подключения к MySQL c использованием PDO? В интернете разное пишут.

Конкретные пункты:

1) Можно ли написать класс, с помощью которого, передавая различные аргументы - опции подключения через __construct() мы будем создавать и возвращать PDO-подключения с нужными параметрами, а также закрывать их когда хотим (как раньше $mysqli->close())? Или это черезчур?

2) Если: $a = new PDO(); $b = $a; $a = null; , экземпляр подключения сохраняется, так как есть на него ссылка $b. Как реально убить подключение (ведь, возможно, у нас десятки таких ссылок разбросаны по программе).

3) Не париться, ибо все подключения завершаются по окончании скрипта (все ли?), а вручную закрывать вредно в принципе. Есть ли какие подводные камни?
Ответы: >>886721
Аноним 2016/12/02 18:31:58  №886453 247
>>886359
>>886353

ты можешь хоть самим скриптом генерировать html после того как собрал все нужные тебе данные, тупо через примерно такой вот способ:
echo '<html>';
echo '<head>';
...
и потом подставляя переменные где нужно прям в это всё
echo '<p>наименование товара: ' . $name . ' </p>;
...
echo '</body>;
echo '</html>;
//конец скрипта
?>
Но это самый примитивный способ, что бы ты просто понял как это работает.


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

//отдельный_документ-шаблон.php
<html>
.....
.....
<p>Наименование товара: <?=$item_name?></p>
...
Ответы: >>886740
Аноним 2016/12/02 23:33:21  №886623 248
Торможу и никак не могу вспомнить для чего и как применяется наследование __construct Вот например здесь http://ideone.com/vJVWeb можно через наследника спокойно задать все необходимые свойства, для чего и как используется parent::__construct ?
Ответы: >>886634 >>886725 >>886737
Аноним 2016/12/02 23:44:46  №886634 249
>>886623
если бы у тебя в родительском классе было бы больше полей/свойств, да ещё и часть из них были бы private, то тогда тебе было бы более выгодно/пришлось бы вызывать родительский конструктор, которому ты бы передал соответствующие параметры из конструктора класса-наследника.
Ответы: >>886641
Аноним 2016/12/03 00:08:59  №886641 250
>>886634
Спасибо, тебе вспомнилось
Аноним 2016/12/03 02:57:51  №886721 251
>>886430

> Можно ли написать класс, с помощью которого, передавая различные аргументы - опции подключения через __construct() мы будем создавать и возвращать PDO-подключения с нужными параметрами,
Этот класс уже написан, он называется PDO. Ему в конструктор как раз передаются параметры соединения. Зачем писать еще один?

> Если: $a = new PDO(); $b = $a; $a = null; , экземпляр подключения сохраняется, так как есть на него ссылка $b. Как реально убить подключение (ведь, возможно, у нас десятки таких ссылок разбросаны по программе).
Обычно это не делают, так как при завершении php скрипта переменные будут уничтожены. Если тебе по каким-то причинам надо сделать явное отсоединение, придется делать (или найти) класс-обертку, который будет внутри держать экземпляр PDO и сможет его уничтожить. Но я не думаю, что это так уж нужно.

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

Бывают случаи, когда приложение обрабатывает не один запрос, а много, в цикле, не умирая. Ну например приложения на Яве или на ReactPHP так работают. В таких случаях надо подсоединяться/отсоединяться от БД. Обычно для этого реализуют так называемый "пул". Пул позволяет как создавать каждый раз новое соединение, так и вместо закрытия возвращать соединение в пул и использовать позже.

Вот пример (англ) пула соединений на Яве:

http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#How_to_use

(JDBC это Ява-библиотека для взаимодействия с разными БД, напоминающая PDO)

(кстати ниже, под заголовком "And here is an example on how to configure a resource for JNDI lookups" ты можешь увидеть пример XML-конфигурации для DI контейнера в Яве).

Вот ключевое место кода на Яве:

// создаем объект настроек пула
PoolProperties p = new PoolProperties();
....
// создаем пул и задаем его настройки
DataSource datasource = new DataSource();
datasource.setPoolProperties(p);

try {
// получаем из пула новое или, может быть, старое соединение (аналог PDO)
con = datasource.getConnection();
// создаем объект запроса (аналог PDOStatement)
Statement st = con.createStatement();
// выполняем запрос
ResultSet rs = st.executeQuery("select * from user");
...
// освобождаем результат и запрос
rs.close();
st.close();
} finally {
// в любом случае (даже при выбросе исключения) закрываем соединение
if (con!=null) {con.close();}
}

Здесь con.close() либо закроет соединение, если оно одноразовое, либо вернет его в пул, если он настроен на переиспользование соединений. Переиспользование соединений используют, чтобы сэконмить время на установку. Насколько я знаю, на MySQL она и так довольно быстрая, хотя возможно, когда идет счет на миллисекунды, это имеет значение.

В некоторых языках, вроде C#, можно обойтись без ручного написания этих close(), там есть конструкция using ( https://msdn.microsoft.com/ru-ru/library/yh598w02.aspx ), которая говорит что объект нужно "очистить" при выходе из блока:

using (con = datasource.GetConnection()) {
using (st = con.createStatement()) {
...
}
}

Это упрощает код и защищает от ошибок, когда что-то забыли закрыть.

В PHP для этого вместо пулов можно использовать persistent connections. Надо помнить, что хотя ты экономишь время на установку соединения, у этого подхода есть недостатки. Что если один процесс PHP оставит соединение в каким-то измененном состоянии, например оставит незакрытую транзакцию или поменяет какую-то переменную MySQL? Может быть баг. В Яве это чуть упрощается за счет того, что там ведется учет открытых/закрытых транзакций.

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

> Не париться, ибо все подключения завершаются по окончании скрипта (все ли?), а вручную закрывать вредно в принципе. Есть ли какие подводные камни?
Никаких, так и делают. Просто это не работает, если ты обрабатываешь не один, а много запросов в цикле. Тогда тебе понадобятся пулы и явное закрытие соединения. Тут конечно в PDO отсутствие close не очень удобно и возможно стоит использовать что-то на основе mysqli.

Аноним 2016/12/03 03:11:30  №886725 252
>>886623

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

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

>>886353

- пользователь набирает в браузере УРЛ http://example.com/product/123
- браузер отправляет на HTTP сервер HTTP-запрос
- сервер запускает PHP скрипт
- скрипт смотрит на УРЛ и видит что надо показать страницу товара № 123
- он берет из БД свойства этого товара
- он берет HTML шаблон страницы и подставляет туда свойства товара
- отдает ответ в браузер

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

Прочти например это: https://github.com/codedokode/pasta/blob/master/soft/web-server.md


Аноним 2016/12/03 03:54:12  №886734 253
Какой фреймворк посоветует учить анон? Yii или Laravel?
Ответы: >>886835
Аноним 2016/12/03 04:15:19  №886737 254
>>886623

> можно через наследника спокойно задать все необходимые свойства

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

>>886183

Ты читал урок по DI? Прочитай: https://github.com/codedokode/pasta/blob/master/arch/di.md

"HTTP клиент" - это зависимость для класса Api и урок как раз разбирает, как их связать.

Наследование используют только тогда когда можно сказать "A является разновидностью B". ApiClient это не разновидность HTTP клиента или DOM и наследование тут применять нельзя.
Ответы: >>886899
Аноним 2016/12/03 04:22:03  №886740 255
>>886453

Где htmlspecialchars? Вот люди по таким примерам учатся, а потом оставляют XSS.

>>886196

С таким количество параметров удобнее использовать плейсхолдеры с двоеточием и передавать массив в execute.

>>886183

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

>>886054

> {1,}
Это то же самое, что и плюс

> ((-| )?[()]?){1,}
переусложнено. Ты можешь написать "ровно один пробел, минус или скобка"? Есть вертикальная черта или квадратные скобки для этого.

Вместо повторения выражения 10 раз надо использовать {10}.


Ответы: >>886899
Аноним 2016/12/03 10:29:19  №886803 256
>>885072
> Я из скриншота вижу, что правило в файле uploader-master.css перекрывает правила в бутстрапе. Приоритет у них равный, скорее просто причина в том что тот файле позже подключен.

Я понял. В скачаном плагине был такой же селектор, как и в бутстрапе
Аноним 2016/12/03 11:49:54  №886814 257
14807549948640.png (2, 625x26)
26x625
Скобки после скобок? Такое возможно?
Ответы: >>886835
Аноним 2016/12/03 12:46:41  №886835 258
>>886814
Конечно возможно, для этого функция должна возвращать функцию. Можно даже строить цепочки произвольной длины.
У Кантора, например, об этом написано.

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

>>885926
Ещё есть на архиваче: https://arhivach.org/thread/213097/
Ответы: >>886953
Аноним 2016/12/03 14:19:36  №886899 259
>>886737
>>886740
То есть его нужно создавать в классе?
Аноним 2016/12/03 15:22:21  №886953 260
>>886835
>Посмотри, на что спрос у тебя в городе
ни на что, я в мухосрани живу. Планирую перекатываться в столицы.

Хочу чтобы анон сказал с аргументами а я подчинился пусть и субъективное мнение
Аноним 2016/12/03 15:41:57  №886975 261
вот такой вот у меня регек:
^[ ]?(8|(\+ 7))(([-]|[(]|[)]|[ ])[0-9]([-]|[(]|[)]|[ ])*){10}$
Я даун или маладца?
Ответы: >>886978
Аноним 2016/12/03 15:45:19  №886978 262
Аноним 2016/12/03 15:48:31  №886982 263
Зашел на http://www.yiiframework.com/download/

хотел скачать дистрибутив себе для винды что бы научиться в халоворлд, а хуй там плавал, архивы в формате tgz, ладно няши из 7zip предусмотрели это и с их помощью можно открыть архив, но хуй там плавал и внутри был лишь TAR файл. Хотя и его вроде как можно открыть. Но блин, что это за флагман такой, который не может иметь дистрибутив под винду :(
Ответы: >>886986 >>886989
Аноним 2016/12/03 15:55:32  №886986 264
>>886982

gz - это сжатие, но gzip умеет сжимать только один файл
tar - это формат для сборки нескольких файлов в один (с сохранением имен и других метаданных), но без сжатия

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

Форматы довольно старые, им лет 20, если не больше.
Аноним 2016/12/03 15:55:59  №886988 265
Что не так, ребята? Пишет что в строке с if ошибка, но я чет не понимаю какая. http://ideone.com/fGnpUt
Ответы: >>886999
Аноним 2016/12/03 15:56:39  №886989 266
>>886982

И кстати, зачем делать дистрибутив под винду, если

- PHP в принципе кроссплатформенный и не нужна отдельная версия под винду
- на сервере обычно стоит Линукс
Аноним 2016/12/03 16:08:52  №886996 267
Аноним 2016/12/03 16:11:22  №886999 268
>>886988
Помогите ньюфагу, очень прошу.
Ответы: >>887005
Аноним 2016/12/03 16:19:41  №887005 269
>>886999
>PHP Notice: Undefined variable: totalPayed2 in /home/SWobaS/prog.php on line 28
>PHP Notice: Undefined variable: totalPayed3 in /home/SWobaS/prog.php on line 28
неопределенные переменные в строке 28, так так что же там у нас???


>$totalPayed1=credit($balance, $monthly, $percents[0], $comission[0]);
>//$totalPayed2=credit($balance, $monthly, $percents[1], $comission[1]);
>//$totalPayed3=credit($balance, $monthly, $percents[2], $comission[2]);
>echo "first: $totalPayed1 second: $totalPayed2 third: $totalPayed3 \n";

Ну всё очевидно блядь, эти переменные неопределятся потому, что должны быть определены в тех строчках которые закоменченны, элементрано.
Ответы: >>887008
Аноним 2016/12/03 16:21:07  №887008 270
>>887005
Я уже разобрался, это я сейчас редактирую код просто вот и закомментил эти строки. Все равно спасибо.
Ответы: >>887018
Аноним 2016/12/03 16:31:49  №887018 271
>>887008
Так, я сделал задачу, а где сравнить ответы? На сайте они замазаны.
Ответы: >>887027
Аноним 2016/12/03 16:48:58  №887027 272
>>887018
Если что задача про айпад из раздела "Функции".
Аноним 2016/12/03 17:01:35  №887037 273
Собираюсь в этом месяце полностью выучить пых. знаю только синтаксис + порешал пару задачек из оп-поста
Вопрос : смогу ли я через месяц обучения написать движок для имиджбода?
Ответы: >>887042 >>887270
Аноним 2016/12/03 17:03:14  №887042 274
Аноним 2016/12/03 22:33:21  №887270 275
>>887037
Сможешь, но будешь долго ковыряться и учиться в процессе написания. И это не плохо, так как практика. Только через полгода-год тебе будет стыдно за этот код.
Аноним 2016/12/03 23:34:30  №887300 276
Хочу стать back end разработчиком, что для этого знать надо?
Ответы: >>887349
Аноним 2016/12/03 23:48:37  №887308 277
Ответы: >>887348 >>887381 >>887476
Аноним 2016/12/04 00:53:30  №887348 278
>>887308
А чего расстроился? Вообще похуй что там пишут.
Аноним 2016/12/04 00:55:34  №887349 279
>>887300
знать как пользоваться гуглом
Аноним 2016/12/04 02:22:04  №887381 280
Аноним 2016/12/04 02:29:04  №887386 281
[code lang="php"] echo "hello, world"; [/code]
Аноним 2016/12/04 02:29:30  №887387 282
[code] echo "hello, world"; [/code]
Аноним 2016/12/04 02:32:43  №887390 283
Ребят, доброй ночи. Подскажите, нормально ли реализовал блокировку просроченных заказов
http://pastebin.com/mJd4vdxz
Ответы: >>887490
Аноним 2016/12/04 12:02:03  №887476 284
>>887308
Чего расстроился-то? Мы быдлокодеры, гордись этим!
Аноним 2016/12/04 12:36:28  №887490 285
>>887390
Какая-то критика на самом деле странная. Ну вот например
>Основные функции встроены прямо в интерпретатор вместе со всей поебенью, которая может «понадобиться впердь». Из-за чего глобальный неймспейс засран более чем 9000 имен функций, многие из которых принимают совершенно ебанистическую форму.
Ну и что? По моему это плюс. К тому-же у Objective-C, Swift, и С++ тоже самое, но никто не жалуется. Я уже не говорю про JAVA, где вообще можно всю программу написать вызовом стандартных функций.
>Отсутствует проверка на уровне интерпретатора типов для значений параметров, передаваемых в функции. Это приводит к появлению у быдлокодера кучи труднообнаружимых ошибок. Например, при сравнении лучше везде использовать ===. Иначе можно подхватить лулз типа такого:
>var_dump($php == "хуита");
Написал говнокод.
@
Это PHP виновато что он работает не так, как я хочу.

>Переменные по умолчанию могут быть не объявлены;
Вообще не проблема.
>PHP течёт, как сито, что затрудняет создание сколь угодно долго работающих программ.
Потому-что PHP не предназначен для написания программ. Есть C++ и C#, нет мы хотим страдать.
>Отсутствует такая кошерная вещь, как CPAN в perl, которая позволяет огромному числу разработчиков по всему миру писать новые либы в составе комьюнити. Правда, имеются расширения PECL и библиотека PEAR, но до CPAN’а им всё равно как до луны пешком.
Вообще бред чистой воды. PHP стал популярен только потому, что может в расширения, и под него написано 100500 расширений. А CPAN удобен только если им долго учиться пользоваться.
>Всё-таки отсутствует многопоточность — потоков как таковых нет
Чтобы многопоточно отдавать данные из БД одному юзеру? Что?
>Большие проблемы с реализацией utf-8.
Одна единственная проблема, в том, что он по дефолту не UTF-8 и надо явно указывать кодировки. 1 строка кода это недостаток?
Ответы: >>887554
Аноним 2016/12/04 13:21:03  №887514 286
Ответы: >>887545
Аноним 2016/12/04 13:40:48  №887545 287
Аноним 2016/12/04 13:51:39  №887554 288
>>887490

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

> Отсутствует проверка на уровне интерпретатора типов для значений параметров, передаваемых в функции. Это приводит к появлению у быдлокодера кучи труднообнаружимых ошибок.

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

В то время как в популярных языках Питон, Руби, Лисп, Яваскрипт вообще их нету. Но про них почему-то такую критику не пишут. Свое бревно не видят.

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

> Отсутствует такая кошерная вещь, как CPAN в perl, которая позволяет огромному числу разработчиков по всему миру писать новые либы в составе комьюнити. Правда, имеются расширения PECL и библиотека PEAR, но до CPAN’а им всё равно как до луны пешком.

Опять же информация устарела. Есть PECL, (старый) PEAR и новый composer. С этим как раз все в порядке.

> Большие проблемы с реализацией utf-8.
Это скорее идеология, что в PHP нет кодировки по умолчанию и разработчик должен сам везде указывать, как интерпретировать строку.

А вообще, вот набор претензий для троллинга других языков: https://habrahabr.ru/post/315152/
Ответы: >>887566
Аноним 2016/12/04 13:59:57  №887566 289
>>887554
>Вообще, там много устаревшей информации, видимо написано это лет 10 назад. Думаю, что аноны, знающие PHP, сразу видят несоответствия.
Двачую.
Аноним 2016/12/04 14:19:37  №887599 290
И мое проверьте. Задание "Пиши верно". Делал не как оп в подсказке написал, подсказку увидел только после того как сам доделал.
http://ideone.com/Mc3n1q
Аноним 2016/12/04 16:13:35  №887753 291
PHPч, расскажи мне, как разрулить следующую ситуацию:
есть код jQuery, который через ajax обращается к PHP скрипту с некоторыми параметрами посредством гет-запроса (https://jsfiddle.net/x9no97vd/1/).

Дак вот, что мне нужно сделать так, чтобы при определенном условии в ходе работы php скрипта я отсылал ошибку ajax'овой функции, причем вызывалась бы именно функция - параметр "error:" ajax-овой функции. Как это сделать? Пока что я знаю только о следующем способе обмена информацией между сервером и клиентом посредством связи PHP-AJAX: на PHP при вызове некоторо скрипта ajax'ом весь вывод от "echo 'somehtml';" попадает в параметр result у AJAX'а.
Ответы: >>887814
Аноним 2016/12/04 17:54:22  №887814 292
>>887753

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

Удобно возвращать в JSON-ответе либо поле success = true если все ок (а в поле html - HTML-код), либо такой ответ при ошибке:

{
"success": false,
"error": "....."
}

Но в твоем случае, как я понимаю, там даже не ошибка, а признак, что данных больше нет. Раз так, надо возвращать с ответом флаг "haveMore": true/false. Узнать, есть ли еще данные, просто: надо просто выбирать из БД на 1 запись больше, чем просят.

У тебя вроде нет блокировок. Что, если пользователь прокруткой отправит несколько параллельных запросов, и данные придут в другом порядке? Надо блокировать отправку запросов на время загрузки.

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

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

> $("#tableDIV").find("table").find("tbody").find("tr:last-child")
Это можно написать одним выражением. table и tbody не нужно указывать.

> '../phps/database stuff/GetTablePage.php?page='+ CurrentPage++ + "&FetchType=2"
Не стоит совмещать в одной строке увеличение переменной и сборку URL. Также вместо ручной сборки лучше параметры передавать в свойстве data функции $.ajax

> FetchType=2
Магические числа

> if (data!="")
А что если равно пустой строке? Это никак не обрабатывается.

> if (errorThrown=="ALL_DATA_LOADED")
Это еще что? errorThrown это же вроде объект исключения

Кстати, у нас есть задачки по JS и JQuery в ОП посте.
Ответы: >>887829
Аноним 2016/12/04 17:59:13  №887822 293
Учу Ларавел. В этом туториале http://laravel.su/docs/5.2/quickstart говорят создать файл app/Http/routes.php и прописывать роуты в нём. Я создал и прописал, но роуты, очевидно, не работают - ведь этот файл нигде не вызывается. Я неправильно прочитал туториал или там ошибка? Как надо сделать?
Аноним 2016/12/04 18:16:10  №887829 294
>>887814
Спасибо за совет по поводу JSON, сейчас пока ждал ответа тоже наткнулся на него в похожих вопросах на SO.
>У тебя вроде нет блокировок. Что, если пользователь прокруткой отправит несколько параллельных запросов, и данные придут в другом порядке? Надо блокировать отправку запросов на время загрузки.

Блокировку ajax'а достаточно реализовать переменной-флагом, который переключаю в false в ajax'овском параметре-функции beforesent и в true в параметре-функции complete?

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

Та це не мой каприз, так поставлена задача в лабораторной. Я думал, что было бы неплохо реализовать выгрузку лишних первых 100 строк данных из html при прокрутке вниз на 500-600 строк, ну и соответственно их обратную подгрузку при скроллинге вверх а потом посмотрел на аналогичную систему в вконтактике и подумал, что для лабораторной и так сойдёт. Будет ли такой вариант сильно плох, если в таблице не предусмотрена возможность редактирования, то есть не нужно хранить состояние измененных строк при их выгрузке?
>Это можно написать одним выражением. table и tbody не нужно указывать.
разве не лучше сужать пространство для работы each()? Она же вроде как собирает ссылки на все соответствующие html-элементы, следовательно, ей надо пробежать по всему document'у для этого, типа лишние задачи вседела тыры-пыры.

>Не стоит совмещать в одной строке увеличение переменной и сборку URL. Также вместо ручной сборки лучше параметры передавать в свойстве data функции $.ajax
це я знаю, просто только изучаю ajax, ну и реализовал все способы его использования, которые смог найти $("element").load(), $.get(),$.ajax() у jQuery, XMLHttpRequest с чистого js c различными параметрами.

>Магические числа
Вот тут не понял, типа плохой тон передавать неименованными константами какую либо информацию?
Ответы: >>887839
Аноним 2016/12/04 18:20:45  №887832 295
Ответы: >>887862
Аноним 2016/12/04 18:26:17  №887839 296
>>887829

> Я думал, что было бы неплохо реализовать выгрузку лишних первых 100 строк данных из html при прокрутке вниз на 500-600 строк

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

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

> Блокировку ajax'а достаточно реализовать переменной-флагом, который переключаю в false в ajax'овском параметре-функции beforesent и в true в параметре-функции complete?
Да.

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

> ну и реализовал все способы его использования, которые смог найти ... c различными параметрами.
Это разве все? Ты официальный мануал jQuery не пробовал открыть? Там еще куча функций и параметров.

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

Аноним 2016/12/04 18:34:38  №887848 297
>Кстати, ты тестировал на мобильных устройствах, там подгрузка будет работать?
Nyet, а что может пойти не так? Для мобильных браузеров как то иначе обрабатываются scrollTop() или document.height() и window.height() расчитываются не так, как на десктопных браузерах?

>Это разве все? Ты официальный мануал jQuery не пробовал открыть? Там еще куча функций и параметров.

я про вышеперечисленные ajax'овские собсно на http://api.jquery.com/ и смотрел. Просто, возможно, под мою задачу мне приглянулись именно те функции, сейчас уже не вспомню.
Аноним 2016/12/04 18:43:20  №887862 298
>>887832

В задаче "echo server" есть функция readSocket, как она должна работать по задумке? Я вижу там yield, как это должно использоваться?

По идее соединение не должно закрываться после передачи первой строки. echo-сервер должен постоянно возвращать обратно строки, пока соединение не закроют.

Во второй задаче, почему не используешь функции socketRead/Write из первой?

> (.*)[;\r\n]
Чтобы сделать звездочку нежадной, удобнее просто поставить после нее вопрос (а то я сначала подумал что тут ошибка и не обратил внимания на U)

> $response = preg_split('/\r\n\r\n/', $response);
Тут проще было использовать ограничение на число частей, которое есть у preg_split.

> $file = fopen(__DIR__ . '/test' . $extension, 'wb');
есть file_put_contents

Также, ты не учел что ответ может быть передаваться с кодировкой вроде Transfer-Encoding: chunked. Или это не требовалось в задании?

> while ($out = socket_read($socket, 2048)) {
Это неправильный код, так как при чтении пакета с байтом "0" он примет его за конец данных.

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


Аноним 2016/12/04 19:07:46  №887886 299
Кстати, в контексте работы с таблицами и вообще большими объемами невизуальной в плане не связанной с версткой информации, какой вариант предпочтительней в плане быстродействия если такой вообще есть:
1. На сервере подготавливать информацию в json-объект, и отсылать клиенту его, и чтобы на стороне клиента посредством JSON.Parse() распарсить json-пакет и модифицировать информацию внутри json-пакета по необходимости ну, например, в случае работы с таблицами - добавлять для каждого объекта <tr></tr>, и для каждого параметра - <td></td>
2. Прям в php подготавливать информацию и обрамлять её соответствующими html-элементами и посылать пользователю уже готовый блок html-разметки, только вставляй её в нужное место.
Ответы: >>887889
Аноним 2016/12/04 19:10:20  №887889 300
>>887886

Подозреваю, что особой разницы нет. А так, можешь сделать и сравнить.

Первый вариант называется "шаблонизация на клиенте" и на практике там просто дописать tr/td будет недостаточно. Как миниумм надо еще спецсимволы экранировать.

Аноним 2016/12/04 20:55:19  №887957 301
14808741195580.png (23, 730x236)
236x730
Что за хуйня? В PHP что, переменные, объявленные в функции не видны в if-блоках?
Ответы: >>887958 >>887974
Аноним 2016/12/04 20:59:25  №887958 302
>>887957
Ты читать не умеешь? Ясно же написано "не используется" - это значит не считывается нигде. Ты ее только пишешь, а не читаешь.
Аноним 2016/12/04 21:19:36  №887974 303
>>887957

Ну и еще у тебя проблема, что ты используешь какие-то магические числа вместо констант. И еще вдобавок глобальные переменные. Да еще и большими буквами написанные.
Аноним 2016/12/04 22:15:38  №888015 304
Оп, посмотри пожалуйста мое поделие: github.com/fidnex/filehost
Аноним 2016/12/05 01:32:14  №888155 305
Есть ли в этом языке сотоны нормальный способ забить массив латинскими буквами? В C я с хз какого класса писал
for (int i = 0; i < 26; i++) alphabet = i + 65;
и оно работало.
А в php везде в ручную забивают. Как-то поуебански, не?
Аноним 2016/12/05 02:05:25  №888165 306
>>888155
Тоесть ты не знаешь способа забить автоматом, и в этом, по твоему виноват язык? Ты вообще нормальный?
>А в php везде в ручную забивают.
Где везде то? В учебнике опа 100500 примеров автоматического забивания.
Аноним 2016/12/05 03:39:24  №888179 307
ну чо здарова пыхепач, сразу с платины начну, чому я ни могу в архитектуру и патерны? Понимаю синглетон, понимаю мвс, датамаперы, актив рекорды. Но когда дело доходит до создание структуры кода, получается какая то костылепараша. Уже года три как пытаюсь раскурить, да юзал ларавели, юии, ки, могу на них сайт пилить, расширять в рамках их архитектуры по образу и подобию, но стоит попытаться свой модуль писать, тоска и уныние, этот код только в горы бросать в воду. Есть тут аноны с похожим?
Аноним 2016/12/05 03:42:26  №888180 308
>>888179
Довен, когда там тебя уже с зоны на свободу выпустят?
Ответы: >>888182
Аноним 2016/12/05 03:43:12  №888181 309
Аноним 2016/12/05 03:44:35  №888182 310
14808986750490.jpg (75, 640x1136)
1136x640
Аноним 2016/12/05 03:45:46  №888183 311
>>888155
пиздец а у меня не все так плохо походу
>>888179 - кун

Аноним 2016/12/05 04:41:12  №888192 312
CulqXhhw.png (319, 512x490)
490x512
>>888155
>забить массив латинскими буквами
>for (int i = 0; i < 26; i++) alphabet = i + 65;

Аноним 2016/12/05 08:42:03  №888244 313
14809165236660.png (48, 668x610)
610x668
Что за алгоритмы?
Ответы: >>888245
Аноним 2016/12/05 08:46:54  №888245 314
>>888244
Очевидно они хотят человека который знает О нотацию и умеет разработать или выбрать оптимальный алгоритм для поставленой задачи.
Ответы: >>888249
Аноним 2016/12/05 09:13:40  №888249 315
>>888245
>О нотацию и умеет разработать или выбрать оптимальный алгоритм
На этом месте поподробнее объяснить можешь?или информацию какую-то скинуть.
Ответы: >>888449
Аноним 2016/12/05 09:24:30  №888250 316
Аноним 2016/12/05 10:40:04  №888266 317
>>888179
ну чо пехепач, бампчик, как дальше развивацо то епт, а то скурвлюсь и пойду битрикс макакой от безысходности, выручайти. Потом сами спасибо скажите, когда мой код перенимать на поддержку будете.
Ответы: >>888267
Аноним 2016/12/05 10:42:12  №888267 318
>>888266
покури cms, modx, вордпресс. Вкатись к кому-нибудь джуниором, да задай вопросы.
разбери чужой код и посмотри как там устроено.
Ответы: >>888270
Аноним 2016/12/05 10:48:07  №888270 319
>>888267
раскуривал уже, дак чо просто копировать чужой код? точнее его логику? Был жуном, хз все отвечают абстрактно в стиле все абстрактно и зависит от ситуации.
Вротпрес помоему не самая лучшая архитектура.

Раскуривал исходники ларавели кодигнайтера юи, да там все круто, но типа как самому хотябы на 1% так же писать.
Ответы: >>888271 >>888288
Аноним 2016/12/05 10:53:04  №888271 320
>>888270
Решай задачи про файлообменник и тест.
Ответы: >>888508
Аноним 2016/12/05 11:40:55  №888288 321
>>888270
Я бы тебе обьяснил, если бы сам до этого дошел, лол.
Ответы: >>888503
someApprentice 2016/12/05 12:19:10  №888303 322
>>884415
>Напомню, что надо глянуть https://github.com/someApprentice/maintaskforlayout из >>874239 .
У меня вроде бы всё проверенно. Только сейчас начну всё исправлять из прошлого треда, так что с этим можно не торопиться.
Аноним 2016/12/05 12:35:29  №888312 323
14809305293350.jpg (33, 293x457)
457x293
14809305293361.jpg (34, 293x457)
457x293
Почему во втором случае ничего не получается?
Ответы: >>888317
Аноним 2016/12/05 12:37:36  №888317 324
>>888312
И почему в первом случае есть пробелы перед и после х, а во втором нет?
Ответы: >>888400
Аноним 2016/12/05 14:09:54  №888389 325
Помогите понять в каком формате закодированы
http://ideone.com/lpZyA8
массивы с именами text и value?

Как их декодировать в вид обычного php-массива??
Ответы: >>888399
Аноним 2016/12/05 14:14:05  №888399 326
>>888389
Попробуй unserialize($array['text'])
Ответы: >>888929
Аноним 2016/12/05 14:14:17  №888400 327
>>888317
Потому что в первом случае ты выводишь значение выражения $a x $a в переменной $b, а во втором выводишь строку "$a x $a". Переменная $b так же преобразуется в строку,потому что ты берешь её в кавычки "$b", и переменные $a, они тоже становится строкой. А в строковом значении выражения не выполняются, потому что, привычные для нас операторы, операторы, это тоже строки, т.е. просто символ, например, + или -.
Ответы: >>888420
Аноним 2016/12/05 14:31:37  №888420 328
>>888400
Что-то понял, спасибо. А можно этот пример решить без создания переменной $b?
Ответы: >>888581
Аноним 2016/12/05 15:26:30  №888449 329
14809407910250.jpg (73, 902x1200)
1200x902
Аноним 2016/12/05 16:12:00  №888475 330
Компадрес, для HTML есть какой нибудь инструмент-аналог инструмента в Visual Studio, который позволяет брать контролы из списка, накидывать их на сетку, а потом автоматически генерирует соответствующую разметку?
Ответы: >>888479
Аноним 2016/12/05 16:14:13  №888479 331
>>888475
К сожалению нету.
Аноним 2016/12/05 16:39:10  №888503 332
>>888288
и до чего же ты дошел?
Аноним 2016/12/05 16:41:15  №888508 333
>>888271
ну тип я в детстве написал еще файло объебник, говнокодище говнокодское, недавно пытался сделать коменты типа с ветвями как на хубре, у сука напилил там дата маперов , моделей, контролеров, дбконекторов, еще пару синглетонов. Сказать что я ахуел ниче не сказать бошка готова была взорваться. Я начал путаться среди этого говна и сходить с ума. Поэтому дропнул.

Как избежать такого дерьма?
Ответы: >>888510 >>888599 >>888899
Аноним 2016/12/05 16:41:47  №888510 334
Аноним 2016/12/05 17:01:43  №888524 335
Ответы: >>888579
Аноним 2016/12/05 18:24:50  №888579 336
Аноним 2016/12/05 18:28:06  №888581 337
>>888420
Конечно. Достаточно не преобразовывать выражение в строку (не ставить кавычки): echo $a + $b;
Если нужно что-то ещё вывести можно разделить с помощью разделителя . : echo "$a + $b = " . $a + $b . "\n";
Ответы: >>888622
Аноним 2016/12/05 18:44:23  №888599 338
>>888508
Решать задачи и показывать свой код в этом треде
Ответы: >>888678
Аноним 2016/12/05 19:10:35  №888622 339
>>888581
Спасибо большое, получилось.
Аноним 2016/12/05 19:59:19  №888678 340
>>888599
ы чо за фетиш у вас на чужой говнокод?
ну типа решу и чо будет дальше я просветление получу?
Аноним 2016/12/05 21:19:35  №888737 341
Господа, есть такой массив.

array (size=2)
0 =>
array (size=1)
'foo' => string 'Test' (length=4)
1 =>
array (size=1)
'bar' => string 'Test' (length=4)

Как мне проверить и вывести тру, если значения у foo и bar cовпадают?
Ответы: >>888739
Аноним 2016/12/05 21:23:41  №888739 342
>>888737
выложи нормальный код
Ответы: >>888744
Аноним 2016/12/05 21:27:57  №888744 343
>>888739
["0"=>["foo"=>"test"], "1" => ["bar"=>"test"]]
как мне проверить, что значения foo and bar совпадают?
Ответы: >>888750
Аноним 2016/12/05 21:35:31  №888750 344
>>888744
$a = ["0"=>["foo"=>"test"], "1" => ["bar"=>"test"]];
if ($a[0]['foo'] == $a[1]['bar']) {}
Ответы: >>888754
Аноним 2016/12/05 21:45:32  №888754 345
>>888750
ты дебил что ли? массив формируется динамически таких значений там может и не быть. для этого есть проверка.
Ответы: >>888759
Аноним 2016/12/05 21:54:16  №888759 346
>>888754
эт ты дебил,как ты спросил так тебе ответили, пшел нах отсюда щенок
Аноним 2016/12/05 22:56:13  №888805 347
ну чо анонасы, я докатился, буду битрикс делать вскоре, прохожу собеседование скоро. Можете обоссать, мне похуй, где тут тред зашквареных?
Ответы: >>888807
Аноним 2016/12/05 23:02:59  №888807 348
>>888805
тоже иду на собес в битрикс
Ответы: >>888812 >>888814
Аноним 2016/12/05 23:17:46  №888812 349
>>888807
пздц докатились да? Изучал пхп думал буду супер сеньером архитектором пхп, и вот сижу дрочу шляпу и ковыряю инфаблохи
Ответы: >>888841
Аноним 2016/12/05 23:21:54  №888814 350
>>888807
почаще говори про папку локал на собеседовании они это любят ты сразу в глазах чуваков гуру битрикса становишся
Аноним 2016/12/06 00:09:51  №888840 351
>>880700 (OP)
бля я не могу средствами пхп распарсить джейсон, они че прикалываются такие тестовые присылать? на жаве или жс это вообще легко библиотеками делается. пиздец какой-то уже второе такое тестовое.
Ответы: >>888872 >>888876 >>888896
Аноним 2016/12/06 00:12:08  №888841 352
Ответы: >>888873
Аноним 2016/12/06 01:30:25  №888872 353
Ответы: >>888873
Аноним 2016/12/06 01:32:46  №888873 354
>>888841
и чо там решать юзаешь >>888872
потому по масиву гоняешь лысого чекаешь, либо регулярку пилишь которая в этом жисоне ищет фу и блять бар ебаный
Ответы: >>888991
Аноним 2016/12/06 01:37:33  №888876 355
>>888840
>бля я не могу средствами пхп распарсить джейсон
>на жаве или жс это вообще легко библиотеками делается
>Библиотеками
>парсить json
>библиотеками
Лучше-бы мозги подключили вместо библиотек. Так рекурсивная функция строк на 5 всего.
Ответы: >>888892 >>888896 >>888992
Аноним 2016/12/06 01:48:02  №888892 356
>>888876
не слушайте его он тролит, надо поставить ларавель, запустить через доктрину, когда все настроите на локальном хоместед вагранте, у вас не составит парсить жсон через пхп, возможно нужно смотреть в сторону композера
Ответы: >>888893 >>888896
Аноним 2016/12/06 01:50:00  №888893 357
>>888892
>парсить json на ларавеле
>без композаре и элокента
Толсто.
Ответы: >>888896
Аноним 2016/12/06 02:13:05  №888896 358
>>888840
>>888893
>>888892
>>888876

Прекратите флуд. Ваши даунские шуточки уровня 7Б и демонстрация неграмотного правописания не интересны и не соответствуют тематике треда.
Ответы: >>888899 >>888901
Аноним 2016/12/06 02:33:56  №888899 359
>>888896
тогда ответь на это
>>888179
>>888508
или только можешь кукарекупокпок?


Аноним 2016/12/06 02:44:01  №888901 360
14809814412650.jpg (69, 534x424)
424x534
>>888896
>уровня 7Б
если тебя твои однокласники из паралельного 7б загнобили это не повод тут высказывать свое недовольство бедненький, смирись тряпка
Аноним 2016/12/06 07:08:29  №888929 361
>>888399
это не работает, там видно на глаз что это массивы зашиты в строках, но формат какой-то странный. Всё еще нужна помощь.
Ответы: >>888930 >>888931
Аноним 2016/12/06 07:09:57  №888930 362
Ответы: >>888933
Аноним 2016/12/06 07:19:15  №888931 363
>>888929
Что ты делаешь няша? Ну есть же jsondecode. Гугли и юзай.
Ответы: >>888933
Аноним 2016/12/06 07:21:54  №888933 364
Ответы: >>888935
Аноним 2016/12/06 07:25:39  №888935 365
>>888933
Ты декодируешь не JSON. А просто string текст.
Ответы: >>888937
Аноним 2016/12/06 07:33:24  №888937 366
>>888935
спасибо, разобрался, костыль который мне пришлось применить:
$json = "{" . $string . "}";

- это конечно же кек.
Ответы: >>888938
Аноним 2016/12/06 07:36:10  №888938 367
>>888937
Внезапно. Но примерно это я и имел ввиду. Хоть и не думал что это так повернётся у тебя в коде. Удачи.
Аноним 2016/12/06 07:55:13  №888944 368
Принес вам еще задачку, с которой обосрался на собеседовании.

В общем условие такое.

На вход подается массив монет.
Монет может быть от 0 до 10, номинал монет может быть от 1 до 9, монеты могут повторяться, то есть входной массив может выглядеть: 1,2,2,3,7 например.

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

Например, если у нас есть монеты 1,2,5, то ответом должно быть 4. Потому что суммы в 1,2,3 - можно оплатить имеющимися монетами, а вот что бы оплатить 4, то придется дать 5, и получить сдачу 1.

Если есть монеты 2,5, то ответ должен быть 1.

В галере в котрую я ходил нужно такое решить "на бумаге" То есть пишешь код без гугла по памяти и без возможности запускать скрипт, и у тебя всё должно сразу заработать считаю это тупостью, ну да ладно, ведь ца такой конторки как раз студенты-олимпиадники. Дерзайте.
Аноним 2016/12/06 07:57:23  №888945 369
>>888944
>которую нельзя оплатить этими монетами без сдачи.
Я не понял условия. Что оплатить то?
Ответы: >>888949
Аноним 2016/12/06 08:00:48  №888949 370
>>888945
> Что оплатить то?
минимальную положительную сумму, которую нельзя оплатить этими монетами без сдачи.
Ответы: >>888950
Аноним 2016/12/06 08:03:42  №888950 371
>>888949
Если я оплачиваю товар за 6 рублей, я плачу 6 рублей без сдачи. Очевидно же. Откуда мне знать будет сдача или нет, если я не знаю цену товара?
Ответы: >>888952
Аноним 2016/12/06 08:08:19  №888952 372
>>888950
речь в этой задаче не о цене покупки, а о том что у тебя есть мелочь в кармане, и ты приходишь в киоск на котором висит табличка "НЕТ СДАЧИ, ВООБЩЕ"
И ты смотришь на товары, все все они стоят от 1 рубля до бесконечности по нарастающей. И должен назвать мне первый товар, который ты не сможешь купить на свои монетки, потому что у тебя нету нужной комбинации, понимаешь???
Ответы: >>888953
Аноним 2016/12/06 08:11:36  №888953 373
>>888952
>все они стоят от 1 рубля до бесконечности по нарастающей.
Тогда в киоске есть все цены, на любое количество денег без сдачи.
Ответы: >>888954
Аноним 2016/12/06 08:14:28  №888954 374
>>888953
да, но у тебя например в кармане есть монетки с номиналом в 1, 2 и 5.
И ты должен мне сказать, что не можешь купить хуйню за 4 рубля. Потому что из твоих монет можно скомбинить только 1,2,3,5,6,7,8 ясно?
Ответы: >>888956
Аноним 2016/12/06 08:22:02  №888956 375
>>888954
Как ты определил что я не могу купить хуйню за 4 рубля а не за 8? Я не понимаю.
Ответы: >>888959
Аноним 2016/12/06 08:26:46  №888959 376
>>888956
ты не можешь купить за 4, 9, 10, 11...
но ты должен назвать минимальное из этих.
В общем мне кажется что ты толстишь, так что больше я на твои вопросы не отвечаю, думай сам. Если ты тебе надо настолько разжевать задачу, то иди решай лучше учебник опа уебок жирный
Аноним 2016/12/06 08:28:56  №888962 377
>>888944
иди ты нахуй с такими задачами уровня ебанутой /b/изнес логики, за решение и расшифровку таких задач бабло должны платить. Постоянно такое встречается, Хотим чтобы скидка была у каждого третьего товара притом что каждый 4 товар имел уменьшеную скидку от предыдущего товара на 3 процента. Плюс вычитать ндс когда полнолуние и марс заходит за юпитер.

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

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

Да пригорело у меня знатно сука.
Ответы: >>889542
Аноним 2016/12/06 09:55:50  №888991 378
>>888873
Аа регулярку. попробую
Аноним 2016/12/06 09:57:03  №888992 379
>>888876
на жаве есть удобные библиотеки по работе с джейсоном, даунидзе. а тут регулярки какие-то, рекурсии по массиву. вообще ахуеть.
Аноним 2016/12/06 10:30:16  №889010 380
Тебя тоже читать противно, просто поразмыслив, я пришел к тому, что в этой задаче всё сводится к тому, что тебе нужно написать функцию, которая высчитывает все возможные суммы элементов массива:

то есть например у тебя если есть массив [1,3,4], то на выходе ты должен дать массив вида: [1,3,4,5,7,8], ну а дальше всё легко, ты просто проходишь циклом от 1 до 91 и находишь первую дырку.
Аноним 2016/12/06 11:00:01  №889025 381
PHPч, подскажи, как лучше решить следующую задачу: есть некоторая форма с большим количеством полей. При редактировании уже существующей формы пользователь может изменить не все поля, а лишь несколько, дак вот - как лучше сделать так, чтобы обновлялись только те поля в БД, которые были изменены в форме? Пока что в голову пришёл только следующий вариант: делать невидимый инпут внизу формы, в value которого я бы через js запихивал бы имена измененных полей, разделенных каким нибудь ";", чтоб потом, во время обработки post-запроса сервером я просто прошёлся бы по массиву параметров из hidden-инпута и обновлял именно их.
Ответы: >>889246
Аноним 2016/12/06 11:10:35  №889033 382
Аноним 2016/12/06 11:34:09  №889048 383
Как в Ларавеле подключить новый роутер? Я создал класс с роутами, как теперь сделать, чтобы приложние его видело?
Ответы: >>889056
Аноним 2016/12/06 12:05:23  №889056 384
>>889048
нужна кровь девственицы
Аноним 2016/12/06 14:43:34  №889175 385
Анонимные, а как реализуется редактирование уже имеющихся данных?
Допустим пост на форуме, в форме открывается уже готовый текст, его можно отредактировать.

Это просто идет селект текста и он заново пересобирается?
Аноним 2016/12/06 15:05:51  №889193 386
С чего начать, чтоб попроще уроков в ОП-посте? Они сделаны для тех, кто понимает, что и как надо бы сделать, но не знает как, а я вообще темный лес, парюсь над задачей с айфонами, с математикой и логикой беда видимо. Надо с совсем простенького начинать.
Ответы: >>889196 >>889199
Аноним 2016/12/06 15:09:38  №889196 387
>>889193

Лучше запостить ссылку на код и написать что именно непонятно. Что касается задачи с айфном, на ней все спотыкаются.
Ответы: >>889203
Аноним 2016/12/06 15:12:03  №889199 388
>>889193
Читай документацию ПХП, например. Я так его выучил за неделю.
Ответы: >>889203 >>889208
Аноним 2016/12/06 15:18:45  №889203 389
>>889196
Пока еще сам попробую решить, если совсем невмоготу станет, вброшу.
>>889199
Точно, спасибо.
Аноним 2016/12/06 15:30:25  №889207 390
Задача про студентов. Считай все сделал, но спотыкнулся на формировании ссылок для получения типа сортировки и номера страницы для отображения(постраничная навигация). Пока делаю тип того что-то <td> <a href="/index/?sort=name">Имя</a> </td> но проблема естественно в том, что таким образом нельзя через адресную стоку передавать еще какие-то переменные, а мне надо что бы было что-то вроде того: index/?sort=name&page=2, ну вы понели. В уроках ОПа есть что-то про построение ссылок стандартными функциями пхп, но я ничего не понял из этого. Научите меня как делать правильно позязь.
Ответы: >>889255 >>889269
Аноним 2016/12/06 15:32:50  №889208 391
>>889199
неделю не поработаешь снова учить неделю потом будешь
Ответы: >>889213
Аноним 2016/12/06 15:37:40  №889213 392
>>889208
Один раз выучил, могу не работать год, и снова писать на нём. Никаких затруднений, максимум - освежить в памяти какие-то тонкие вопросы, это легко сделать из того же мануала.
Ответы: >>889262
Аноним 2016/12/06 15:43:28  №889218 393
14810282086200.jpg (45, 694x625)
625x694
Анон, пишущий API-клиент снова тут, не было времени поковыряться, пару часов назад появилось.
Разделил методы на категории и создал для каждой категории класс. Один из классов: http://pastebin.com/dw2uaFCH
Base класс: http://pastebin.com/AvsCw8Ar
Создание объекта и вызов выглядят так:
$server = new Server($keyId,$vCode);
$url = $server->get('ServerStatus');
В $url идет ссылка со всеми параметрами, которые передаются в get вторым параметром массивом. Собственно вопрос остался тот же - как мне правильно получить файл с помощью того же Guzzle и обработать с помощью DOM?
Это прочитал https://github.com/codedokode/pasta/blob/master/arch/di.md но ничего не изменилось, я все равно не понимаю как это сделать. Разумеется можно после получения ссылки в том же место объявить экземпляр Guzzle и с помощью его получить файл и еще ниже сразу же объявить DOM и обработать, но это неправильно, или я не прав?
Ответы: >>889221 >>889318
Аноним 2016/12/06 15:46:11  №889221 394
>>889218
В результате я хочу двумя строчками получить массив данных.
Аноним 2016/12/06 16:32:47  №889235 395
Я хотя бы на правильном пути? http://ideone.com/fjpyYl
А в цикле во втором действии можно столько вычислений проводить за раз?
Ответы: >>889317
Аноним 2016/12/06 16:40:40  №889240 396
Второй вопрос снимается, можно, проверил. Совсем туплю уже.
Аноним 2016/12/06 16:54:20  №889246 397
>>889025
ну у тебя прилетает $_POST, когда пользователь заполнил поля.
Пробегаешь форичем по этому массиву и проверяешь каждый элемент на !empty

$bdUpdate = [];

for ($_POST as $key => $value) {
____if(!empty($value)) {
________$bdUpdate[$key] = $value;
____}
}

и им уже апдейтишь базу.
Ответы: >>889247
Аноним 2016/12/06 16:57:27  №889247 398
>>889246
Дык а если это не добавление объекта, а редактирование уже существующего? У меня же в посте все поля прилетят, и мне нужно как то дифференцировать измененные от неизмененных.
Ответы: >>889260 >>889317
Аноним 2016/12/06 17:19:43  №889255 399
>>889207
схерали нельзя? ты же сам ответил на свой вопрос? у тебя есть эти переменные. Скажем человек перешел на вторую страницу. Стало быть в контроллере ты оперируешь тем что у тебя $page = 2, и передаешь потом эту инфу во вьюху, и стало быть все ссылки, которые в пределах этой страницы строишь с гет-параметром &page=2, хули сложного? Отсортировал он по какому-то столбцу, sort=name, стало быть у тебя появилась переменная, что $sort = "name" и допустим ты знаешь что у тебя по дефолту стоит $defaultOrder = "ASC";
значит ты прямо в мускуль и отправишь эти сортить по name ASC, и хуяришь на выходе уже ссылки вида sort=name&order=asc&page=2

Кароче чет меня повело, прост блядь переменные гоняй через гет запрос и себе же их передавай и во вьюхе с их использованием берешь и строишь переменные прост.
Ответы: >>889271 >>889317
Аноним 2016/12/06 17:24:53  №889260 400
>>889247
что мешает апдейтить всю запись в базе? Ну или тогда если хочешь апдейтить только часть, то селекти перед апдейтом и сравнивай 2 массива.
>делать невидимый инпут внизу формы
мм, вкусно, уже заапдейтил в твоей базе пароль админу)))
Ответы: >>889264 >>889286
Аноним 2016/12/06 17:29:50  №889262 401
Аноним 2016/12/06 17:35:26  №889264 402
>>889260
>мм, вкусно, уже заапдейтил в твоей базе пароль админу

А ВОТ ЭТО КАК ЭТО? Я НУФАК ПРОСТО
Аноним 2016/12/06 17:49:44  №889269 403
>>889207
Можно создать объект СтрокаЗапроса, который будет хранить все возможные параметры запроса, вроде sort, page и т.д. Каждый раз, при переходе по ссылке, меняется только один параметр. Т.е. пользователь может либо кликнуть на заголовок столбца - изменится порядок сортировки, либо перейти на другую страницу - изменится номер страницы, но не сортировка. Начинает он всегда с первой страницы, т.е. все начальные параметры строки тебе известны.
А ссылки будет формировать класс СсылкоФормировщик, который получает на вход объект СтрокаЗапроса.


Ответы: >>889317
Аноним 2016/12/06 17:52:00  №889271 404
>>889255
Не очень понял о чем ты. http://ideone.com/ppPhO0 вот мой шаблон, чую я вообще не с той стороны захожу.
Ответы: >>889300 >>889317
Аноним 2016/12/06 18:08:03  №889279 405
ОПушка, и интересующиеся, выскажите пожалуйста свои замечания:

http://ideone.com/rJWsZN
Ответы: >>889317
Аноним 2016/12/06 18:16:21  №889286 406
>>889260
>что мешает апдейтить всю запись в базе? Ну или тогда если хочешь апдейтить только часть, то селекти перед апдейтом и сравнивай 2 массива.
Ну а если всю запись обновлять слишком затратно в плане объема информации? Следовательно, и селектить лишний раз нежелательно.
И в чем заключается уязвимость невидимого инпута? Я же с него только считываю информацию
Ответы: >>889317
Аноним 2016/12/06 18:30:35  №889300 407
>>889271
http://ideone.com/ppPhO0 тащемта сделал вот так, просто передаю во вью параметры сорт и пейдж и показываю их в ссылке. Работает как надо, только вот все равно не покидает ощущение того, что можно сделать куда лучше, слишком уж это на наебку похоже.
Аноним 2016/12/06 18:43:31  №889313 408
два года прошло. люди все еще делают студентов. ппц
Ответы: >>889318 >>889319
Аноним 2016/12/06 18:51:16  №889317 409
>>889255

Можно сделать функцию для генерации ссылок, вроде такой

generateTableLink($sort, $dir, $search, $page)

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

>>889269

Можно, но тут наверно проще функцией сделать.

>>889247

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

Кстати, ORM вроде Доктрины умеют сравнивать сами.

>>889286

Что там затратного? Ты по 10 мегабайт текста каждый раз выбираешь? По моему ты сам себе придумываешь усложнение. Можно сделать список полей, но не забудь проверить его по списку разрешенных полей.

>>889235

Можно, но читабельность страдает и лучше лишнее перенести в тело цикла.

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

>>889279

> $tdg->getBalance(); / $tdg->getBalance(0); / $tdg->getBalance(NULL);
Не должно быть 3 варианта сделать одно и то же. Надо строже определить тип данных.

> $tdg->getBalance(); --> если в базе 0 записей, выбрасывает исключение
не понятна логика, почему исключение

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

Ну например если мы хотим получить баланс одного счета, то мы хотим получить на выходе число, а не массив. Зачем делать массив ради одного элемента?

>>889271

Символ & в HTML тексте или атрибуте надо писать как & amp ;

Ответы: >>889322 >>889328 >>889352
Аноним 2016/12/06 18:51:54  №889318 410
>>889218

Класс неправильно назван. У тебя не сервер, а клиент. Сервер - это тот, кто отвечает на запросы, а клиент - тот, кто отправляет. Также, неправильно писать просто "сервер", надо писать, для чего этот сервер или клиент.

> namespace libs;
Название тоже не по PSR-4 выбрано.

> $this->$api($params);
Зачем это? Динамические вызовы только усложняют понимание кода и их не стоит использовать без необходимости.

> $url = $server->get('ServerStatus');
Чем это лучше чем $client->getServerStatus() ? Какой смысл вместо вызова метода напрямую как-то это все усложнять? Ну например в случае с отдельными методами мы можем писать тайп-хинты, а как это сделать в твоем случае? Да даже просто комментарий к методу непонятно, как написать. как узнать, какие методы доступны?

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

Зачем использовано наследование? Я пока не вижу смысла писать в виде 2 классов то, что можно написать в одном. Наследование иногда используют для возможности расширения пользователем стороннего кода, но вряд ли имеет смысл расширять клиент АПИ, так как он жестко привязан к функционалу сервера.

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

> В $url идет ссылка со всеми параметрами, которые передаются в get вторым параметром массивом.
Ну так это получается не клиент АПИ, а HTTP клиент. Ты с таким же успехом можешь дать пользователю Гуззл, и пусть он сам делает там запросы.

> Разумеется можно после получения ссылки в том же место объявить экземпляр Guzzle и с помощью его получить файл и еще ниже сразу же объявить DOM и обработать, но это неправильно, или я не прав?
DI используется для передачи объектов-сервисов, которые могут использоваться многократно. Пользователь может выбирать, какую именно версию объекта передать. DOM это не сервис (он каждый раз создается заново) и его передавать через конструктор не надо, да и нет смысла, непонятно, зачем? Что ты в нем можешь поменять? DOM объекты ты просто создаешь и используешь.

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

Что касается Guzzle, то его как раз можно передавать с помощью DI. Ты передаешь в конструктор объект, с помощью которого потом будут делаться HTTP-запросы. Соответственно сам класс не создает и не настраивает этот HTTP клиент, а использует тот, что ему дали. Можно передать объект-заглушку, можно настроить какие-то параметры объекта (ну например, таймаут).

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

> Разумеется можно после получения ссылки в том же место объявить экземпляр Guzzle и с помощью его получить файл
Это будет не DI.


>>889313

А в школах до сих пор пишут буквы прописью.
Аноним 2016/12/06 18:52:47  №889319 411
14810395673980.png (122, 800x573)
573x800
>>889313
47 лет прошло, люди все еще не могут передать некоторые заглавные буквы.
Аноним 2016/12/06 18:59:58  №889322 412
>>889317
Сперва это и были две разные функции, но так как в них много общего, были объединены в одну. Выходит, меньше кода не всегда хорошо? Ну а вообще, концепция правильная? Передавать в этот класс pdo-объект, а в методы все условия и ничего более, а внутри только операции с базой данных, никакой внешней логики? (Супер удобно, в общем, получается на самом деле! Если надо что-то изменить, трогаешь только один метод, блин, это вообще...).
Ответы: >>889324
Аноним 2016/12/06 19:02:34  №889324 413
>>889322

Концепция, что вся работа с определенной сущностью в Бд собрана в одном классе - да, именно для этого TDG и придуман. Но объединение методов в один только ухудшило код.
Ответы: >>889331
Аноним 2016/12/06 19:07:17  №889328 414
>>889317
>Символ & в HTML тексте или атрибуте надо писать как & amp ;
В чем суть?
Ответы: >>889338
Аноним 2016/12/06 19:11:51  №889331 415
>>889324
А что насчет проверок на правильность вставляемых / запрашиваемых данных, можно ли их (эти проверки) держать внутри методов или нужно обрабатывать до того, как передадим данные в метод TDG?

Например:

1) внешний файл

if (условия, что данные правильны) {
$tdg->функция(данные);
} else {
...
}

2) внешний файл

$tdg->функция(данные);

наш класс

функция(данные)
{
if (условия, что данные правильны) {
манипуляции с бд
} else {
исключение
}
}
Ответы: >>889336
Аноним 2016/12/06 19:15:32  №889336 416
>>889331

В маленьких приложениях в простых случаях можно совмещать все в TDG (хотя конечно получается не очень чисто и уже не совсем TDG), в больших обычно делают более высокоуровневый сервис, который делает проверки/преобразования и после вызывает TDG.
Ответы: >>889344
Аноним 2016/12/06 19:19:15  №889338 417
>>889328
Сам по себе & может являться служебным символом для других символов (&nbsp; , < , &copy;). Поэтому для самого символа & пишем &amp; - так мы точно определим, что этот & набранан для текста.
Ответы: >>889340
Аноним 2016/12/06 19:20:40  №889340 418
>>889338
Лол, вот и оно, & lt; поменялось на кавычку.
Аноним 2016/12/06 19:23:40  №889341 419
5 лет прошло, люди все еще на битриксе пишут.
Аноним 2016/12/06 19:25:19  №889342 420
Прошло 3 года, как я сделал оповские задачки на студентов и обменник. Все еще не работаю кодером.
Ответы: >>889532
Аноним 2016/12/06 19:27:47  №889344 421
Аноним 2016/12/06 19:28:29  №889346 422
хотел погуглить задачки на сортировку и массивы по пхп. нагуглил это:
https://school-php.com/tasks
какой-то ппц, как будто шизик писал, условия понять не могу.
Ответы: >>889355
Аноним 2016/12/06 19:36:00  №889352 423
>>889317
>Ну и второе действие у тебя никуда не сохраняет результат вычисления.
Вот я даун!
Аноним 2016/12/06 19:36:20  №889353 424
СПАСИБО
Аноним 2016/12/06 19:37:51  №889355 425
>>889346
>ИГРА НА СЕССИЯХ (БИТВА АЛКОГОЛИКОВ)

>СОРТИРОВКА МНОГОМЕРНОГО МАССИВА
Реально, человеку нужно научиться выражать свои мысли.
>ORDER BY `age` ASC
Зачем там sql?
Аноним 2016/12/06 20:03:43  №889380 426
14810438238970.jpg (19, 220x296)
296x220
Ответы: >>889381
Аноним 2016/12/06 20:05:15  №889381 427
>>889380
йА думаю што существуют стандарты кодирования, и надо их соблюдать. Вот и всё.
Ответы: >>889391
Аноним 2016/12/06 20:20:55  №889391 428
>>889381
>giveMeAnotherAnswerThatContainsJustBooleanThatIGiveToYou(true)
?
Аноним 2016/12/06 20:42:21  №889408 429
Чё то я тут формами начал заморачиваться, и у меня появился вопрос: допустим, есть форма редактирования записи из БД. На action этой формы воткнут некоторый PHP скрипт, потом через $_POST[] я считываю все нужные параметры, НО! Где и как мне хранить ID, который я буду указывать в "update ... set ... where ID=:ID". Сначала мне показалось охуенным вариантом хранить ID там же в форме, правда потом перспектива того, что value инпута можно изменить через браузер мне показалось нежелательной. Потом я подумал, что в момент нажатия кнопки, которая предоставит мне форму для редактирования, в JS можно хранить значение ID допустим, отображен где то на странице в какой нибудь переменной, которая потом добавится в форму при событии onsubmit. Но как я понял, её значение можно изменить через консоль. Как быть тогда то?

И ещё, дайте ссылку на хорошийгодный мануал по формам типа советы, практические рекомендации, рекомендуемые правила построения и обработки данных, если таковой имеется.
Ответы: >>889416 >>889540
Аноним 2016/12/06 20:51:28  №889416 430
>>889408
В сессии пользователя, например.
Аноним 2016/12/06 23:04:19  №889523 431
Добрый вечер, есть тут люди с опытом написания парсеров/грабберов? Интересует вопрос: какое количество страниц обработки за один запуск является оптимальным (с учетом проксей и мультикурла) ? К примеру сайт с миллионом страниц - сколько времени нужно в среднем для полного парсинга?
Ответы: >>889834
Аноним 2016/12/06 23:20:03  №889532 432
>>889342
Сделал студентов но не обменник и работаю уже полтора года.
Ответы: >>889732
Аноним 2016/12/06 23:46:06  №889540 433
>>889408
Зачем извращаться? Проверь после сабмита есть ли права на редактирование переданного id у текущего юзера.
Аноним 2016/12/06 23:47:34  №889542 434
>>888962
У меня тоже подгарело от задачи. Но я отдаю себе отчет что отчасти это потому что я не могу её решить так сразу.
Ответы: >>889662
Аноним 2016/12/07 00:15:53  №889564 435
14810589536230.png (31, 900x556)
556x900
Ребята, помогите с SMTP, PHPMailer и Yii2.
Суть такова: не могу добиться работы из-за того, что Мейлеру не нравится статический вызов.
ЧЯДНТ?
Ответы: >>889778 >>889801
Аноним 2016/12/07 03:05:38  №889638 436
Ответы: >>889639 >>889662
Аноним 2016/12/07 03:12:54  №889639 437
>>889638
Забыл: там если ещё монету прибавить номиналом 1 - считает неверно.
Из-за того, что исключает единицу при прибавлении к другим монетам - и первую, и вторую.
Аноним 2016/12/07 07:23:39  №889662 438
>>889542
>>889638
Просто мы веб макаки, а эта задача расчитанна на выпускников вузов которые на сях дрочили алгоритмы несколько курсов. Если свести эту задачу к совсем простой теме, то там будет что-то комбинаторное, и надо написать лагоритм который выдает нам все возможные варианты суммы этихмонет, при которых у тебя монета принимает либо 0, либо своё значение. Вот так как-то.

То есть покажу пример для монет в 1, 2, 5.
В общем варианты:
1 + 0 + 0 = 1
0 + 2 + 0 = 2
1 + 2 + 0 = 3
0 + 0 + 5 = 5
1 + 0 + 5 = 6
0 + 2 + 5 = 7
1 + 2 + 5 = 8

Вот так как-то надо вложенным циклом или еще чем пройтись и получить массив, портом по этому массиву циклом до первой дыры и выдать ответ 4.



Для монет в 1,3 это
1 + 0 = 1
0 + 3 = 3
1 + 3 = 4
Ответ соотстввенно 2

для 1, 2, 2
1 + 0 + 0 = 1
0 + 2 + 0 = 2
0 + 2 + 2 = 2
1 + 2 + 0 = 3
1 + 0 + 2 = 3
0 + 2 + 2 = 4
1 + 2 + 2 = 5
Ответ - 6.

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

Ну и что еще могу сказать, так на самом деле это лотерея, потому что я ходил в эту контору уже второй раз, и в первый раз мне выпали на рандоме другие задачи, которые в тот раз я обе решил минут за 50, но завалил уже устное собеседование после этого :(
Ответы: >>889767 >>889797
Аноним 2016/12/07 07:33:53  №889663 439
Вторая задача с собеседования:

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

Простой - делится только на себя и 1
Палиндром - числа как 101, 30403, 4004 и так далее.
Аноним 2016/12/07 11:24:30  №889732 440
>>889532
а я в шоколадницу или аэрофлот пытаюсь трудоустроиться. назначили пару собесов на пхп кодеров, но там шараги в каких-то ебенях, я даже не доехал.
Аноним 2016/12/07 11:30:03  №889735 441
Господа, мой вопросец касается буквы M в MVC, т.е. моделей. Что это такое и как их правильно готовить? Сколько видов моделей бывают? Что это за domain models, repositories и прочая байда? Понятно, что пихать всю логику в один класс это неправильно. Для того, чтобы получить данные от пользователя из какой-то формы делаем одну модель, для работы непосредственно с SQL делаем другую модель, для того, чтобы полученные данные из БД иметь в виде какой-то структуры данных делаем третью модель и так до скольки уровней вообще? Где можно почитать годную инфу по организации бизнес логики в PHP? Ну, чтобы все по как по маслу - инверсия зависимостей, подстановка разных источников данных при юнит тестировании и прочее-прочее.
Ответы: >>889742 >>889820
Аноним 2016/12/07 11:48:50  №889742 442
>>889735
просто классы туда выносишь. всю работу приложения. чтобы из контроллеров чисто классы вызывались, а вся работа и обработка проходили в моделях. контроллеры должны быть максимально короткими, т.к. весь код в моделях
Ответы: >>889745 >>889757
Аноним 2016/12/07 11:53:41  №889745 443
>>889742
Это и так все понятно. Вопрос был про немного другое - про архитектуру самих моделей и всей бизнес-логики приложения.
Аноним 2016/12/07 12:33:14  №889757 444
>>889742
>просто классы туда выносишь. всю работу приложения.
кек
>чтобы из контроллеров чисто классы вызывались, а вся работа и обработка проходили в моделях.
кек^2

>контроллеры должны быть максимально короткими, т.к. весь код в моделях
кек^3

А в моем фреймворке например приветствуются тонкие модели и толстые контроллеры, но раз васян с двача так сказал, то буду ща хуярить толстые модели и всю логику в них))))
Ответы: >>889758
Аноним 2016/12/07 12:36:32  №889758 445
>>889757
в твоем самописном фреймворке?
Ответы: >>889761
Аноним 2016/12/07 12:39:02  №889761 446
>>889758
я просто намекнул тебе, что бывает два подхода, погугли что ли, чем бугуртить тут __)_)_)
Ответы: >>889820
Аноним 2016/12/07 12:49:32  №889767 447
>>889662
>Вот так как-то надо вложенным циклом или еще чем пройтись и получить массив, портом по этому массиву циклом до первой дыры и выдать ответ 4
Получается, нужен цикл в цикле.
Один идёт по количеству монет, а второй внутри каждый раз складывает все монеты.
Ну вот я так и хотел сделать, но где-то обкакунькался.
Я хотел так сделать, а потом просто unset из массива со сдачей от 1 до 9.
Сейчас посижу, подумаю.
Аноним 2016/12/07 13:22:00  №889778 448
>>889564
Блин, ну как сделать этот вызов не статическим:
protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from = null)
{
if (!empty($this->action_function) && is_callable($this->action_function)) {
$params = array($isSent, $to, $cc, $bcc, $subject, $body, $from);
call_user_func_array($this->action_function, $params);
}
}
Ответы: >>889801
Аноним 2016/12/07 13:41:27  №889797 449
>>889662
Так ты решил эту задачу на собесе или сейчас такой умный? Вот этот вот алгоритм, который ты изложил, за решение не прокатил?

Алсо, я нашел два алгоритма решения, с помощью генерации массива биткарты (побитовая маска), и с помощью циклов, вложенных в друг-друга, количество которых равно количеству элементов исходного массива. Твой вариант - это почти что вариант биткарты, без бит карты, лол.
Без специальной подготовки, такую задачу я бы решить не смог. Но читая статьи из цикла "как я устроился в гугол и получаю 1000$ в секунду" часто встречал описания штудирования всевозможных хитрых олимпиадных задачек перед очередным собеседованием. Поэтому мне кажется, хватит ныть, садись и учи.
Ответы: >>889805 >>889908
Аноним 2016/12/07 13:47:41  №889801 450
>>889564
>>889778

Это проблема в сторонней библиотеке. В таком случае первым делом надо погуглить:

http://www.yiiframework.ru/forum/viewtopic.php?t=32889

Затем мы идем в гитхаб разработчика, и ищем в issues - не писал ли кто-то об этом? Действительно, есть такой баг: https://github.com/SDKiller/zyx-phpmailer/issues/2

Там написано, что все исправлено аж в 2014.

Открыв код https://github.com/SDKiller/zyx-phpmailer/blob/master/Mailer.php видим - действительно, исправлено.

Теперь вопрос к тебе:

Почему у тебя такая старая версия? как ты устанавливал это расширение? через композер? если да, то какая версия стоит в composer.lock и в composer.json? если нет, то почему?
Ответы: >>889951
Аноним 2016/12/07 13:56:34  №889805 451
>>888944
>>889797

Есть раздел математики комбинаторика ( https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D0%BA%D0%B0 ), которая как раз изучает всякие комбинации и перестановки, и есть стандартные алгоритмы их генерации.

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

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

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

Монет максимум 10, каждая из них может быть взята или нет. Это дает нам 2^10 = 1024 варианта. Немного, так что можно решать задачу тупо перебором без особых оптимизаций (оптимизацией будет выбор такого порядка перебора, чтобы сумма шла по возрастанию).

Как сгенерировать комбинации монет? Да очень просто, можно циклом, можно рекурсией. Например, комбинации можно представить двоичным 10-значным числом от 0000...0 до 1111...1, по сути надо сделать перебор этих чисел.

Ответы: >>890335
Аноним 2016/12/07 14:08:42  №889814 452
Только так смог решить задачу про айфон http://ideone.com/fjpyYl
Самому кажется, что кривоватое решение, стоит по другому попробовать?
Ответы: >>889953
Аноним 2016/12/07 14:19:03  №889820 453
>>889761

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

>>889735

> Сколько видов моделей бывают?
Модель предметной области (domain model) - так иногда называют класс, объект которого соответствует какой-то сущности (Новость), а иногда - все классы, относящиеся к логике приложения, вместе. Из-за этого наверно и путаница.

> domain models
> repositories
Лучше всего почитать у Фаулера, который эти паттерны в книге описал:

http://design-pattern.ru/patterns/domain-model.html
http://design-pattern.ru/patterns/repository.html

В Доктрине репозиториями называются классы, отвечающие за выборку сущностей из таблицы в БД. У Фаулера вроде бы Репозиторий представляет собой абстракцию над базой данных, этакое хранилище, из которого данные можно получать.

Общая архитектура обычно представляется в виде слоев: http://design-pattern.ru/patterns/service-layer.html

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

Я бы не советовал специально как-то усложнять код и стремиться реализовать все возможные паттерны. Реши, что тебе нужно делать. Разбей это на отдельные задачи. Для каждой задачи напиши класс. А потом посмотри, логичная получается схема или нет. Можешь здесь например выложить как пример (даже не сам код, а описание классов и методов).

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

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

Хочу еще дать такую статью про хлеб: https://habrahabr.ru/post/153225/

Ты не дал никаких примеров, потому придется пример придумать мне. Ну вот возьмем например, файлообменник. Так как сущность там только одна - файл, то и сервис пока у нас будет один - СервисФайлов. Подумаем, какие нужны ему методы:

- проверитьФайл (можно ли такой файл загрузить к нам, правильно ли указан комментарий и тд)
- сохранитьФайл (и на диск, и в БД)
- получитьФайлПоId
- получитьСсылкуНаСкачивание
- получитьСсылкуНаСтраницуФайла
- получитьПутьКФайлуНаДиске
- удалитьФайл

Ну а дальше, может быть, эта схема будет как-то усложняться. Ну например, мы захотим для более аккуратного кода убрать из сервиса работу с БД в отдельный класс, реализующий Table Data Gateway. Затем, захотим сделать объект, представляющий Файл. Затем вынесем работу с URL в отдельный класс.

Затем вспомним, что нам надо для медиафайлов показывать информацию о них, и сделаем классы МедиаИнформация и ПолучательМедиаИнформации.

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

Ответы: >>889959
Аноним 2016/12/07 14:43:15  №889834 454
Аноним 2016/12/07 16:10:27  №889908 455
>>889797
я на собесе дошел мыслями до этого, но не смог на бумажке написать алгоритм этот.
Ответы: >>889921
Аноним 2016/12/07 16:25:22  №889921 456
>>889908
на кого ты там собеседовал чтобы такие задачи решать?
Ответы: >>889948 >>889949
Аноним 2016/12/07 16:53:35  №889948 457
Ответы: >>890042
Аноним 2016/12/07 16:54:58  №889949 458
>>889921
ну и там электронный тест, плюс на самом деле ideone, ты просто выбираешь язык и пишешь код в форму, там и явисты и сишники какие-нибудь эти же задачи решают, просто на своём языке.
Аноним 2016/12/07 16:55:40  №889951 459
>>889801
Я так-то посмотрел, это всё прочитал, но ничего не понял всё-таки.
>Почему у тебя такая старая версия? как ты устанавливал это расширение? через композер? если да, то какая версия стоит в composer.lock и в composer.json? если нет, то почему?
Через Композер устанавливал в середине этого лета.
4-я версия, как я понял.
У меня нет файла composer.loc - не нахожу его.
Что мне можно сделать в этой ситуации, обновить PHPMailer через Composer?
Вроде как не советуют просто сами файлы обновлять в папке vendor, только через Композер.
Аноним 2016/12/07 16:59:10  №889953 460
>>889814
Вполне хорошо, только ещё можно было бы сократить на echo "{$month} месяц спустя: долг = {$creditBalance} руб, выплачено всего {$paymentTotal} руб. \n";
Для этого надо прямо в цикле поставить условие: если осталось с процентами и 1000 меньше 5000, то $lastPayment = $creditBalance;
$creditBalance = $creditBalance - $lastPayment;
$paymentTotal = $paymentTotal + $lastPayment;
Ответы: >>890316
Аноним 2016/12/07 17:00:58  №889956 461
>>880700 (OP)
Анончики, хочу вкотится в это ваше веб-погромирование в 25
До этого 3 года работал версталой/фронтендом

Так вот, для работодателей опыт верстки хоть как-то будет учитываться или как нулевого долбоеба будут оценивать?
Ответы: >>889963
Аноним 2016/12/07 17:02:49  №889959 462
>>889820
Спасибо за развернутый ответ.

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

Пока что я в голове набросал следующую архитектуру моделей, которая в целом устраивает мои привычки работы с MVC:
1 - Storage Models - модели самого низкого уровня, работают непосредственно с данными (БД, XML, json). Есть некий общий класс StorageCore, который включает в себя экземпляры всех storage models и через этот общий класс происходит работа с этими экземлярами. Сам по себе Storage Core является реализацией интерфейса IStorage, что позволяет подставлять нужную реализацию в любой момент времени. Например, для unit-тестов не вижу особого смысла работать напрямую с рабочей БД и подставить для этого реализацию Storage Core для работы с предустановленными json-файлами.
2 - Domain Models - модели-объекты записей данных. Т.е. каждый экземпляр этого класса представляет собой конкретную запись в БД.
3 - Service Models - модели-сервисы, по сути тупо хелперы, в которых непосредственно и реализована вся бизнес-логика, все связи между сущностями, все сортировки и прочие выборки. Является надстройкой над Storage Core.
4 - Bind Models - модели, которые получают данные от пользователя (формы, get-запросы) и затем обращаются к service models, получая необходимые данные (в виде набора domain models) и совершая действия. Контроллеры работают именно с bind models, не затрагивая все остальные вышеперечисленные модели. По сути вся работа контроллера это инициализировать нужный в этот момент bind model и далее смотреть, что этот BM вытворяет.
5 - View Models - модели, которые являются тем же набором разного рода domain models. Эти модели далее передаются во View (т.е. внутри себя содержат еще какие-то вспомогательные методы, к которым мы обращаемся из View.

Примерно такая структура, к которой я стремлюсь. Но в силу недостатка опыта не могу оценить адекватность этой архитектуры. Есть мнение?
Ответы: >>889974 >>890892 >>890893
Аноним 2016/12/07 17:07:24  №889963 463
>>889956
Зависит от конкретной задачи. Но в целом, да. Опыт верстки для веб-разработчика большой плюс, при условии, что твой уровень пхп их устроит. Если же нет, то будут смотреть как на переводчика, который пришел на должность бизнес-аналитика.
Ответы: >>889973
Аноним 2016/12/07 17:20:41  №889973 464
>>889963
Отлично, спасибо за ответ. Значит вкатываюсь.
Аноним 2016/12/07 17:21:01  №889974 465
>>889959

А какие методы будут у IStorage?
Ответы: >>889977
Аноним 2016/12/07 17:23:45  №889976 466
>If you:

>Use Modern Versions of MySQL (late 5.1, all 5.5, 5.6, etc) AND PDO's DSN charset parameter (in PHP ≥ 5.3.6)
OR

>Don't use a vulnerable character set for connection encoding (you only use utf8 / latin1 / ascii / etc)
OR

>Enable NO_BACKSLASH_ESCAPES SQL mode

>You're 100% safe from SQL injections.

>Otherwise, you're vulnerable even though you're using PDO Prepared Statements...
Аноним 2016/12/07 17:23:51  №889977 467
>>889974
Я чутка попутал. Storage Models будут реализациями своих интерфейсов. А StorageCore будет подгружать нужную реализацию этих моделей, чтобы в одном случае работать с БД, а в другом работать, например, с файлами, не меняя при этом всю остальную логику.
Аноним 2016/12/07 18:50:22  №890042 468
>>889948
пиздец от джуна требуют, как будто он там будет архитектуру пилить. Хотя кого я обманываю просто я тупой и долго такое говно думаю.
Аноним 2016/12/07 19:35:30  №890069 469
Как мне обновить PHPMailer?
cmd.exe, composer require phpmailer/phpmailer - это ведь нужно в директории vendor делать?
Подскажите, пожалуйста!
Боюсь сломать проект, там уже многое готово.
Ответы: >>890078
Аноним 2016/12/07 19:58:52  №890078 470
>>890069

Что у тебя в composer.json написано? Ты обновляешь не то. Ты хочешь обнвоить phpmailer, а надо обновить расширение xyz-phpmailer от Юи.
Ответы: >>890083
Аноним 2016/12/07 20:10:41  №890083 471
>>890078
Вот: http://ideone.com/GttUX6
Сейчас уже 4.7 версия его, а у меня ещё 4.0.
Да, Mailer.php ведь в xyz-phpmailer находится.
И как же его обновить теперь?
php composer.phar require --prefer-dist zyx/zyx-phpmailer "@stable" в папке vendor?
Я уже забыл, как устанавливал что через Composer.
Ответы: >>890085
Аноним 2016/12/07 20:14:05  №890085 472
>>890083

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

composer.json ты дал не тот. Ты зачем-то мне дал composer.json от библиотеки phpmailer которая вообще отношения к проблеме не имеет.

И composer.json от xyz-phpmailer тоже не нужен.

Нужен основной composer.json, с помощью которого ты устанавливал Юи и плагины.

И что-то у меня ощущение, что ты фреймворк откуда-то скачал, а не композером ставил.
Ответы: >>890135
Аноним 2016/12/07 21:57:01  №890132 473
14811370214760.jpg (123, 1920x925)
925x1920
14811370214791.jpg (48, 360x624)
624x360
https://github.com/someApprentice/maintaskforlayout
https://someapprentice.github.io/maintaskforlayout/

Проблемы со шрифтами в IE
Представляете, я заново сгенерировал .eot шрифты, и они заработали даже без прописывания своего имени в отдельном файле для IE Сначала они у меня не работали и в нём. Зато я приобрел бесценный опыт верстки под IE - для меня теперь это проще простого.

>>874513
>Также,мне кажется, не надо было определять шрифты для всех значений веса и стиля. Достаточно определить только для тех, что нужны на странице: напимер, обычный, тяжелый, сверхтяжелый.
>>875380
>> Firefox, кстати, всё равно выдает ошибки парсинга font-weight на значения bolder и lighter (если их убрать то ничего не изменится). Как такое может быть?
>Это относительный вес ("чуть потяжелее") и его не стоит указывать внутри font-face в любом случае, так как непонятно относительно чего его отсчитывать.
Я бы тоже хотел чтобы можно определить вес не численным значениями, но, как мы выяснили, для значений bolder и lighter нужно значение от которого эти значения будут отсчитываться.

>>875380
>Вот скриншот из ИЕ11: https://www.browserstack.com/screenshots/b5bec7763e6986c4898f75ece20e9d312e81834b/win10_ie_11.0.jpg
>Видно, что между шапкой и бледно-серым блоком есть белая полоска. Скорее всего у тебя там margin collapsing - маргин вывалился из шапки или из серого блока.
А можно уточнить где эта белая полоска? У меня на скриншоте ничего не видно. Я такую белую полосу вижу когда сжимаю окно меньше 320px - это оно?

>Когда задаешь font-size, стоит задавать и line-height. В абзаце текста под заголовком "Consectetur" например строки стоят очень тесно, правильный ли там line-height?
Я просто не заметил это, в фш интерлиньяж где-то явно не соответствует реальному. Приходиться на глаз определять или я что-то не знаю.

>Для иконок соцсетей надо сделать реакцию на наведение.
А что за реакцию? Когда мы наводим на них и так меняется указатель. Я думаю этого достаточно.

>>srcset="img\home_0003s_0001s_0022_Layer-1-Large.jpg"
>Я вижу, ты используешь srcset, но почему тут не указано разрешение картинки? Так и должно быть? Вот я статью нашел по теме, если что: http://frontender.info/webkit-implements-srcset-and-why-its-a-good-thing/
Не смог разобраться с этим, нужно писать srcset="img\home_0003s_0001s_0022_Layer-1-Large.jpg 270w 1x"?
Ответы: >>890182
Аноним 2016/12/07 21:58:39  №890133 474
14811371197270.png (27, 690x588)
588x690
тест на знание пхп от битрикса
Ответы: >>890147
Аноним 2016/12/07 21:59:55  №890135 475
>>890085
{
"name": "yiisoft/yii2-app-advanced",
"description": "Yii 2 Advanced Project Template",
"keywords": ["yii2", "framework", "advanced", "project template"],
"homepage": "http://www.yiiframework.com/",
"type": "project",
"license": "BSD-3-Clause",
"support": {
"issues": "https://github.com/yiisoft/yii2/issues?state=open",
"forum": "http://www.yiiframework.com/forum/",
"wiki": "http://www.yiiframework.com/wiki/",
"irc": "//irc.freenode.net/yii",
"source": "https://github.com/yiisoft/yii2"
},
"minimum-stability": "stable",
"require": {
"php": ">=5.4.0",
"yiisoft/yii2": ">=2.0.4",
"yiisoft/yii2-bootstrap": "",
"yiisoft/yii2-swiftmailer": "
",
"zyx/zyx-phpmailer": "@stable"
},
"require-dev": {
"yiisoft/yii2-codeception": "",
"yiisoft/yii2-debug": "
",
"yiisoft/yii2-gii": "",
"yiisoft/yii2-faker": "
"
},
"config": {
"process-timeout": 1800
},
"extra": {
"asset-installer-paths": {
"npm-asset-library": "vendor/npm",
"bower-asset-library": "vendor/bower"
}
}
}

Вот основной composer.json.
Я ставил через Composer в режиме Development - иду по курсу от GeekBrains, расписываю подробно всё то, что говорит преподаватель, потом покажу анонам текст.
Я устанавливал ещё Bower и NPM, сам PHPMailer у меня в режиме stable.
Может, в этом причина? Там он мог давно не обновляться, конечно, но не с 2014-го же года...
Про Composer я почитаю, но мне бы ответ на этот вопрос помог, да.
Там вряд ли что найду - как обновить, там везде как установить просто.
Ну, попробую просто заново установить, да.
Ответы: >>890189
Аноним 2016/12/07 22:23:10  №890147 476
>>890133
Б и В.
Потому что в Б цикл цикл выполнится хотя бы 1 раз, а потом проверится. В первом варианте вообще не выполнится.
Ответы: >>890192 >>890329
Аноним 2016/12/07 23:26:11  №890182 477
>>890132

Белая полоска на скриншоте https://www.browserstack.com/screenshots/b5bec7763e6986c4898f75ece20e9d312e81834b/win10_ie_11.0.jpg расположена между темным блоком в шапке (ниже кнопки See Portfolio) и светло-серым блоком с заголовком Consectetur. Полоска горизонтальная, высотой пикселей 20-30.

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

Ответы: >>890818
Аноним 2016/12/07 23:39:46  №890189 478
>>890135

У тебя там указана версия @stable. Я к сожалению, не знаю, как именно определяется "стабильность", скорее всего берется максимальная версия, в которой нет слов вроде dev.

Зайдем на packagist (официальный репозиторий композера), чтобы посмотреть, какая версия считается сейчас стабильной:

https://packagist.org/packages/zyx/zyx-phpmailer

Это 0.9.2

Зайдем в проект на гитхабе, в releases и найдем там 0.9.2, которой уже как 2 года с лишним: https://github.com/SDKiller/zyx-phpmailer/commits/0.9.2

Видно что в коммитах исправления бага нету. Оно вышло позже. Значит, надо брать не stable, а версию из dev-master.

Еще конечно есть вариант с помощью error_reporting игнорировать сообщения уровня E_DEPRECATED, но это по моему плохая идея.

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

надо исправить composer.json и сделать update.

Также, если есть желание, можно написать авторам этого composer.json (я не знаю, где ты го взял, это ведь не от разработчиков Юи наверно, а какая-то левая сборка?) и предложить им исправить версию пакета.

> Про Composer я почитаю, но мне бы ответ на этот вопрос помог, да.
Ты бы понял, как определить версию установленного пакета (по composer.json), ты бы нашел гитхаб проекта и issue с проблемой в нем. Просто у меня сложилось ощущение, что для тебя композер это черный ящик, и ты просто следуешь инструкциям в курсе, а как только что-то идет не так, теряешься. Потому стоит понимать, что в композере ничего такого необычного нет, он просто подбирает пакеты исходя их требований в разных composer.json и устанавливает их.

Ответы: >>890193
Аноним 2016/12/07 23:42:16  №890192 479
Аноним 2016/12/07 23:43:16  №890193 480
>>890189
Огромное человеческое спасибо, ОП!
Аноним 2016/12/08 08:44:51  №890316 481
>>889953
>если осталось с процентами и 1000 меньше 5000
Не понимаю.
Аноним 2016/12/08 10:23:19  №890329 482
>>890147
неправильно йоба, хули ты всех в заблуждения вводишь
Аноним 2016/12/08 10:48:26  №890335 483
>>889805
А почему ты считаешь комбинацию, при которой все монеты не выбраны? Я просто хочу понять, нужно ли ее считать, или нет?
Если все возможные суммы исходных чисел находить как сумму всех возможных сочетаний, то получается другой ответ С1монетыИз10+С2монетИз10+...С10монетИз10 = 1023. Но можно прибавить С0из10, тогда получится 1024. На эту сумму нельзя что-либо купить, и соответственно дать сдачу. Т.е. ряд двоичных чисел можно начать с 0000000001 а не с 0000000000.
Ответы: >>890343
Аноним 2016/12/08 11:06:55  №890343 484
>>890335
монеты считаете,что все так плохо в пидорахии?
Аноним 2016/12/08 11:11:34  №890347 485
Тут задание на должность джуниора проскакивало несколько месяцев назад, там давалась база данных и кажется надо было написать роутинг в MVC стиле. Можете скинуть условия они ещё были в гугл доке?
Ответы: >>890378 >>890448
Аноним 2016/12/08 12:22:55  №890378 486
>>890347
поищи на архиваче
Ответы: >>890448
Аноним 2016/12/08 13:26:32  №890416 487
ОП, проверь пожалуйста.
https://github.com/never3ver/fileshare
Попытался разобраться с тестированием, что-то там сделал, но наверно отложу эту тему, думаю лучше сначала с большими фреймворками познакомиться а потом уже в это лезть.
Ответы: >>899152
Аноним 2016/12/08 14:18:42  №890448 488
Ответы: >>890632
Аноним 2016/12/08 14:41:06  №890457 489
Никак не могу 4 рандомных результата объединить в одну строку, задача про генератор имен http://ideone.com/FhSLUw http://ideone.com/jgRSPJ
Блин, опять засиделся за задачками, на работу опаздываю уже.
Ответы: >>890498 >>890892
Аноним 2016/12/08 15:42:57  №890498 490
>>890457
Тебе надо конкатинировать переменную $randomText в $name внутри цикла.
А потом $name вывести, как ты и выводишь.
Всё.
Ответы: >>890499 >>890956
Аноним 2016/12/08 15:43:43  №890499 491
>>890498
*конкатенировать
Аноним 2016/12/08 19:07:25  №890632 492
>>890448
Очень сильно спасибо
Аноним 2016/12/08 19:12:06  №890637 493
Как можно обучиться адаптивной вёрстке? Выучил уже практически всё что надо для джуниора ПХП, базы данных, вордпресс, даже yii2 немного, MVC, обычную вёрстку, js, jQuery но что-то никак не даётся адптивная вёрстка, когда сталкиваюсь с реальным заданием всё как-то получается криво. Я заметил одну вещь, если у всего остального что я учил вроде ООП на ПХП был чёткий алгоритм работы и обучения, то в адаптивной вёрстке всё как-то меняется в зависимости от случая, поэтому я никак не могу понять само ядро этой технологии. Может быть есть хорошие курсы именно по адаптивной вёрстке? Я даже готов заплатить если они не очень дорогие.
Ответы: >>890697 >>890860
Аноним 2016/12/08 20:44:59  №890697 494
>>890637
Курсы пройди какие-нибудь, есть же. В принципе, что там может быть сложного? Скажешь, что работал с несколькими фреймворками, с тем же Бутстрапом, да и хватит, я думаю.
Аноним 2016/12/08 21:00:08  №890712 495
Давно уже не использовал регулярные выражения, можете подсказать что обозначает этот паттерн:

'^(?P<controller>[a-z-]+)/?(?P<action>[a-z-]+)?$'

Точнее меня интересует для чего здесь <controller> и <action>, какую роль они выполняют в этом случае? Всё остальное вроде бы понятно. Под этот паттерн подходят выражения вроде post/create и т.д. Сама регулярка используется при создании роутинга, как правила для названий контроллера и экшена
Ответы: >>890860
Аноним 2016/12/08 21:39:04  №890740 496
14812223445640.png (35, 829x616)
616x829
14812223445651.png (23, 515x566)
566x515
14812223445662.png (33, 543x363)
363x543
ПАСАНЫ ПРОБЛЕМЕСЫ.. Что я делаю не так?
По сути, должно апдейтить цены, но нихуя не происходит, оптные макаки, подскажите.
Ответы: >>890761 >>890768 >>890849
Аноним 2016/12/08 22:06:06  №890761 497
>>890740
даже вникать лень, нахуй сразу послан мешать верстку с пыхо кодом, перейди для начала на фреймворки, и делай rest контроллеры, а на клиенте angular\react\хоть небо, хоть аллаха
Аноним 2016/12/08 22:08:37  №890763 498
>>890761
фреймворкобляди не нужны, что я захочу то сам сделаю на чистом ПХП и хуй соси Я УЖЕ ВСЕ ПОФИКСИЛ
Аноним 2016/12/08 22:13:08  №890767 499
>>890763
>на чистом ПХП
Орнул с неосилятора.


ttyk ты?
Ответы: >>890770
Аноним 2016/12/08 22:13:18  №890768 500
>>890763
>>890740
Я думал, что я видел дохуя хуевого когда на пыхе, но смотря на это у меня мигрень началась.
Ответы: >>890769
Аноним 2016/12/08 22:13:34  №890769 501
Ответы: >>890770
Аноним 2016/12/08 22:14:58  №890770 502
>>890767
нет
>>890769
Слушай, я всего 3 месяца на пыхе кодю, хуй знает что к чему вообще
Ответы: >>890773 >>890776
Аноним 2016/12/08 22:18:52  №890773 503
>>890770
Если хочешь вкатиться нормально и чтобы люди не плевались от твоего кода - в шапке треда есть всё для новичков и для не новичков тоже есть много интересных вещей.
Ответы: >>890774 >>890776
Аноним 2016/12/08 22:20:22  №890774 504
>>890773
Я прочитал основы, у меня был опыт [h]говно[/h]кода на C#, дальше разбираюсь сам
Ответы: >>890777
Аноним 2016/12/08 22:21:25  №890776 505
>>890770
Он к тому, что ты - быдлокодер.

>фреймворкобляди не нужны

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

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

Ответы: >>890780
Аноним 2016/12/08 22:23:12  №890777 506
>>890774
Даже с разметкой проебался.
Ты будущий аутсайдер.
Ответы: >>890780
Аноним 2016/12/08 22:25:06  №890780 507
>>890776
не понял прикол с собакой.
Суть в том что если хочешь помочь, можешь мыльцо оставить своё. Все совершали ошибки по началу, в чем твоя проблема?
>>890777
Каким образом проебался?
Ответы: >>890783
someApprentice 2016/12/08 22:30:21  №890782 508
Наконец-то дошли руки до очень старого аж с 79 треда но не сложного замечания

>>856303
https://arhivach.org/thread/193343/#819083
https://arhivach.org/thread/204328/#849196
https://arhivach.org/thread/204328/#856303
>>>>Также, у тебя в контроллере стоит 4 вызова render. Ты выносишь знание о структуре страницы в контроллер, но удобнее просто подключить один шаблон, а он уже пусть подключает что ему нужно.
>>Перенес рендеры из контроллера в шаблоны:
>>https://github.com/someApprentice/Students/commit/6b1fb52461786f9fe0966562c73b9f6f99968d5c
>Нет. ты пока не все перенес...
https://github.com/someApprentice/Students/commit/679a05c33e5ea62efb6e11c82c90c72e65cf33c1

Остальные исправления были здесь https://arhivach.org/thread/197740/#836646

В этих ссылках можно запутаться, но можете не сомневаться - ~99.9% ваших замечаний исправлены 0.1% это те которые я мог не заметить\забыть\потерять

Со Студентами мы разобрались?
Ответы: >>899152
Аноним 2016/12/08 22:30:32  №890783 509
>>890780

>не понял прикол с собакой.
Лол, блджад.
И не надо, я не тебе писал.

>Суть в том что если хочешь помочь, можешь мыльцо оставить своё. Все совершали ошибки по началу, в чем твоя проблема?
>Каким образом проебался?

Просто ты хапанул лишнюю пару хромосом.
Ответы: >>890788
Аноним 2016/12/08 22:35:21  №890788 510
>>890783
>Просто ты хапанул лишнюю пару хромосом.
А я вижу ты с рождения умеешь и на пыхе писать, и на чем угодно
Ответы: >>890794
Аноним 2016/12/08 22:48:21  №890794 511
>>890788
Дело даже не в твоем говнокоде, а в том, что ты "с тугой резьбой"тупорылый.
>А я вижу ты с рождения умеешь и на пыхе писать, и на чем угодно
А тебе, с таким подходом к делу, и жизни не хватит, чтобы научиться нормально программировать хоть на чем-то.
Ожидаю вопроса: "скаким таким подходом?"
Отвечаю сразу: "иди нахуй тупица, даже это не можешь понять"


Ответы: >>890798 >>890849
Аноним 2016/12/08 22:58:56  №890798 512
>>890794
>Ожидаю вопроса: "скаким таким подходом?"
Даже не думал этот вопрос задавать, хули ты сразу.
>ты "с тугой резьбой"
Очень огромный смысл, говорить это человеку, который пытается хоть что-то сделать с минимальным опытом.
Я же хочу чтоб мне на ошибки показали, а не хуйню писали такие как ты, строя из себя Аллаха
Ответы: >>890806
Аноним 2016/12/08 23:01:56  №890800 513
14812273168680.png (10, 1336x120)
120x1336
>Я же хочу чтоб мне на ошибки показали, а не хуйню писали такие как ты, строя из себя Аллаха

Ясно.
Ответы: >>890804
Аноним 2016/12/08 23:07:08  №890804 514
>>890800
Просто сейчас - это не реально.
А я про ошибки непосредственно в моём говнокоде. Я учел совет про фреймворки.

>мешать верстку с пыхо кодом
Ну тут уж извини, пока-что не умею по-другому.
Ответы: >>890813 >>890849
Аноним 2016/12/08 23:12:25  №890806 515
14812279454950.jpg (81, 760x854)
854x760
Ответы: >>890813
Аноним 2016/12/08 23:21:29  №890813 516
>>890804
>Ну тут уж извини, пока-что не умею по-другому.
Тогда спросил-бы как это делать, а не писать плохо про фрэймворки, которые очень хорошо решают эту проблему с помощью шаблонизаторов.

Поясняю на пальцах.
В одном файле .php ты описываешь логику.
А в другом ты пишешь весь html+все эти вызовы "echo".
Понимаешь?

>>890806
Я думал демчиками уже никто не пользуется.

Ответы: >>890816
Аноним 2016/12/08 23:25:32  №890816 517
>>890813
А в этот дургой уже где-то в начале пишешь include_once("Ссылка на файл с логикой") ?
Ответы: >>890821
Аноним 2016/12/08 23:27:01  №890818 518
14812288211490.png (76, 1280x720)
720x1280
14812288211511.jpg (1343, 1433x846)
846x1433
>>890182
Что-то не получается у меня найти её
В графическом редакторе при увеличении должно хоть что-то показаться

Может это исправилось уже само?
Ответы: >>890837
Аноним 2016/12/08 23:33:09  №890821 519
14812291894410.png (37, 347x90)
90x347
>>890816
Да.
Можно использовать еще require, он в случае ошибки остановит скрипт и плюнет ошибкой.
И скобки не обязательны.

И давай всему, что есть ИНФОРМАТИВНЫЕ имена (файлам, переменным, функциям и тд). Загугли как называть переменные или как оформлять код на php ну ты понел.
Хорошие люди даже сделали хорошую штуку - PSR

Ответы: >>890827
Аноним 2016/12/08 23:36:27  №890827 520
>>890821
Просто знакомые попросили им сайт сделать, а я на отъебись начал клепать ибо правок у них дохуя, платить не хотят. Да и не спал день, туплю сильно.
Ответы: >>890829
Аноним 2016/12/08 23:41:25  №890829 521
>>890827
>правок у них дохуя
>платить не хотят

Можешь ничего не менять в коде все идеально.
Ответы: >>890834
Аноним 2016/12/08 23:49:13  №890834 522
>>890829
Спор наш решился сам собой. могу ссылку дать на сие чудо
Ответы: >>890838
Аноним 2016/12/08 23:50:12  №890837 523
>>890818

Может быть. Если взять скриншот https://www.browserstack.com/screenshots/b5bec7763e6986c4898f75ece20e9d312e81834b/win10_ie_11.0.jpg - полоса есть. Видно ее?

Проверим, исправилась ли проблема. Я зашел на modern.ie и сделал там новый скриншот: https://www.browserstack.com/screenshots/5e7365e06a803d67a956cebf9704fc0ca6a4fc4c/win10_ie_11.0.jpg

Полосы больше нет. Но я вижу такие вещи:

- меню упирается в правый край без паддинга, надо хотя бы 5px паддинга, ведь в книгах и журналах буквы не налезают на самый край странице (хотя может это из-за несовершенства технологий печати конечно). То же касается логотипа.
- список consecuter, tristlquet на такой ширине было бы выгоднее выводить в 2-3 колонки, а не вертикально. Если там сделать верстку теми же инлайн-блоками, то они будут подстраиваться сами под ширину страницы.

В версии для ИЕ8 ( https://www.browserstack.com/screenshots/5e7365e06a803d67a956cebf9704fc0ca6a4fc4c/win7_ie_8.0.jpg ) отвалились картинки в блоке consecuter (там используется что-то из CSS3? В принипе, можно и без них конечно) и в блоке социальных кнопок внизу появились надписи.

В мобильной версии ( https://www.browserstack.com/screenshots/5e7365e06a803d67a956cebf9704fc0ca6a4fc4c/ios_iPhone-6-Plus_8.3_portrait.jpg ) шрифт в шапке слишком большой. Наверно надо для мобильных устройств его уменьшить.

Ответы: >>891479
Аноним 2016/12/08 23:51:15  №890838 524
>>890834
Оно уже на хостинге?
Давай.
Ответы: >>890848
Аноним 2016/12/09 00:04:05  №890848 525
>>890838
http://ekbkrasota.ru/
Да пожалуйста, блять, я уже недели 3-4 делаю эту хуйню. Заебался. Не дай аллах кому попадется такой чел.
Знаешь что самое интересное, ведь по началу был хороший код.
Ответы: >>890853 >>890860
Аноним 2016/12/09 00:05:03  №890849 526
И не разводите тут флуд по 20 постов без полезного содержания. Посты не по теме треда тут не нужны. Собак идите в /zoo обсуждать.

>>890794

Не надо тут писать такие вещи. Ты вряд ли врач, и вряд ли можешь сделать выводы дистанционно.

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

>>890763

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

>>890761

Если вникать лень, может и комментарий писать не стоит?

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

>>890740

- разнеси отдельно логику и шаблоны в соответствие с MVC ( http://www.phpinfo.su/articles/practice/shablony_v_php.html https://github.com/codedokode/pasta/blob/master/arch/mvc.md )
- не пиши HTML код внутри echo, это неудобно
- вынеси код работы с БД отдельно от работы с формой

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

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

>>890804

Тебе рано брать фреймворки. Для начала стоит поизучать функции, ООП, MVC.

Аноним 2016/12/09 00:11:16  №890853 527
>>890848
Работает.
Форма ПОЛУЧИТЬ КОНСУЛЬТАЦИЮ не работает.

Такое кстать и без php можно сделать за часик. Это если еще такие просьбы будут.
Ответы: >>890859
Аноним 2016/12/09 00:13:51  №890855 528
Анон, помоги.
Что я делаю не так?
Задача "На словах ты Лев Толстой"
http://ideone.com/ZGNHrv
Ответы: >>890894
Аноним 2016/12/09 00:20:19  №890859 529
>>890853
а что ты там потыкал?
Ответы: >>890890
Аноним 2016/12/09 00:22:41  №890860 530
>>890848

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

>>890761

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

>>890763

И в такой тоже.

>>890712

Это именованные подмаски: http://php.net/manual/ru/regexp.reference.subpatterns.php

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

http://php.net/manual/ru/function.preg-match.php - тут смотри примеры кода.

>>890637

Вот ты говоришь, что знаешь обычную верстку, но не знаешь адаптированную, это как? Это ведь скорее всего значит что ты и обычную не знаешь.

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

Если же тебя интересуют общие принципы, то в адаптивной верстке делают дополнительные CSS правила, которые применяются например на экранах меньше определенной ширины, или отдельные правила для печати (ну например на печати можно после ссылки печатать ее адрес, так как иначе непонятно куда она ведет).

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

Технически это делается с помощью @media-правил (медиазапросов) и метатега meta viewport. Погугли и изучи их.

ну например:

- https://habrahabr.ru/company/google/blog/173861/
- https://html5book.ru/css3-mediazaprosy/
- http://frontender.com.ua/mobile-web/wtf-viewport/

Также погугли статьи вроде "лучшие отзывчивые сайты" и посмотри примеры там. Ты можешь имитировать узкий экран, сделав окно браузера узким или исплоьзуя "режим тестирования адаптивной верстки" (иконка смартфона) в отладчике браузера (Ctrl + SHift + I). А если у тебя есть смартфон, ты можешь открывать сайты на нем и сравнивать с обычной версией.

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

А ты сам CSS изучил хорошо? Например, знаешь отличия вестки горизонтально идущих блоков инлайн-блоками от верстки флоатами? Если нет, то тебе надо изучить позиционирование, то есть способы, с помощью которых мы задаем относительное расположение блоков.Также, надо изучать, как верстать резиново, то есть с укзанием размеров в процентах либо с автоматическим определением размеров. То есть прежде чем браться за адаптивность, стоит полностью разобраться с позиционированием и резиновой (подстраивающейся под ширину) версткой. У нас в Оп посте есть задачки по теме.

Ответы: >>891622
Аноним 2016/12/09 00:36:21  №890872 531
>>890761

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

В твоем случае у нам фактически получается 2 приложения (клиент + сервер), которые надо поддержвать, плюс АПИ между ними. Код получается сложнее, сайт грузится и работает медленнее.

Не так давно какие-то иностранные чуваки решили похвастаться сделанным сайтом на HN: https://whosfiring.com/ (всего 3 недели прошло и уже не работает)

дискуссия на HN: https://news.ycombinator.com/item?id=12956243

Эти чуваки сделали мегабайтное яваскрипт-приложение на Ember, чтобы отправить запрос через REST API и вывести на странице 10 ссылок с абзацем текста. Любому понятно, что сразу отдать с сервера страницу с 10 ссылками было бы быстрее и с точки зрения времени загрузки сайта, и с точки зрения разработки. (Ну ОП конечно зашел в тред и пояснил им, в чем они не правы).

Не надо тащить клиенсткие приложения там, где они не нужны и не дают преимуществ. Так же как не надо арендовать строительный кран для постройки собачьей будки.
Аноним 2016/12/09 00:56:04  №890890 532
>>890859
Ввел имя и телефон. Нажал на кнопку.
Ответы: >>891018
Аноним 2016/12/09 00:58:22  №890892 533
>>890457

Ты можешь сделать так:

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

>>889959

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

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

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

> А StorageCore будет подгружать нужную реализацию этих моделей, чтобы в одном случае работать с БД, а в другом работать, например, с файлами, не меняя при этом всю остальную логику.
Это сложная штука. Подменить код для работы с БД кодом для работы с файлами сложно. Ну приведу пример: если у тебя есть SQL запрос на несколько таблиц, тебе придется писать его аналог обычным кодом. И при любых изменениях придется делать двойной объем работы. На мой взгляд, оно того не стоит. Проще поменять способ тестирования.

Майкрософт пытался решить эту проблему в C#. Они сделали LINQ, это напоминающий SQL синтаксис, который позволяет одинаково работать с коллекицями (массивами) как с базой данных. Также есть библиотеки, которые транслируют LINQ в SQL запросы и таким образом, один и тот же код может выбирать данные как из таблицы, так и из массива. Вот пример:

... result = from u in users
where u.CreditLimit.Value > 20000
select new
{
u.FirstName,
u.LastName,
u.Address1_City
};

Это очень продвинутая штука. Ну например, ты можешь в условие WHERE передать анонимную функцию вида x => x > 10 и она сама разберет код этой функции и сделает из нее аналогичное SQL условие. Ты замучаешься делать аналог этой технологии.

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

В PHP что-то отдаленно похожее есть в ORM Доктрине. Там есть свой язык DQL, и она разбирает запросы на нем, генерируя SQL. Теоретически можно написать интерпретатор таких запросов, который позволит их выполнять не на базе данных, а на массиве. Это долго и сложно. Я предложил использовать DQL вместо SQL, так как для него уже есть парсер. Хотя если погуглить, можно и для SQL найти парсер: https://github.com/greenlion/PHP-SQL-Parser

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

Другой подход - отказаться от чистого SQL и составлять запросы с помощью Query Builder, так:

$b = $em->createQueryBuilder();
$b->from('users', 'u');
$b->andWhere('u.karma > 10');
$b->orderBy('u.name');

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

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

Есть разные варианты, например, можно перед тестом очищать базу и загружать в нее заранее опрделенные данные (fixtures). Можно тест заворачивать в транзакцию, и делать rollback (откат) в конце.

Ответы: >>890956
Аноним 2016/12/09 01:05:21  №890893 534
>>889959

Ну и вместо написания своих Storage Models, советую рассмотреть вариант использовать готовый ORM вроде Doctrine или другой. Хотя у них и недостатки тоже есть.

> 2 - Domain Models - модели-объекты записей данных. Т.е. каждый экземпляр этого класса представляет собой конкретную запись в БД.

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

> Service Models - модели-сервисы,
Правильнее просто сервисы. Сервисы это часть модели в MVC, но их так, как ты, никто не называет.

> Bind Models - модели, которые получают данные от пользователя (формы, get-запросы)
Это называется формы. В Симфони есть компонент Symfony Forms (его можно использовать отдельно) для работы с формами и валидации. Он умеет автоматически переносить данные из моделей в форму и обратно.

> и затем обращаются к service models, получая необходимые данные
Вот уже пошло усложнение. А почему форма должна сама куда-то обращаться и передавать данные? Почему форма должна знать про сервисы? лучше разделять задачи и сделать чтобы форма отвечала только за работу с POST-данными. А куда их дальше передать, пусть решает контроллер.

> View Models - модели, которые являются тем же набором разного рода domain models. Эти модели далее передаются во View (т.е. внутри себя содержат еще какие-то вспомогательные методы, к которым мы обращаемся из View.

Опять выглядит как усложнение, что мешает передавать во вью сразу Domain Models? view model как правило не используется в серверном коде, только в клиентском варианте MVC с паттернами вроде data binding.

Я советую тебе не усложнять без надобности и почитать туториалы по Симфони. Многие компоненты Симфони можно использовать отдельно, и ты можешь даже собрать из них свой фреймворк.
Аноним 2016/12/09 01:09:01  №890894 535
>>890855

Код вроде работает. Но выражение в строке лучше заключать в фигурные скобки ( http://php.net/manual/ru/language.types.string.php#language.types.string.parsing ) и избавиться от повтора кода, например, циклом.

Также, можно сделать цикл, описывающий структуру стиха:

[$word1, ' ', $word2, ' ', ...]

И генерировать стих по нему.
Аноним 2016/12/09 01:20:20  №890895 536
Кстати, аноны, которые интересуются ООП и архитектурой, и хотят поучиться разбирать чужой код, можете поломать себе мозги. Есть библиотека-парсер SQL запросов: https://github.com/greenlion/PHP-SQL-Parser

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

Посмотрите на код библиотеки, оцените используемые алгоритмы, подумайте, удобно ли:

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

Что бы вы предложили поменять? Как бы вы решали такую задачу?

Заметьте, что в библиотеке есть тесты. В них можно посмотреть примеры ее использования.
Ответы: >>890907 >>890907
Аноним 2016/12/09 02:30:42  №890907 537
ИМХО.

>>890895

>искать в нем баги и исправлять их
Система ошибок так себе

>>890895
Нужен парсер грамматики

>>использовать код, ну допустим у вас есть задача найти все упоминаемые в SQL запросе названия таблиц или например оценить число строк, которое выберет запрос
PVS Studio только для SQL



>- поддерживать код
Ну вы понели))
Да у вас архитектуры как таковой я и не заметил.
Аноним 2016/12/09 03:10:42  №890920 538
Поясните мне за алгоритмы, стоит ли их учить?
Просмотрел вакансии на back-end разработчика, и практически нигде не написано в требованиях "алгоритмы".
Это маст хэв вещь?
Аноним 2016/12/09 06:10:03  №890956 539
>>890498
>>890892
Спасибо, попробовал оба способа, все заработало.
Аноним 2016/12/09 10:21:13  №891018 540
14812680739840.png (1, 339x75)
75x339
>>890890
ты ето прислал? Просто я сейчас ввел все и у меня заработало.
Аноним 2016/12/09 11:15:40  №891027 541
Не могу понять одну вещь:

Есть абстрактный класс Model, у него наследники Employee и Department.

Есть абстрактный класс TableDataGateway, у него наследники EmployeeTDGW и DepartmentTDGW

Я в классе TableDataGateway пишу: abstract public function add(Model $object); - подразумевая, что можно передавать только Model и её наследников

В дочерних классах я хочу видеть что-то типа public function add(Department $department) - уточняю, что не любой Model, а только Department

Но выскакивает warning кричащий о несоответствии типов. Пришлось в наследниках так-же прописывать Model в качестве переданных параметров.

Как можно сделать такое уточнение и что-бы валидатору понравилось моё решение?
Аноним 2016/12/09 12:19:04  №891046 542
>>891027
Наследование это вид отношения "А является подмножеством B", то есть мы в любой момент можем подставить вместо родительского класса дочерний и всё должно быть ок, так как наследник именно расширяет родительский класс, а не уточняет, в противном случае нарушается контракт. Это один из принципов SOLID.
Я бы взял готовую ОРМ в твоём случае.
Ответы: >>891524
Аноним 2016/12/09 15:15:24  №891122 543
>>891027
Либо делай отдельный
public function addDepartment (Department $department)

Либо в методе проверяй тип с помощью instanceof
Ответы: >>891524
Аноним 2016/12/09 18:23:20  №891208 544
>>891027

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

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

Можно считать это особенностью наследования. Есть еще другие известные проблемы, например проблема квадрата и прямоугольника: http://sergeyteplyakov.blogspot.ru/2014/09/liskov-substitution-principle.html

В твоем случае можно конечно в классе-наследнике поставить проверку через if .. instanceof, но это будет лишь попытка костылем обойти принцип Лисков.

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

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

Возможно ты хотел сделать абстрактный метод, чтобы требовать от наследников возможность делать вставку. В этом случае надо сделать один метод add в базовом классе, а абстрактным сделать метод вроде getTableName().

Ответы: >>891524
Аноним 2016/12/09 19:10:05  №891225 545
Ребят, решил изучить ларавел после джанго. Для него критично знать пхп ? Руби на рельсах трогал без знания рубей и дискомофорта не испытовал. И как по сложности изучения данный фреймворк? говорят как рельсы в мире пхп, так еще и вьюжс как свой фронтенд взяли.
Ответы: >>891234 >>891356
Аноним 2016/12/09 19:32:29  №891234 546
>>891225
Если программировать умеешь (независимо от языка), то можешь и не трогать.
Аноним 2016/12/09 21:48:44  №891356 547
>>891225

Лучше брось эту идею и иди изучать Node.JS. Там синтаксис почти повторяет Питон и Руби, это более модная технология, и наверняка ты уже яваскрипт знаешь на достаточном уровне.
Ответы: >>891393
Аноним 2016/12/09 22:43:03  №891393 548
>>891356
Пробовал примерно год назад - слишком много жс-лапшы получается(ну это я еще пхп не пробовал, лол). Модная технология, то модная. Но с таким же успехом можно и в сторону го какого-нибудь посмотреть
Ответы: >>891396
Аноним 2016/12/09 22:48:28  №891396 549
>>891393

У тебя на PHP код будет еще хуже. Иди изучай какой-нибудь другой язык.
Аноним 2016/12/10 00:35:41  №891435 550
>>891027
Не делай так, это говнокод. Методы дочерних классов должны полностью соответствовать методам родительских. Если нужно что-то новое, пиши новый метод или используй композицию.
Ответы: >>891524
Аноним 2016/12/10 01:34:02  №891454 551
Узнал, что в России оказывается есть "госмониторинг" для госсайтов: https://gosmonitor.ru/

Рисует всякие интересные графики: https://gosmonitor.ru/mob/229

И отчеты: https://gosmonitor.ru/expertresult/82982

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

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

Хотя конечно методику оценки открытых данных, на мой взгляд, переусложнили: https://gosmonitor.ru/expertresult/235712

> 20
> Информация о приложениях, разработанных на основе размещенных наборов открытых данных

Не думаю, что это нужно.
Аноним 2016/12/10 01:41:16  №891455 552
>>891454

Сделан кстати на Друпале и PHP (а я думал, на дотнете).
Ответы: >>891457
Аноним 2016/12/10 01:41:58  №891456 553
>>891454
ого гусьмонитор есть ахуеть прогресс, заживем, завтра же доктора перестанут всем зеленкой мазать анус, прописывать глицын, свежий воздух сон и утреннюю зарядку вместо блять реальных лекарств, ВСД и астения станут страшной байкой для молодых врачей.
Аноним 2016/12/10 01:43:38  №891457 554
>>891455
>2k16
>дауннет
лулирую
Аноним 2016/12/10 04:02:08  №891479 555
>>890837
>- меню упирается в правый край без паддинга, надо хотя бы 5px паддинга, ведь в книгах и журналах буквы не налезают на самый край странице (хотя может это из-за несовершенства технологий печати конечно). То же касается логотипа.
Добавил отступы: https://github.com/someApprentice/maintaskforlayout/commit/d3fc44bc664b9ea61a7aefef33a072e2fec35a64

>- список consecuter, tristlquet на такой ширине было бы выгоднее выводить в 2-3 колонки, а не вертикально. Если там сделать верстку теми же инлайн-блоками, то они будут подстраиваться сами под ширину страницы.
Изначально так и было, но когда места хватало только на 3 блока, то один лишний блок вставал где-то отдельно. Мне показалось это не красиво, и я решил что будет лучше вывести их все в одну колонку.

>В версии для ИЕ8 ( https://www.browserstack.com/screenshots/5e7365e06a803d67a956cebf9704fc0ca6a4fc4c/win7_ie_8.0.jpg ) отвалились картинки в блоке consecuter (там используется что-то из CSS3? В принипе, можно и без них конечно) и в блоке социальных кнопок внизу появились надписи.
А ведь это всего лишь проблема в том что в старых браузерах, поддерживающие css2, используется одинарное двоеточие, а новые, с css3, поддерживают двойные. При этом новые браузеры не отказываются поддерживать и одинарные, но почему-то я выбрал именно двойные одинарные двоеточия в соц.сетях это должно быть ошибкой и не могу вспомнить почему... Значит, если можно решить что можно и без них, то я предпочту так и сделать, потому что не хочу определять появление надписей отдельно от IE8.

>В мобильной версии ( https://www.browserstack.com/screenshots/5e7365e06a803d67a956cebf9704fc0ca6a4fc4c/ios_iPhone-6-Plus_8.3_portrait.jpg ) шрифт в шапке слишком большой. Наверно надо для мобильных устройств его уменьшить.
Уменьшил шрифт (и нечаянно вместе с этим закоммитил исправление с двойными двоеточиями): https://github.com/someApprentice/maintaskforlayout/commit/97590807dc8da1d88e4e738b7f0c8a336ecf585b
Ответы: >>899867 >>899868