Этого треда уже нет.
Это копия, сохраненная 17 декабря 2014 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
33 Кб, 500x500
157 Кб, 1024x683
34 Кб, 650x384
705 Кб, 1280x720
Клуб изучающих PHP #37 !xnn2uE3AU. # OP #405044 В конец треда | Веб
Привет. В этом ИТТ треде мы изучаем PHP (и некоторые другие языки для веба вроде JS), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то хочет изучить этот язык, кто-то хочет просто размять мозги и заняться чем-то полезным.

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

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

Предыдущий тред был тут: >>402831

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

Есть задачки по основам JS и DOM, хорошие, многие их с ходу решить не могут, попроси, дадим ссылку. Есть задачка на MySQL.

Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания.

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

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

Что почитать?

Мануал по PHP — http://www.php.net/manual/ru/langref.php
Сайт phptherightway
По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
JS: learn.javascript.ru
По верстке HTML/CSS: Путь верстальщика: https://gist.github.com/codedokode/58ebc90bd006baf4b35c
MySQL: https://gist.github.com/codedokode/10539213

Слишком простые задачи? Напиши что знаешь, что хочешь изучить и придумаем тебе задачку посложнее.

Сайт опять упал!!!!! Не паникуй, а открой http://rghost.net/45000175

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

Где архивы предыдущих тредов? Известно, где, на mediafire: http://www.mediafire.com/download/gza5360wdzqd743/threads-archive-pr-1..17.zip (189Мб, треды 1-17 из pr), http://www.mediafire.com/download/kgzl1f9366gc6ed/threads-archive-11..20.zip (72 Мб, треды 11-20 из b). Также один анон выложил все на дропбокс: https://www.dropbox.com/sh/4sb69jrx9qwrpcw/-nY5ia__VC (ок, он иногда не работает)

Как начать пользоваться командной строкой — gist.github.com/anonymous/9378956452c8e4a72ac8

ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.

Расскажи про поиск работы, фриланс etc Информация о фрилансе есть в /wrk . Также, походи по сайтам вроде hh.ru, hantim.ru, geekjob, fl.ru, посмотри, поизучай ситуацию. Имей в виду, кроме фриланса, где ты 2 дня ищешь заказ, полдня обсуждаешь за бесплатно суть работы, день делаешь и еще 2 дня слушаешь от заказчика что он о тебе думает, есть удаленная работа — продаешься в рабство, и занимаешься только программированием, задачи тебе будут подкидывать наготово. Ищется по слову «удаленно» на перечисленных сайтах. Зарплата на удаленной работе может быть меньше чем в офисе в столице, но больше чем в твоей деревне. На одеске зарабатывают больше, чем на русском фрилансе.

В общем, давайте начинать уже!
56 Кб, 500x644
!xnn2uE3AU. #2 #405045
Стой, прочти сначала этот пост.

Как и чем отформатировать код

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

Не бойся, сделать код аккуратным совсем не сложно. Самый универсальный способ — вставить его на сайт http://phpformatter.com и нажать кнопку Format. Робот сам выровняет твой код в лучших традициях.

Если ты используешь для редактирования кода IDE, то все еще проще (а если не используешь, то почему бы не начать?):

- Eclipse PDT — жми Ctrl + Shift + F для автоматического форматирования кода.
- Netbeans for PHP — жми Alt+Shift+F
- Zend Studio — жми Ctrl + A (выделить все), затем Ctrl + Shift + F
- PhpStorm — жми Ctrl+Alt+L
- PHPDesigner — поищи нужную опцию в меню, она там есть. Или жми Ctrl + Shift + F1
- Komodo IDE — правая кнопка -> Format Using...

Вот так, нажатием одной кнопки ты можешь сделать жизнь гораздо проще.

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

Основные правила

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

скобки в for и if/else ставятся так (египетские скобки):

[code]
if (...) {
// ...
} else {
// ...
}
for (...) {
// .....
}
[/code]

у определений функций и классов так:

[code]
function bakeCookies(...)
{
// ...
}
[/code]

Официальные ссылки

В PHP есть система стандартов с названием PSR. Вот стандарты, относящиеся к оформлению кода:

http://www.php-fig.org/psr/psr-1/
http://www.php-fig.org/psr/psr-2/
56 Кб, 500x644
!xnn2uE3AU. #2 #405045
Стой, прочти сначала этот пост.

Как и чем отформатировать код

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

Не бойся, сделать код аккуратным совсем не сложно. Самый универсальный способ — вставить его на сайт http://phpformatter.com и нажать кнопку Format. Робот сам выровняет твой код в лучших традициях.

Если ты используешь для редактирования кода IDE, то все еще проще (а если не используешь, то почему бы не начать?):

- Eclipse PDT — жми Ctrl + Shift + F для автоматического форматирования кода.
- Netbeans for PHP — жми Alt+Shift+F
- Zend Studio — жми Ctrl + A (выделить все), затем Ctrl + Shift + F
- PhpStorm — жми Ctrl+Alt+L
- PHPDesigner — поищи нужную опцию в меню, она там есть. Или жми Ctrl + Shift + F1
- Komodo IDE — правая кнопка -> Format Using...

Вот так, нажатием одной кнопки ты можешь сделать жизнь гораздо проще.

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

Основные правила

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

скобки в for и if/else ставятся так (египетские скобки):

[code]
if (...) {
// ...
} else {
// ...
}
for (...) {
// .....
}
[/code]

у определений функций и классов так:

[code]
function bakeCookies(...)
{
// ...
}
[/code]

Официальные ссылки

В PHP есть система стандартов с названием PSR. Вот стандарты, относящиеся к оформлению кода:

http://www.php-fig.org/psr/psr-1/
http://www.php-fig.org/psr/psr-2/
#3 #405061
ОП, я так рад тебе. Скажи, вот захотел я свой сайт небольшой. Там допустим будет пхп, где можно найти бесплатный хостинг?
#4 #405063
Помогите разобраться с регулярками. Есть например последовательность 0 и 1. Мне нужно определить только
101, 10101, 1010101 ..., а
01, 10, 1010, 0101, 01010 ... не подходит по этому [0-1]+ не вариант
#6 #405067
>>405061
Не оп, но бесплатный хост не вариант, лучше купи дешевый хост например на http://ru.bluehost.com/
#7 #405069
>>405066
Спасибо, хз почему сам не догнал
#8 #405070
>>405069
Да не за что, я не уверен что круглые скобки с + удачно сочетаются сам, но тип такая задумка.
#9 #405072
>>405067
Но мне же в учебных целях. Хочется выкладывать свое говно по типу считалки слов в тексте.
#10 #405075
>>405066
>>405070
Может придется заменить на
/1(01){1, }/
#11 #405076
>>405072
На локалхосте не вариант? Или ты хочешь перед друзьями хвастаться своими считалками?
#12 #405077
>>405072
посмотри здесь http://hosting101.ru/more-providers.html#2e12
какой-то конкретный не могу посоветовать
#13 #405078
>>405070
>>405075
спасибо, и с () все работает
#14 #405079
>>405076
На локалхосте вариант, но хочется и друзяшкам их нет и тут показывать что-то. Идеон конечно круто, но хочется и базу прикрутить уже небольшую, и прочие ништяки.
>>405077
Спасибо большое.
#16 #405094
>>405044
Я малость не понимаю, перед тем как начать изучать php, нужны знания html+css? Если да, то учить одновременно или сначала html+css изучить? JavaScript и сахарок к нему единственный путь?
#17 #405098
>>405094
Я думаю (ОП оспорит и скажет, что конечно надо) достаточно просто понять базовый синтаксис и все. Займет минут 20, даже меньше. Все равно все аттрибуты не запомнишь. Ну может сверстать одну страницу, чтоб понять как с этим работать. А так, учить то там и нечего.
#18 #405099
>>405098
Благодарю. А стоит ли для изучения этого всего использовать codecademy.com?
#19 #405102
>>405094

>Я малость не понимаю, перед тем как начать изучать php, нужны знания html+css?


У меня вон никаких знаний по html. Но, скорее всего, учить все равно придется.
>>405032

>По моему лучше не стало. Зачем например сюда


>SetPathByParentId(MaterializedPathKeeper $keeper, $tableName, $partitionData)


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


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

>По идее за взаимодействие с БД отвечает маппер, там это делать уместнее наверно.


Так это не информация из бд. Это как раз таки в объекте хранится, с него и берется.

>Ну и вариант с before/afterInsert, по моему, более универсальный так как позволяет поменять способ хранения.


Я не понимаю, в чем его суть.
#20 #405104
>>405099
Html:
<tag attribute="value">content</tag>
css:
selector {
property: value value value;
}
#21 #405109
>>405104
Я имелл ввиду вообще. И php и javascript.
#22 #405111
>>405044
нужно сделать определение из какого города пользователь и в зависимости от этого отображать ему разные данные о наличии товаров на складе(ну, типа, в каждом городе свой склад и в одном городе может товар быть, а в другом нет). Нагуглил несколько способов, но что посоветует ОП?
#23 #405112
>>405111
ну ясное дело, что определять нужно по айпи, это я понимаю.
#24 #405128
>>405112

>определять нужно по айпи


И бить ебало
36 Кб, 1289x529
33 Кб, 840x424
#25 #405131
Ребят, делал по первому пикрилейтеду настройку виртуалбоксаи теперь у меня второй пикрилейтед при попытке просто запустить мою убунту даже.
#26 #405133
>>405077

Лучше наверно не российский бесплатный, а западный, российские с рекламой обычно.
#27 #405136
>>405088

> Допустим, я хочу сделать папки равные графе id которая PRIMARY KEY и AUTO_INCREMENT, но я создаю папку до того, как заношу запись в базу данных. Какие варианты?



Вставить запись в БД, получить id, создать папку, обновить данные в БД.

>>405094

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

У меня есть путь HTML c задачками если что: https://gist.github.com/codedokode/58ebc90bd006baf4b35c

JS тоже можно на потом отложить.

>>405109

Можно но уровень там очень базовый.
#28 #405140
>>405111

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

>>405070

Прекрасно сочетаются

>>405075

Это то же самое что +. пробел внутри {} ставить не стоит.
#29 #405144
>>405102

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



Так я не спорю, что имя таблицы нужно. Да, надо его передавать. Но почему в функцию SetPath, а не в конструктор?

> Так это не информация из бд. Это как раз таки в объекте хранится, с него и берется.


Гм, ну пусть будет, ок.

> Я не понимаю, в чем его суть.



Процитирую себя: >>404915

> К сожалению при таком подходе полной абстракции от используемой системы хранения не получается так как CommentMapper должен содержать код работы с path и ты не можешь одним движением переделать его на использование Adjacency List или Nested Sets. Для этого надо поменять способ подключения маппера:



> $mpMapper = new MPMapper($db, 'comments', 'path', 'parent_id');


> $mpMapper->setPartitionBy(..);



> $mpMapper->beforeInsert($comment); // маппер сам вычисляет путь и проставляет его в $comment


... вставляем сущность в БД ...

> $comment->setId($id);


> $mpMapper->afterInsert($comment); // вдруг он что-то хочет сделать после вставки



> Здесь mpMapper должен сам додуматься извлечь fileId из коммента и добавить его в условие. Либо же можно передавать в метод setPartitionBy не только имя поля, а еще и id и тогда мы получим объект дерева для комментов только к одному файлу — вполне удобно.

#30 #405151
http://ideone.com/5Y2G0W

Интересует вторая строчка в разбиении, почему такое случается?
#31 #405160
>>405102

И еще вопрос, а почему Materializedpathmapper передается снаружи в CommentMapper, а не создается в нем? С какой целью? Сам по себе он отдельно от CommentMapper бесполезен по моему.

>>405131

Там бывают проблемы когда на 64 битной системе запускаешь 64 битного гостя: нужно чтобы процессор поддерживал какую-то там виртуализацию, и у некоторых она отключена в БИОС, у некоторых вообще отключена. Может в этом дело?

https://www.linux.org.ru/forum/general/6723812

Алсо тут

https://www.virtualbox.org/ticket/13187

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

Алсо почитай что в логах (Machine — Show Log). Там может быть намек с какой именно программой конфликт. Если не понимаешь сам, запости куда-нибудь лог.

В винде действительно есть дурацкая практика внедрять свои dll в чужой процесс.
#32 #405168
>>405151

> , почему такое случается?


Так и должно быть. Попробуй такой пример:

$x = preg_replace("/(((\\d)\\d)\\d)/", '1=$1, 2=$2, 3=$3', "123456 789");

$1 это первые скобки
$2 вторые
$3 третьи
#33 #405174
>>405131

Если не найдешь работающую версию Vbox, можно попробовать альтернативы вроде VMWare или Microsoft Virtual PC.
#34 #405177
>>405168
Оно работает еще хуже, чем предыдущий вариант

ideone.com/5Y2G0W

Я удивляюсь почему этот вариант не работает

http://ideone.com/j7cSIK
#35 #405200
>>405177

Пиши не $1 $2 $3 а как у меня '1=$1, 2=$2, 3=$3' чтобы увидеть что считается за $1 что за $2 и т д.

Так и должно быть. Ты просто неправильно написал код.

> почему этот вариант не работает


Потому что ты не совсем понимаешь что считается за $1, что за $2 и тд.
#36 #405218
>>405200
Теперь я вовсе перестал понимать
Если это не первые скобки в регулярки, то что за фигня?
#37 #405245
Аноны сейчас учу ПХП и решил попробовать писать функции которые используются в ПХП при помощи массивов, переменных и циклов. И у меня вопрос можно ли это сделать средствами языка ПХП? У меня сразу возник целый ряд проблем, например функции вида strpos и strstr получается писать только для одного символа, то есть когда мы либо ищем один символ или удаляем часть строки после того как находим один символ. Как сделать по другому не знаю, уже даже думал разбивать на все возможные куски строку, методом запуска большого количества циклов, но понял что это совсем не правильно. Можно ли решить эту проблему без регулярок?
#38 #405246
>>405245
Документацию читал?
#39 #405251
Поясните кто может, почему в этом коде:

for($i=0; $i<10; $i++) {

$k=$i;

}

echo $k;

Переменная $k будет равна 9. Нет я конечно понимаю что считается с нуля, меня интересует почему именно записывает 9 а не например любое число от 0 до 9?
#40 #405252
>>405246
Не читал, если честно.
#41 #405254
>>405252
Начинай, а то толку не будет
#42 #405255
>>405251
Потому что после цикла $k будет равно 9, не? Странный вопрос.
#43 #405256
>>405251
Потому что сначала отрабатывает цикл, и после того как цикл отработал, $k = 9
#44 #405257
>>405254
Я конечно понимаю что документация это важно, но там столько всего, если учить по книгам и например по Интуиту толку не будет?
#45 #405258
>>405257
Я не сказал что нужно читать всю документациюхотя нужно. Но епта, если ты применяешь функцию и получаешь хуйню, логично посмотреть инфу про эту функцию в документации.
#46 #405261
>>405257
Подожди, ты что, вопроизводишь уже имеющиеся функции?
#47 #405262
>>405261
Это как дополнительные задания, просто интересно сконструировать подобное.
>>405258
Я не применяю функции, я пытаюсь их написать.
#48 #405267
>>405262
Странно
#49 #405271
>>405267
Возможно, по сути это бессмысленно, но навыки всёравно улучшаются как мне кажется. Например я написал strpos и strstr но только когда работает мы ищем один символ, как написать для поиска подстроки не знаю.
#50 #405274
>>405271
Ну смотри сколько символов в аргументе же
#51 #405280
>>405274
У меня идёт элементарный поиск в строке через символ и когда i-ый элемент равен значению того что ищем, записываем этот номер в массив. Потом имеем массив совпадений. В случае с strstr первым циклом находим номер совпадения символа в строке, а потом используем этот номер в качестве стартового значения для следующего цикла, в которым всё вписываем в строку начиная с буквы совпадения. Как сделать что бы искать не символ а хотя бы несколько символов я пока не знаю.
#52 #405298
Котаны поделитесь хорошими задачами по ПХП
#53 #405300
>>405298
Две автомашины движутся навстречу друг другу со скоростями 60км/ч и 80км/ч. Расстояние между ними 500км. Какое расстояние будет между ними через 2
часа?
#54 #405302
>>405298
Сделать интернет-магазин.
40 Кб, 659x288
#55 #405318
Привет , ребят . Меня попросили немного поправить сайт на Joomla , дали контент и данные от админки.
Я сделал бекап через akeebo .
Что мне непонятно- обязательно ли устанавливать её на комп для залива контента или это можно сделать средствами самой админки. Точнее - нужно залить новую шапку.
спасибо
#56 #405320
>>405298
Написать парсер с двача
#57 #405329
У меня проблема после каждой перезагрузки страницы добавляются данные в базу данных. Как этого избежать? Сам запрос на запись стоит после в if. Мне нужно что бы записывались данные лишь в том случае когда я пишу значение в форме и передаю его.
#58 #405331
>>405329
Проще всего сделать редирект после того как добавил данные.
#59 #405334
>>405331
<?php
header("Location: index.php");
?>

Это вот так? Его можно только в самом вверху страницы делать?
#60 #405369
Рейт говнокод, написанный на коленке.
http://pastebin.com/RM9JGyEf
http://pastebin.com/g5AGYCRw
#61 #405372
>>405329
У тебя код, который пишет в БД, там же где и форма или отдельный скрипт? В любом случае, можешь поместить его туда же где и форма, только обернуть в if ($_SERVER['REQUEST_METHOD'] == "%тут твой метод%")

Ну и вообще, что это за скрипт, который пишет пустые поля? Нигде првоерки никакой нет чтоли?
#63 #405377
#64 #405461
>>405218

Ну давай разберем на примере.

$x = preg_replace("/(((\\d)\\d)\\d)/", '1=$1, 2=$2, 3=$3 ', "123456 789");
echo $x;

http://ideone.com/wuBVHw

Выражение \\d\\d\\d ищет 3 любых цифры подряд. В данном случае оно на находит подстроку «123». Теперь посмотрим чему соответствуют $1, $2, $3.

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

$1 — это первая пара скобок (самая внешняя), внутри которых стоит выражение ((\\d)\\d)\\d и потому $1 захватывает все 3 цифры и заменяется на '123'

$2 — это вторая пара скобок, внутри которых написано (\\d)\\d и они захватывают первые 2 цифры. Соответственно $2 заменяются на '12'

$3 — это третья пара скобок, самая внутренняя, внутри которых стоит \\d и оно заменяется на '1'

После этого preg_replace находит еще подстроки '456' и '789' и в них делает аналогичные замены.

Как видишь, тут цифра «1» попадает во все 3 пары скобок и потому оказывается и в $1 и в $2 и в $3.

А теперь вернись к своему коду и пронумеруй скобки. И увидишь что одна цифра может попасть в несколько пар скобок сразу и потому они повторяются.

Так понятнее стало? Или что-то по прежнему непонятно? Задавай тогда конкретные вопросы.

Советую также потом попросить дополнительную задачку на preg_replace.
#64 #405461
>>405218

Ну давай разберем на примере.

$x = preg_replace("/(((\\d)\\d)\\d)/", '1=$1, 2=$2, 3=$3 ', "123456 789");
echo $x;

http://ideone.com/wuBVHw

Выражение \\d\\d\\d ищет 3 любых цифры подряд. В данном случае оно на находит подстроку «123». Теперь посмотрим чему соответствуют $1, $2, $3.

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

$1 — это первая пара скобок (самая внешняя), внутри которых стоит выражение ((\\d)\\d)\\d и потому $1 захватывает все 3 цифры и заменяется на '123'

$2 — это вторая пара скобок, внутри которых написано (\\d)\\d и они захватывают первые 2 цифры. Соответственно $2 заменяются на '12'

$3 — это третья пара скобок, самая внутренняя, внутри которых стоит \\d и оно заменяется на '1'

После этого preg_replace находит еще подстроки '456' и '789' и в них делает аналогичные замены.

Как видишь, тут цифра «1» попадает во все 3 пары скобок и потому оказывается и в $1 и в $2 и в $3.

А теперь вернись к своему коду и пронумеруй скобки. И увидишь что одна цифра может попасть в несколько пар скобок сразу и потому они повторяются.

Так понятнее стало? Или что-то по прежнему непонятно? Задавай тогда конкретные вопросы.

Советую также потом попросить дополнительную задачку на preg_replace.
#65 #405462
>>405245

> И у меня вопрос можно ли это сделать средствами языка ПХП?


Да. PHP — Тьюринг-полный язык, а это значит что на нем можно реализовать любой алгоритм.

> У меня сразу возник целый ряд проблем, например функции вида strpos и strstr получается писать только для одного символа


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

> Можно ли решить эту проблему без регулярок?


да.

Алсо, покажи код. Трудно так советовать.

Алсо, прочитай это: https://gist.github.com/codedokode/ff99e357e9860ea169b8

Если ты хочешь сделать хорошие функции, аналогичные mb_ функциям, то надо сначала разбить строку на массив символов через хак с preg_split и затем уже работать с этими массивами.
#66 #405463
>>405251

В первом шаге цикла в $k записывается 0
На втором запиывается 1
На третьем 2
....
На десятом записывается 9
На одинаццатом $i = 10, условие $i < 10 не соблюдается и цикл заканчивется, а в K остается последнее записанное значение.
#67 #405465
>>405257

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

>>405262

> просто интересно сконструировать подобное.


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

>>405280

Код покажи уже. Ну что мы будем по твоему описанию угадывать как он написан что ли?

>>405298

На какую тему? Задачи в учебнике из ОП-поста решал? Там есть в том числе на ООП хорошие задачи, например «кошки-мышки».

Есть еще задачки с собеседований:

>>399201
>>399214
#68 #405466
>>405318

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

Если ты хотел спросить «обязательно ли ставить Джумлу себе чтобы что-то поправить на сайте» то нет, это можно сделать скорее всего через админку.
#69 #405468
>>405329

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

Это правда не устраняет проблему на 100%. Если у человека медленный плохой интернет, то запрос может отправиться, а ответ, с редиректом, не придти, и тогда человек обновит страницу и отправит запрос повторно.
#70 #405469
>>405369

Код оформлен не по стандарту. После if надо использовать {} и не писать его в 1 строку.

> public function error


> trigger_error


В мире ООП используют исключения. Этот механизм ошибок — тяжкое плохо спроектированное наследие прошлых лет, и я надеюсь, будет выпиливаться потихоньку из PHP.

> ini_set('error_reporting',


По моему довольно бессмысленная вещь. Зачем дублировать то что меняется в php.ini или htaccess?

Инициализацию твига не надо делать в render а то если ее вызвать 2 раза он 2 раза инициализируется.

> return die( );


Что за ерунда? При каком условии этот return сработает?

То, что из функции terminate можно вернуться, удивляет. А зачем тогда она нужна?

> array_split


Плохое название тк не отражает что делает функция

> construct(Application $app


Почитай-ка про DI: https://gist.github.com/codedokode/e1d31a31b37d5f635057 — у тебя тут все намертво связано через Application

> if (empty($method) or empty($arguments)) return false;


Раз ты пишешь return false то конечно во всех местах где это вызвается, ты пишешь if c проверкой? Или забываешь?

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

> _ _ call


Это оверкилл. Тут хватило бы наверно 2 функций с названиями get и post.

> $path = substr($uri, strpos($uri, $this->path) +


Используй регулярки и вынеси это в отдельную функцию. Плюс, ты не проверяешь что strpos может вернуть false.

> public function dispatch( )


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

> AND @!preg_match


@ это быдлокод

> extract($params);


Плохо. Что тебе мешает написать $params['name']?

> $book = new Sparkle\Model($app);


> $book->author = 'Somber';


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

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

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

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

Я в общем понимаю, многие начинающие пытаются написать свой фреймворк, но стоит не вариться в собственном соку, а смотреть на хорошие примеры кода. Я тебе советую изучить микрофреймворк Slim, или Silex и посмотреть как там сделано. Разбери их исходный код и сравни со своим.
#70 #405469
>>405369

Код оформлен не по стандарту. После if надо использовать {} и не писать его в 1 строку.

> public function error


> trigger_error


В мире ООП используют исключения. Этот механизм ошибок — тяжкое плохо спроектированное наследие прошлых лет, и я надеюсь, будет выпиливаться потихоньку из PHP.

> ini_set('error_reporting',


По моему довольно бессмысленная вещь. Зачем дублировать то что меняется в php.ini или htaccess?

Инициализацию твига не надо делать в render а то если ее вызвать 2 раза он 2 раза инициализируется.

> return die( );


Что за ерунда? При каком условии этот return сработает?

То, что из функции terminate можно вернуться, удивляет. А зачем тогда она нужна?

> array_split


Плохое название тк не отражает что делает функция

> construct(Application $app


Почитай-ка про DI: https://gist.github.com/codedokode/e1d31a31b37d5f635057 — у тебя тут все намертво связано через Application

> if (empty($method) or empty($arguments)) return false;


Раз ты пишешь return false то конечно во всех местах где это вызвается, ты пишешь if c проверкой? Или забываешь?

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

> _ _ call


Это оверкилл. Тут хватило бы наверно 2 функций с названиями get и post.

> $path = substr($uri, strpos($uri, $this->path) +


Используй регулярки и вынеси это в отдельную функцию. Плюс, ты не проверяешь что strpos может вернуть false.

> public function dispatch( )


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

> AND @!preg_match


@ это быдлокод

> extract($params);


Плохо. Что тебе мешает написать $params['name']?

> $book = new Sparkle\Model($app);


> $book->author = 'Somber';


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

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

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

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

Я в общем понимаю, многие начинающие пытаются написать свой фреймворк, но стоит не вариться в собственном соку, а смотреть на хорошие примеры кода. Я тебе советую изучить микрофреймворк Slim, или Silex и посмотреть как там сделано. Разбери их исходный код и сравни со своим.
#71 #405509
>>405140
Спасибо. насколько я понимаю функция avigator.geolocation.getCurrentPosition выдаст мне координаты. как же мне перевести их в город, регион?
#72 #405513
>>405509
почитал google maps api и хочу заодно спросить: судя по всему можно сделать так, чтобы человеку на встроенной гуглокарте отображало путь до ближайшего магазина, ведь можно? его местоположение будет известно, местоположения магазинов тоже.
#73 #405514
>>405513
только не знаю как определить какой магазин ближайший.
#74 #405556
Подскажите.
Вот есть у меня список:

<select id="enterCity" size="1">
<option id="kiev" onclick="return {width: 250, height: 150, draggable: true, text: '1'};">Киев</option>
<option id="dnepropetrovsk" onclick="return {width: 250, height: 150, draggable: true, text: '2'};">Днепропетровск</option>
<option id="zaporojie" onclick="return {width: 250, height: 150, draggable: true, text: '3'};">Запорожье</option>
<option id="odessa" onclick="return {width: 250, height: 150, draggable: true, text: '4'};">Одесса</option>
<option id="kharkov" onclick="return {width: 250, height: 150, draggable: true, text: '5'};">Харьков</option>
<option id="cherkassy" onclick="return {width: 250, height: 150, draggable: true, text: '6'};">Черкассы</option>
<option id="summu" onclick="return {width: 250, height: 150, draggable: true, text: '7'};">Сумы</option>
</select>

как передать значение </select> в js?
#76 #405610
>>405514

Нагугли в интернете формулу вычисления расстояния между 2 точками на Земле.

>>405513

Скорее всего. Яндекс точно так умеет, наверно и Гугл умеет.

Вот для яндекса: https://tech.yandex.ru/maps/doc/jsapi/2.0/dg/concepts/router-docpage/

>>405509

Это называется обратное геокодирование. И яндекс, и гугл это умеют:

https://developers.google.com/maps/documentation/geocoding/?hl=ru
https://tech.yandex.ru/maps/doc/geocoder/desc/concepts/About-docpage/
#77 #405619
Неуверен что туда пишу, но тут помогают, поэтому спрошу.
У меня стоит убунта на ноуте, хочу поставить чистый линукс - стоит того?
И где взять лучше дистрибутив для установки?
Смотрел на гну, кернел и линукс.орг, там только сборки.
#78 #405620
>>405619
Это стих?
#79 #405622
sage #80 #405633
>>405619
А я думал что убунта это и есть линукс.
А что тогда чистый линукс?
#81 #405638
>>405619

> Смотрел на гну, кернел и линукс.орг, там только сборки.


Линукс — это ядро. Само по себе оно малополезно, потому тебе нужен конкретный дистрибутив.

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

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

Если ты не хочешь брать готовый дистрибутив, а хочешь боли и унижений, можешь попробовать «linux from scratch» то есть собрать и скомпилировать систему из исходников с нуля: http://www.linuxfromscratch.org/

http://habrahabr.ru/post/113615/

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

Есть сайт http://distrowatch.com/index.php?language=RU где есть рейтинг популярности дистрибутивов.
#82 #405639
>>405619

«чистого» линукса нет. Чистый линукс — это ядро, которое показывает какие-то надписи на черном фоне и через 2 секунды падает в панику из-за отсутствия программы init.

Чтобы системой можно было пользоваться, кроме ядра нужны системные программы — минимум, оболочка командной строки с нужными библиотеками, программы для поддержки железа. . Их можно либо собрать из исходников самому либо установить в составе готового дистрибутива.
#83 #405640
>>405619

> И где взять лучше дистрибутив для установки?


На официальном сайте этого дистрибутива. Для дебиана например можно скачать netinstall — небольшой образ, который можно записать на дис или загрузочную флешку, а дальше он все скачает с интернета.
#84 #405641
>>405619
Алсо, эксперименты по установке лучше проводить на виртуальной машине. Или хотя бы в отдельный раздел на диске.
#85 #405665
>>405639

>Чистый линукс — это ядро,



debian-linux можно запустить с фрибсдешным ядром. линукс это НЕ ядро.
#86 #405666
>>405665
fix
Не фрибсдешное ядроа на Hurd
https://wiki.debian.org/Debian_GNU/Hurd
#87 #405681
Аноны подскажите пожалуйста, как заблокировать кнопку сабмит после одного нажатия. Имеется вот такой код:

<form method=POST>
Прийти в биржу<br><input type=submit name=go>
</form>

<?

if($_POST["go"]) {

$n=rand(1,5);
echo $n;

echo '
<form method=POST>
<input type=text name=tex1><br>
<input type=text name=tex2><br>
<input type=submit name=go1>
</form>
';

}

?>

На экране появляется одна кнопка, после нажатия на неё, появляется другая форма, но если нажимать на первую кнопку, скрипт по прежнему работает $n меняет своё значение, что очевидно. Как запретить это ей делать?
#88 #405693
>>405681
Ну например можно втыкнуть первую форму в else твоего if. Но в целом все равно какая-то хуйня получается,не говоря уже о том, что ты метод формы, типы и именя инпутов пишешь без кавычек лучше бы ты описал что делаешь и дал ссыку на какую-нибудь песочницу со своим кодом.
#89 #405696
>>405693
Я на денвере делаю, мне короче нужно на экране иметь одну кнопку, после нажатия на которую выведется на экране определённая картинка, текст (взависимости от рандомного числа) и кнопка по которой можно последовать дальше. Вообще затея такая, я пытаюсь написать примитивную игру в которой выступаешь в роли брокера, и каждый раз вначале дня выводится цена на акции, которая зависит от политических событий (есть массив с вариантами событий случайно выводится одно из них, от события зависит цена на акции при помощи специального коэффициента). Вторая кнопка на странице предназначена для того что бы перейти на саму биржу где можно покупать акции. Конечно можно просто написать в action на какую страницу перейти и там уже посчитать, но захотелось придумать как можно сделать это на одной странице.
#90 #405697
Сап программач!
Есть один вопрос на счет gmail'a!
Дело в том, что гугол, каким-то образом, при регистрации е-мейла берет или мак-адрес или что-то, что на 1 девайсе можно зарегистрировать е-мейл не указывая телефон 1 раз. Т.е. при повторной регистрации е-мейла у меня уже будут спрашивать номер телефона, без которого почту не сделать.
Куки и сессии чистил, АЙПИ менял - в чем может быть проблема?
Дело в том, что я с ноута попробовал в этой же сети зарегистрировать, и там зарегистрировалось ОК, но на 2 раз тоже спросило телефон.
#91 #405699
>>405696
Во-первых удали денвер. Во-вторых я тебе выше написал как это можно реализовать.
#92 #405702
>>405681
<input type="button" onclick="this.disabled=true;">

http://habrahabr.ru/post/48381/

Это подойдёт?
#93 #405703
>>405699
Спасибо попробую, а зачем Денвер удалять? Кстати как что скажешь про то что я написал? Только всё очень примитивно и зависит практически всё от вероятности, но некоторое подобие игрового процесса должно быть. Сейчас уже почти сделал, короче каждое утро выскакивает событие, например там "Танкер Шелл потерпел крушение", поэтому акции падают, у каждого события есть своё значение коэффициента которое увеличивает либо уменьшает цену акций (есть стартовая цена акций, например 50 долларов). Дальше предлагается игроку купить либо продать определённое количество акций, есть стартовый капитал (допустим 500 долларов) к которому отнимается либо добавляется сумма взависимости от действий игрока, цель за определённое количество дней заработать определённую сумму. Также есть статистика по всем дням, сколько было куплено или продано акций и какие активы были на тот момент. Конечно тут мало что зависит от игрока, но я надеюсь усложнить эту игру в будущем.
#94 #405704
>>405702
Спасибо, но это же яваскрипт? Хотя думаю подойдёт.
#95 #405705
>>405703
Я думаю тебе оп подробно ответит, у него явно больше терпения чем у меня, лол. В целом ничего нельзя сказать конкретно, потому что я даже не знаю как в принципе работает рынок акцийили как там оно называется. Очевидно что и у rand() есть свой механизм действия и он вряд ли достаточен для организации рандома для подобной "игры".Если ты действительно реализовал то что говоришь, очень странно что ты не можешь показать код. Это говорит о том что написал ты много хуйни. И это еще одна причина показать код.
#96 #405706
>>405705
Да хуйни много, я не дописал ещё, в принципе могу скинуть код но даже не знаю будет он работать или нет, так как ещё работаю над ним, там постоянно проблемы возникают, думаю через дня 3-4 должно работать. Насчёт рынка акций то тут конечно всё не так, у меня нет не всяких РТС не курса валют, не прочего, я только пробую что то написать, учить ПХП начал пару месяцев назад в этот тред впервые зашёл. Куда кстати вы код размещаете? Я наверное зря начал рассказывать про это всё, так как там ещё много проблем.
22 Кб, 606x523
58 Кб, 1366x390
55 Кб, 1029x633
#97 #405720
Создаю блог на Yii1 по примеру: http://yiiframework.ru/doc/blog/ru/prototype.scaffold
С фига ли Gii базу не видит, когда она есть?
#98 #405734
Почему не работает вот эта штука? Все же ведь верно:
http://ideone.com/26wjav
7 Кб, 1152x630
#99 #405790
Как можно вывести все значения массива примерно такого вида, без всяких print_r и прочего, а перебором? Если неизвестна степень вложенность массивов?
#100 #405793
#101 #405809
>>405790
Пишешь функцию, проверяешь внутри на is_array и рекурсивно её вызываешь
#102 #405817
Блеа, аноны, жопа горит! Короче есть сервер на винде. На нем запущен скрипт без условий выхода из цикла. Надо завершить процесс не перезапуская сервер (серверное по то есть) и вообще ничего с ним (с самим серверным по) не делая. Пробовал
posix_kill ($pid, 15);
но естественно не помогло.
затем попробовал
exec("kill -9 $pid");
конечено, точно также не заработал и вместо завершения вывел pid.
так что аноны, как завершить процесс по pid только средствами php?
#103 #405819
>>405817
Also,
была идея получить дескриптор процесса по pid и сделать proc_terminate, но я не знаю как получить этот самый дескриптор процесса по pid.
#104 #405821
>>405817
А и да, там стоит

set_time_limit(0);

Аноны, что делать?
#105 #405824
>>405817
блядь, это же сука невозможно! pid - номер процессора apache. ну что я за дебил. аноны, как скрипт то этот бесконечный завершить?
#106 #405825
>>405817

В винде нет ни системного вызова kill (который в POSIX отправляет сигнал) ни программы kill. Есть taskkill правда.

В твоем случае проще всего залогинитьяс на сервер и убить диспетчером задач.
#107 #405826
>>405819

Ты мануал открывал? По proc_terminate

Там написано как получтиь дескриптор.

Что за дебил составлял спамлист на этом сайте?
#108 #405827
все, аноны. спасибо. затупил на том, что думал, что завершив процесс Apache http server, я все нахуй порушу. Но нет, ничего не порушил. После завершения, он запустился заного после того, как я запустил еще 1 скрипт.
#109 #405838
>>405665

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

>>405681

Яваскриптом.

>>405696

Яваскрипт нужен для этого. Программы на яваскрипте встраиваются в страницу и выполняются в браузере.

>>405697

Введи телефон, в чем проблема? У меня всегда спрашивает, так как у нас на одном IP полгорода сидит. Или регистрируйся на яндексе, там вроде этого нет.

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

>>405699

Удалить я думаю он всегда успеет. Ему бы основы HTML и PHP подучить лучше.
#110 #405840
>>405703

Тебе еще данные надо где-то сохранять — в базе данных например. А то скрипт в php после завершения освобождает память и переменныеы и при повторном обращении к странице запускается с нуля.

Ну и для игр обычно JS используют чтобы не перезагружать страницу постоянно. Хотя это не обязательно.

>>405706

> Куда кстати вы код размещаете?


Маленький кусок кода — ideone.com (там сразубудет виден результат работы скрипта), много файлов — gist.github.com или сам github.

Ты можешь задавать вопросы, если тебе что-то непонятно, но имей в виду, что у нас никто наготово информацию разжевывать не будет, а лишь даст ссылку на мануал или слова для гугления.
#111 #405842
блядь, я ебаный мудак. я таки завершил апач и все упало. Аноны, вот скажите, каким мне образом завершить 1 бесконечный цикл средствами только php? Попробовал сделать вот такой файл для убивания:
$fp = fopen("close.txt", "a");
$mytext = "true";
$test = fwrite($fp, $mytext);
fclose($fp);

а в бесконечном цикле:
for(;;){
$check = readfile("close.txt");
if($check=="true"){exit("Задача завершена");}
else
{
...
}

но это почему-то не работает. в файл пишет, но процесс не завершается.
#112 #405843
>>405842

>процесс


цикл и вместе с ним скрипт
быстрофикс
#113 #405844
>>405720

В database connection надо писать не имя БД, а имя соединения. Для основного наверно можно оставить пустым или вписать default или еще что-нибудь.

>>405734

При использовании русских букв надо ставить в конце регулярки флаг u (а лучше его ставить вообще всегда).

>>405790

Рекурсия, то есть вызов функцией самой себя.

>>405824

Апач перезапусти. И исправь код.
#114 #405846
>>405842

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

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

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

Третье что ты должен сделать это читать мануал по команде прежде чем ее использовать. Читай:

http://php.net/manual/ru/function.readfile.php

И поймешь почему не работает.
#115 #405848
>>405842

Программа-супервизор конечно громко сказано. Хватит bat файла который будет перезапускать скрипт и логгировать факты падения.
#116 #405849
>>405809
>>405844
Да это я понял, до меня что-то немного не доходит как вывести с указанием ключей, вроде
arr['key1'] = 'value1'
arr['key2']['key21'] = 'value21'...
Чтоб по мере повторного входа в функцию постоянно передавать key2, а если еще глубже вложенность, то уже [key2][key21] и т.д.
#117 #405851
>>405849

Передавай в функцию при втором вызове $arr['key1']

В общем, напиши код и покажи, а то трудно говорить не видя кода. код на ideone удобно постить.
#118 #405862
>>405851
http://ideone.com/QP0XyO
Сделал так, но может нужно что-то править? Работает, но можно ли привести к более элегантному виду?
#119 #405864
>>405851
А точнее, не работает, стирается нужный ключ.
#120 #405865
>>405862

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

— лучше ставить {} после foreach, а ты не ставишь

— есть стандартная функция array_walk_recursive для обхода рекурсивно массива

— ты неправильно делаешь что делаешь составной ключ разделенный пробелами. А что, если в массиве есть ключ с пробелами? Более того, нет смысла склеивать ключи в строку и разбивать — проще передавать сразу массив ключей.
#121 #405909
>>405144

>Процитирую себя: >>404915


Я все еще не понимаю, в чем суть.
В моем случае же все будет до вставки. Ну я в любом случае сейчас переделаю, я вроде бы понял что-то.
#122 #405915
>>405865
Я знаю какие имена для переменных и функция делать, мне нужна была помощь в решении, а не нотации на тему ставить скобки для одного выражения или нет, какие имена придумывать. Если бы ключ был с пробелами, я бы делил иначе. Он не может быть составным.
#123 #405918
У меня тут траблы с кодом:
http://ideone.com/7KCVY6
Все хорошо, кроме else, какого хрена оно не работает?
#124 #405937
>>405918
Какой-то ты херни нагородил. В массиве, когда ты перебираешь через foreach буквы то заглавные, но ты никуда результат не сохраняешь, только во временные переменные $value и $upperlatter, а $text в итоге остается с маленькими буквами. Потом проверка
\tif ($upperlatter[0])
проверяет, существует ли символ с нулевым индексом в массиве. А он всегда существует в данном примере, даже если это не буква, а пробел или еще что-то.

И вообще разбивать каждый массив слов на еще один массив букв по моему слишком хитровыебано. Воспользуйся лучше вот такой замечательной функцией http://php.net/manual/ru/function.mb-substr.php и работай со строками массива $text.
#125 #405944
>>405918

> if ($upperlatter[0]) {


Это условие наверно всегда срабатывает
#126 #405945
>>405918

Пробел для if — это не пустой символ. То есть

if (" ") {
echo "YES\n";
}

Сработает
#127 #405946
>>405918

Лишние пробелы лучше удалить через функцию trim
#128 #405949
>>405909

В твоем подходе, когда ты вызываешь в CommentMapper

$path = ... что то там ... getPathForComment(...)

У тебя все жестко завязано на то, что используется Materialized path и код работы с Mpath находится в том числе в CommentMapper.

А если сделать через beforeInsert/afterInsert то мы абстрагируемся от конкретного способа реализовать древовидность и можем заменить его на любой другой, к примеру, Nested Sets ии Adjacency List. В CommentMapper при этом никакого кода работы с Mpath не будет.

То есть в таком варианте разделение ролей получается лучше и код работы с Mpath находится только в одном классе.
#129 #405956
>>405949
Вот теперь понял. Убрать код с путями из коментмаппера.
56 Кб, 604x587
#130 #405960
>>405945
Спасибо. Я уже разобрался, теперь другой вопрос.
Перебирая через foreach ($array as $value)
Я в цикле присваиваю $value какое-нибудь значения, почему оно не сохраняется в $array?

http://ideone.com/6nX68v
#131 #405962
>>405909

Насчет интерфейсов, обычно их названия оканчиваются на -able:

Countable
Iterable
Serializable

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

> $pathElements = explode('.',$path);


> $maxPath = array_pop($pathElements);


лучше сделать 2 функции, разбить путь на компоненты и склеить. Тогда мы легко сможем например заменить потом путь из точек на более компактный бинарный формат. Не то, чтобы мы это планируем, просто это сделает код более логичным.
#132 #405964
>>405960

Потому что value это не элемент массива, а его копия. ты меняешь копию.

Решить проблему можно либо добавлением знака & (мануал http://php.net/manual/ru/language.references.php ), или можно просто добавлять измененные элементы в новый массив.
#133 #405968
>>405960
Оно и не должно там сохраняться. $value это просто временные переменные внутри цикла foreach которые имеют значения массива. Если ты хочешь изменить массив, тебе нужно присваивать значение переменной $value непосредственно переменной массива:
например вот так http://ideone.com/OxKHuy (хуево объяснил, но надеюсь ты понял)
68 Кб, 453x604
#134 #405983
>>405964
>>405968
Спасибо. Буду иметь два варианта, как с этим делать.

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

http://ideone.com/eKzhtF
#135 #406020
Оп, я попробовал. Я правильно понял твою идею?
https://github.com/sqghub/uppu.ru
#136 #406021
>>406020
Хотя все еще остались части в CommentMapper'e.
В выборке комментариев по айди файла стоит сортировки по пути.
#137 #406038
Пагни, есть какие еще редакторы для новичков, кроме netbeans, в плане избыточности инфы в подсказках? А то netbeans прожорливый дюже и пека аж усерается.

Казалось бы st, notepad++, etc, но там только основная инфа, а хочется видеть какие параметры принимает и что возвращает.
#138 #406039
>>406038

>А то netbeans прожорливый дюже и пека аж усерается.


Прожорливый это сколько? У меня пхп сторм полгига жрет.
71 Кб, 1293x645
#139 #406041
>>406039
Да тормозит с ним компьютер ужасно. Приходится почти все закрывать, чтобы переключение между браузером и ide не занимало по секунд 30. Жава ебучая.

А там есть такая хуйня, как на пике?

И внезапно вопрос к знатокам: может это можно дополнениями в sublime text замутить?
#140 #406044
>>405983
>>405983

Бро, у тебя слишком сложно для того что бы такой же нуб например мог взять и разобраться. Но я тебе рекомендую убрать ща нахуй все функции и оставить чисто голый код, и в нем будет проще ориентироваться, вставлять вар_дампы где хочешь и все такое. Когда ты в одном куске кода уверен на 100%, то его уже заворачиваешь в функцию и используешь её тогда в твоем коде как обычную функцию из базовых библиотек. Всегда так делаю, зависимость есть. Может конечно и неправильно, гуру что скажут? В общем как-то так.
#141 #406049
>>406044
Как сворачивать? В редакторе - можно, а здесь никак. Не работает только preg_replace во второй фунции. И я не знаю почему
#142 #406051
>>406049
А что за задача хоть? И почему тестовый текст такой отвратительный?
#143 #406052
>>406051
Правильно раставить пробел со знаком препенания.

Для ошибок у меня уже все работает и лежит в другом файле.

Текст - первое что пришло в голову
#144 #406062
Вот стоит у меня виртуалка. На ней убунта, на убунте я поднял виртуальный хост и запилил на нем хэллоу ворд, так что я ввожу в браузере свой сайт и он все показывает. Как мне этот сайт увидеть из основной системы?

Алсо такая проблема, в убунте все стало оче мелким внезапно, шрифты все, как исправить?
#145 #406063
>>406062

>Как мне этот сайт увидеть из основной системы?


Думаю это уже настройки виртуалки, т.е. надо как-то виртуальную машину сделать частью сети реальной.
204 Кб, 1366x768
#146 #406066
>>406062
кароче вот куча говна на одной картинке.
#147 #406067
>>406066
А если мета перед титлом?
#148 #406068
>>406067
Не помогло.
#149 #406069
>>406068
А если charset, вместо chatset?
#150 #406070
>>406067
ноуп, файл пересохранил, там тоже utf-8.

Как же сложно быть нубом в этом вашем вебе. Вместо того что бы сидеть на каких-нибудь с++ быдлокодить ты должен пердолиться линуксом и всякими веб-серверами, знать кроме самого языка еще как минимум html и в перспективе еще 2 хуйни. Как же лампово было в школе кодить на паскале, я просто открывал окно с кодом, хуярил его туда, зная максимум самый базовый синтаксис даже без функций и мог запилить хотя бы змейку, или вообще на изичах текстовую игру, тут же блядь даже просто интерфейс с пользователем через боль и унижения.
#151 #406071
>>406069
заработало, спасибо.
#152 #406072
>>406071
Ну внимательнее же надо быть.
#153 #406073
>>406072
Стань моим учителем, о гуру!
Я не шучу.
#154 #406074
>>406073
Дай самому отучиться.
#155 #406077
Сап, гайз. Внезапно захотелось обратиться в к значению переменной внутри статического метода. Это возможно без ретурнов?

class Example
{
∙∙static function vacuum_horse()
∙∙{
∙∙∙∙$rus = 'Вакуумный конь';
∙∙}
}

Пробовал $var = Calculator::vacuum_horse()->$rus; и получил нотис Trying to get property of non-object.
#156 #406079
>>406077
Так запили статичное поле и меняй его в функции.
#157 #406081
>>406070
Попробуй мету перед тайтлом поставить. По идее так и должно быть, поскольку это часть заголовка, а после вывода они не обрабатываются бла-бла-бла...
#158 #406083
>>406079
Да это я умею. Внезапно представил, а что если бы их было там несколько. Тогда к какой прикажете обращаться? Отсюда вангую что такое не возможно в принципе.
#159 #406096
>>406081
да уже решили проблему вроде как, спасибо.

Как сделать форму для вставки большого текста бтв? Тип как на дваче для отправки поста. Самую простую, не растягивающуюся.
PHPExcel + PDO + база данных в cp1251 #161 #406126
Двощ! Работал ли кто с PHPExcel в связке с PDO и с БД на mysql и c кодировкой cp1251?
Как правильно нынче записывать кириллицу в PHPExcel? Нагуглил в интернетах способ через iconv.
PHPExcel с её классами и методами очень удобна, но вторым параметром в setCellValue приходиться добавлять вот такую вот конструкцию с iconv, без неё (если тупо вставлять элемент результирующего массива без изменений), в ячейке в эксель-файле пустота; кодировка самого файла с этим скриптом UTF-8, при создании экземпляра класса PDO указываю чарсет cp-1251.
while($finalres=$finalselectquery->fetch(PDO::FETCH_NUM)) {
++$counter;
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A'.$counter, iconv("windows-1251","utf-8",$finalres[2]))
->setCellValue('B'.$counter, iconv("windows-1251","utf-8",$finalres[1]));
}

Но что интересно, с mysql-функциями в php такой проблемы не возникает! Выполнена mysql_query('SET NAMES cp1251'), сам скрипт по-прежнему скриптом UTF-8 и не нужно никаких телодвижений и преобразований, значения корректно записываются.
$res=mysql_query($q);
while($results=mysql_fetch_array($res)) {
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', $results[0]);
}

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

Читал ещё, что можно изменить кодировку в файлах PDOExcel, но решения только для reader, а мне он даже и не нужен, только для writer. На всякий случай мои хеадеры; работаю с excel5 (2003 который):
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="result.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
#162 #406156
>>405983

> (,|;|?|!)


Знак вопроса — это специальный символ, который задает повторение. То есть он используется в таком виде:

https? — ищет слова http и https

Чтобы указать «ищи в тексте знак вопроса» надо писать либо \\? либо [?]

PHP указывает тебе на эту ошибку:

> preg_replace(): Compilation failed: nothing to repeat at offset 8 in /home/SvJnqS/prog.php on li



«nothing to repeat» обозначает «нечего повторять»

По моему, кому-то из анонов в прошлом треде я это писал уже. Не ты ли это? Давай-ка чтобы больше не повторять ошибку, ты выучишь список всех специальных символов, которые надо экранировать и отдельно список символов, которые надо экранировать внутри квадратных скобок (их по моему всего 5 или 6).

Вот этот список символов: http://php.net/manual/ru/regexp.reference.meta.php

Ну и еще совет. Ты ищешь только знаки препинания, вокруг которых с обоих сторон есть хотя бы один пробел. А что если его нет?
#163 #406158
>>406020

Вообще, неплохо. Вот советы и замечания

> расчитывал, что здесь можно будет написать MPKeeper, ведь он расширяет HMember,


Правильно так и надо сделать. MPMapper может работать только с MPKeeper, а не любыми сущностями.

> $this->treeMapper->setPartitionData($comment->getPartitionData());


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

> $query = $this->dataBase->prepare("UPDATE {$this->tableName} SET `path` = ? WHERE `id` = ?");


В принципе, afterInsert можно сделать пустым. Мы можем в beforeInsert проставить path, а CommentMapper его сохранит вместе с остальными полями (хотя так, получается, он должен знать об их наличии).

> public function setPathByParentId


Неиспользуемые функции удаляй

> $pathElements = explode('.',$path);


Это надо вынести в методы «распаковать путь на элементы» и «запаковать». И избавиться от работы с путем как со строкой напрямую.

> $partitionConditions =$partitionConditions."& ({$partitionField} = ?)";


> $data[] = $partitionValue;


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

> &


& — это битовый оператор http://dev.mysql.com/doc/refman/5.0/en/bit-functions.html#operator_bitwise-and

Он работает с битами числа в двоичном представлении. Тебе нужен логический оператор AND

>($parentId == "")


Это условие сработает если $parentId будет равен 0 например (мануал http://php.net/manual/ru/language.operators.comparison.php )

Потому надежнее начинать отсчет с 1.

> if (($childMaxPath == "")


C чего бы там будет пустая строка? Почитай-ка мануал:

http://php.net/manual/ru/pdostatement.fetch.php

> В случае неудачи, функция всегда возвращает FALSE



Ты должен писать

if ($childMaxPath === false)

либо

if (!$childMaxPath)

Также, если ты выбираешь всего всего 1 значение из БД, тебе больше подойдет метод PDOStatement::fetchColumn.
#163 #406158
>>406020

Вообще, неплохо. Вот советы и замечания

> расчитывал, что здесь можно будет написать MPKeeper, ведь он расширяет HMember,


Правильно так и надо сделать. MPMapper может работать только с MPKeeper, а не любыми сущностями.

> $this->treeMapper->setPartitionData($comment->getPartitionData());


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

> $query = $this->dataBase->prepare("UPDATE {$this->tableName} SET `path` = ? WHERE `id` = ?");


В принципе, afterInsert можно сделать пустым. Мы можем в beforeInsert проставить path, а CommentMapper его сохранит вместе с остальными полями (хотя так, получается, он должен знать об их наличии).

> public function setPathByParentId


Неиспользуемые функции удаляй

> $pathElements = explode('.',$path);


Это надо вынести в методы «распаковать путь на элементы» и «запаковать». И избавиться от работы с путем как со строкой напрямую.

> $partitionConditions =$partitionConditions."& ({$partitionField} = ?)";


> $data[] = $partitionValue;


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

> &


& — это битовый оператор http://dev.mysql.com/doc/refman/5.0/en/bit-functions.html#operator_bitwise-and

Он работает с битами числа в двоичном представлении. Тебе нужен логический оператор AND

>($parentId == "")


Это условие сработает если $parentId будет равен 0 например (мануал http://php.net/manual/ru/language.operators.comparison.php )

Потому надежнее начинать отсчет с 1.

> if (($childMaxPath == "")


C чего бы там будет пустая строка? Почитай-ка мануал:

http://php.net/manual/ru/pdostatement.fetch.php

> В случае неудачи, функция всегда возвращает FALSE



Ты должен писать

if ($childMaxPath === false)

либо

if (!$childMaxPath)

Также, если ты выбираешь всего всего 1 значение из БД, тебе больше подойдет метод PDOStatement::fetchColumn.
#164 #406161
>>406021

Ты прав. То, что CommentMapper делает сортировку по пути, немного нарушает нашу абстракцию. Давай посмотрим, как библиотеки вроде doctrine-extensions решают эту проблему.

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

https://github.com/Atlantic18/DoctrineExtensions/blob/master/lib/Gedmo/Tree/Entity/Repository/AbstractTreeRepository.php

> public function childCount($node = null, $direct = false)


> public function childrenHierarchy($node = null, $direct = false, array $options = array(), $includeNode = false)


(это не все, там еще есть)

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

Но если мы так сделаем, мы наткнемся на проблему: а что, если мы хотим добавить дополнительные условия к выборке? Например, выбирать только неанонимные комменты или приджойнить какую-то таблицу?

В Доктрине есть QueryBuilder — объект, позволяющий собирать запрос по кускам ( мануал: http://doctrine-orm.readthedocs.org/en/latest/reference/query-builder.html и заметь что это билдер не для языка SQL, а для его доктриновского аналога DQL). И соответственно маппер умеет возвращать объект Query, к которому ты можешь добавить любые условия. Для этого там есть методы:

https://github.com/Atlantic18/DoctrineExtensions/blob/master/lib/Gedmo/Tree/Entity/Repository/AbstractTreeRepository.php#L187

> abstract public function getChildrenQueryBuilder($node = null, $direct = false, $sortByField = null, $direction = 'ASC', $includeNode = false);



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

$queryBuilder = $repository->getChildrenQueryBuilder($comment);

// добавляем наше условие
$queryBuilder->andWhere('comment.name IS NOT NULL');

// выбираем нужные комменты плоским массивом
$comments = $queryBuilder->getQuery( )->getResult( );

Чтобы превратить плоский массив в дерево, библиотекой предоставляется метод

> public function buildTree(array $nodes, array $options = array())



То есть вся работа с иерархией там надежно вынесена в отдельный класс.

Чтобы у нас был такой же уровень абстракции, чтобы мы могли делать любые выборки с учетом иерархии, нам придется изобрести свой QueryBuilder или объект типа Criteria (мануал: http://doctrine-orm.readthedocs.org/en/latest/reference/working-with-associations.html#filtering-collections) который позволяет задать условия выборки.

По моему это все же слишком много для такой простой задачи. Потому предлагаю пожертвовать абстракцией и оставить ORDER BY path либо сделать в MPMapper методы для выборки с учетом иерархии.
#164 #406161
>>406021

Ты прав. То, что CommentMapper делает сортировку по пути, немного нарушает нашу абстракцию. Давай посмотрим, как библиотеки вроде doctrine-extensions решают эту проблему.

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

https://github.com/Atlantic18/DoctrineExtensions/blob/master/lib/Gedmo/Tree/Entity/Repository/AbstractTreeRepository.php

> public function childCount($node = null, $direct = false)


> public function childrenHierarchy($node = null, $direct = false, array $options = array(), $includeNode = false)


(это не все, там еще есть)

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

Но если мы так сделаем, мы наткнемся на проблему: а что, если мы хотим добавить дополнительные условия к выборке? Например, выбирать только неанонимные комменты или приджойнить какую-то таблицу?

В Доктрине есть QueryBuilder — объект, позволяющий собирать запрос по кускам ( мануал: http://doctrine-orm.readthedocs.org/en/latest/reference/query-builder.html и заметь что это билдер не для языка SQL, а для его доктриновского аналога DQL). И соответственно маппер умеет возвращать объект Query, к которому ты можешь добавить любые условия. Для этого там есть методы:

https://github.com/Atlantic18/DoctrineExtensions/blob/master/lib/Gedmo/Tree/Entity/Repository/AbstractTreeRepository.php#L187

> abstract public function getChildrenQueryBuilder($node = null, $direct = false, $sortByField = null, $direction = 'ASC', $includeNode = false);



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

$queryBuilder = $repository->getChildrenQueryBuilder($comment);

// добавляем наше условие
$queryBuilder->andWhere('comment.name IS NOT NULL');

// выбираем нужные комменты плоским массивом
$comments = $queryBuilder->getQuery( )->getResult( );

Чтобы превратить плоский массив в дерево, библиотекой предоставляется метод

> public function buildTree(array $nodes, array $options = array())



То есть вся работа с иерархией там надежно вынесена в отдельный класс.

Чтобы у нас был такой же уровень абстракции, чтобы мы могли делать любые выборки с учетом иерархии, нам придется изобрести свой QueryBuilder или объект типа Criteria (мануал: http://doctrine-orm.readthedocs.org/en/latest/reference/working-with-associations.html#filtering-collections) который позволяет задать условия выборки.

По моему это все же слишком много для такой простой задачи. Потому предлагаю пожертвовать абстракцией и оставить ORDER BY path либо сделать в MPMapper методы для выборки с учетом иерархии.
#165 #406163
>>406038

PhpStorm или EclipsePDT. Они тоже на яве.

> Казалось бы st, notepad++, etc, но там только основная инфа


Это простые редакторы которые не умеют в анализ кода.

>>406041

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


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

Ява работает по такому принципу: пока куча меньше определенного предела, она не собирает мусор, а исплоьзует ее как хочет. То есть даже если ей надо скажем 100 Мб, а предел равен 500 то в куче будет 100 Мб полезных данных и 400 Мб ненужного мусора. И только когда эти 500 закончатся, она начнет уборку.

То есть, ты при запуске Netbeans указываешь специальные параметры, которые передаются яве и задают ей ограничения на память. Почитай: https://performance.netbeans.org/howto/jvmswitches/

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

> Since NetBeans is started by a launcher program rather than by calling java directly, the NetBeans launcher looks for these settings in a special file called netbeans.conf in etc directory of IDE instalation. Alternatively, arguments can be passed to the java process on the command line by prepending -J to them.



Ты можешь либо класть настройки в файл netbeans.conf в папке etc либо передавать через командную строку (то есть в свойствах ярлыка) добавляя к ним -J

> -J-Xms32m - this setting tells the Java virtual machine to set its initial heap size to 32 megabytes


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

> -J-Xmx256m - this settings tells the Java virtual machine the maximum amount of memory it should use for the heap.


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

Ну и настройки ОС посмотри, и диспетчер задач запусти, может у тебя какая программа память сильно ест? Сколько у тебя памяти? 1 Гб небось?

> И внезапно вопрос к знатокам: может это можно дополнениями в sublime text замутить?


да, есть SumlimeIntel но я подозреваю, он будет есть столько же, а может больше памяти, как IDE.

> А там есть такая хуйня, как на пике?


Нет но она есть в интернете.
#165 #406163
>>406038

PhpStorm или EclipsePDT. Они тоже на яве.

> Казалось бы st, notepad++, etc, но там только основная инфа


Это простые редакторы которые не умеют в анализ кода.

>>406041

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


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

Ява работает по такому принципу: пока куча меньше определенного предела, она не собирает мусор, а исплоьзует ее как хочет. То есть даже если ей надо скажем 100 Мб, а предел равен 500 то в куче будет 100 Мб полезных данных и 400 Мб ненужного мусора. И только когда эти 500 закончатся, она начнет уборку.

То есть, ты при запуске Netbeans указываешь специальные параметры, которые передаются яве и задают ей ограничения на память. Почитай: https://performance.netbeans.org/howto/jvmswitches/

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

> Since NetBeans is started by a launcher program rather than by calling java directly, the NetBeans launcher looks for these settings in a special file called netbeans.conf in etc directory of IDE instalation. Alternatively, arguments can be passed to the java process on the command line by prepending -J to them.



Ты можешь либо класть настройки в файл netbeans.conf в папке etc либо передавать через командную строку (то есть в свойствах ярлыка) добавляя к ним -J

> -J-Xms32m - this setting tells the Java virtual machine to set its initial heap size to 32 megabytes


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

> -J-Xmx256m - this settings tells the Java virtual machine the maximum amount of memory it should use for the heap.


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

Ну и настройки ОС посмотри, и диспетчер задач запусти, может у тебя какая программа память сильно ест? Сколько у тебя памяти? 1 Гб небось?

> И внезапно вопрос к знатокам: может это можно дополнениями в sublime text замутить?


да, есть SumlimeIntel но я подозреваю, он будет есть столько же, а может больше памяти, как IDE.

> А там есть такая хуйня, как на пике?


Нет но она есть в интернете.
#166 #406164
>>406062

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

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

Чтобы решить проблему, надо сделать в виртуалке вторую сетевую карту, которая будет подсоединена к виртуальной локальной сети (к которой также подсоединен хост-компьютер). И ты и вируталка будет иметь в этой сети адреса типа 192.168.56.x

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

Читай в общем: http://integrator.adior.ru/index.php/virtualbox-setup/182-nastrojka-setevykh-interfejsov-virtualnykh-mashin-v-virtualbox

Тебе нужен режим «Host-only network» или «Виртуальный адаптер хоста. ».

http://eugenioz.blogspot.ru/2011/01/ssh-virtualbox.html тут есть немного про настройку гостевой ОС.

Я советую тебе разобраться как это все работает, а не просто бездумно выполнять непонятные советы из интернета.
#167 #406165
>>406062

> в убунте все стало оче мелким внезапно, шрифты все, как исправить?


Там же есть настройки (кнопка с шестеренкой) и выбор размера шрифта. Или ты в обход настроек что-то с DPI нахимичил?

>>406070

> Как же сложно быть нубом в этом вашем вебе.


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

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

> Как же лампово было в школе кодить на паскале, я просто открывал окно с кодом


Это ограниченность. Ты ограничиваешь себя крошечным окошком 22×80 в устаревшей 30 лет назад программе. Не понимаю, что в этом хорошего.
#168 #406166
>>406077

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


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

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

>>406096

textarea. Не пропускай основы HTML. У меня кстати, есть «путь HTML» который заставит тебя тщательно выучить HTML/CSS, не хочешь попробовать как-нибудь? https://gist.github.com/codedokode/58ebc90bd006baf4b35c

Растягиваемость добавляет браузер, для этого делать ничего не надо.
#169 #406167
>>406126

> Как правильно нынче записывать кириллицу в PHPExcel? Нагуглил в интернетах способ через iconv.


PHPExcel с её классами и методами очень удобна, но вторым параметром в setCellValue приходиться добавлять вот такую вот конструкцию с iconv,

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

Потому страдай.

В твоем случае, надо писать iconv. также, ты можешь написать функцию с более коротким именем вроде toUtf или сделать свою версию setCellValue c нужной кодировкой.

> Читал ещё, что можно изменить кодировку в файлах PDOExcel,


Ты не можешь просто так хранить данные как хочешь, ексель не сможет их прочесть.
254 Кб, 1327x695
117 Кб, 946x631
121 Кб, 909x625
#170 #406176
В общем >>406165 убунта сама перестала быть маленькой и стала нормальной.
Сетую как раз на то, что вместо изучения чего-то основательно приходится в голову загружать горы синтаксиса из других технологий, да еще и помнить о всяких настройках и кодировках. В общем плохо сделали веб, гниловат он изнутри я бы сказал даже. Ведь все это по большому счету является огромными костылями, навешанными на устаревшее говно мамонта под названием http, который не способен в динамику, а может только странички в html туда сюда гонять, и вот нужно это говно подпирать с двух сторон, с одной стороны php, с другой js что бы было все как у людей в других сферах программирования.

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


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

>>406166

В общем вот запилил свой первый сайт ололо, знаю что быдлокод и можете гнобить меня, у меня была цель наконец-то создать хоть какую-то связку из html+php, а то только на идеоне пхп дрочить уже нет больше сил. Попытался скормить ему властелина колец - все норм, пикрилейтед. Далее две книги одновременно тоже проглотил. Но вот 3 уже не смог, хотя там на самом деле объемы меньше мегабайта в каждой. То есть текст порядка 1.5мб осиливает, а далее уже нет. Считает кстати быстро, думал хуже будет.
В чем ограничение собственно в html форме textarea или в php? Длина строки там или массива?
#171 #406182
>>406176
Странная регулярка. Читал уроки ОП-а, и задачки делал, но вот что эта делает не понимаю, точнее догадываюсь, что ищет слова в тексте, судя по результату.
#172 #406186
>>406176

я советую для разработки использовать несуществующие имена типа wea.dev или wea.local а то потом сам же запутаешься.

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


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

Более того, для меня все эти досовские проприетарные технологии — это боль и унижение разработчиков. Никогда бы не променял HTML/HTTP и открытые технологии на эту отстойную недоконсоль и виндовые недоокошки. Видишь, у разных людей разные взгляды.

Если ты считаешь что технологии плохие, как бы ты сделал веб? Чем бы ты заменил HTML, HTTP и прочее? Как по твоему браузер отобразит страничку без них? Если критикуешь, предложи альтернативу.

> да еще и помнить о всяких настройках и кодировках


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

Алсо, если бы ты проверял свой HTML валидатором: http://validator.w3.org/ он бы тебе указал на ошибку. Советую всегда им проверять.

> навешанными на устаревшее говно мамонта под названием http, который не способен в динамику


А как надо сделать по твоему? Что вместо HTTP? Как реализовать динамику?

> То есть текст порядка 1.5мб осиливает, а далее уже нет.


В чем ошибка? Что пишется? Давай разберемся, так не должно быть. 3 мегабайта ни для HTTP, ни для PHP не проблема.

> В чем ограничение собственно в html форме textarea или в php?


А что пишется в сообщении об ошибке или в логе? У тебя выводятся ошибки?

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

- ошибки сохраняются в лог ошибок. Можно открыть его и почитать. Если ты запускаешь код на локалхосте, у себя, то лог хранится в папке Апача (обычно она называется logs) и имеет название вроде error.log (в линуксе в папку /var/log/apache2 ) . Если на хостинге — там либо есть файл error.log либо раздел в панели управления, где лог можно посмотреть

- также, ты можешь включить отображение ошибок. Открой файл php.ini, поставь там display_errors = On и error_reporting = E_ALL и перезапусти сервер. Теперь ошибки должны выводиться на экран.

> у меня была цель наконец-то создать хоть какую-то связку из html+php, а то только на идеоне пхп дрочить уже нет больше сил


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

$_POST['text'] = ...;

Хотя, как по моему, так запускать в консоли удобнее чем через браузер.
#172 #406186
>>406176

я советую для разработки использовать несуществующие имена типа wea.dev или wea.local а то потом сам же запутаешься.

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


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

Более того, для меня все эти досовские проприетарные технологии — это боль и унижение разработчиков. Никогда бы не променял HTML/HTTP и открытые технологии на эту отстойную недоконсоль и виндовые недоокошки. Видишь, у разных людей разные взгляды.

Если ты считаешь что технологии плохие, как бы ты сделал веб? Чем бы ты заменил HTML, HTTP и прочее? Как по твоему браузер отобразит страничку без них? Если критикуешь, предложи альтернативу.

> да еще и помнить о всяких настройках и кодировках


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

Алсо, если бы ты проверял свой HTML валидатором: http://validator.w3.org/ он бы тебе указал на ошибку. Советую всегда им проверять.

> навешанными на устаревшее говно мамонта под названием http, который не способен в динамику


А как надо сделать по твоему? Что вместо HTTP? Как реализовать динамику?

> То есть текст порядка 1.5мб осиливает, а далее уже нет.


В чем ошибка? Что пишется? Давай разберемся, так не должно быть. 3 мегабайта ни для HTTP, ни для PHP не проблема.

> В чем ограничение собственно в html форме textarea или в php?


А что пишется в сообщении об ошибке или в логе? У тебя выводятся ошибки?

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

- ошибки сохраняются в лог ошибок. Можно открыть его и почитать. Если ты запускаешь код на локалхосте, у себя, то лог хранится в папке Апача (обычно она называется logs) и имеет название вроде error.log (в линуксе в папку /var/log/apache2 ) . Если на хостинге — там либо есть файл error.log либо раздел в панели управления, где лог можно посмотреть

- также, ты можешь включить отображение ошибок. Открой файл php.ini, поставь там display_errors = On и error_reporting = E_ALL и перезапусти сервер. Теперь ошибки должны выводиться на экран.

> у меня была цель наконец-то создать хоть какую-то связку из html+php, а то только на идеоне пхп дрочить уже нет больше сил


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

$_POST['text'] = ...;

Хотя, как по моему, так запускать в консоли удобнее чем через браузер.
#173 #406187
>>406182

\p{L} ищет любую букву на любом языке. Почитай-ка, у юникодных символов есть свойства: http://php.net/manual/ru/regexp.reference.unicode.php
#174 #406188
>>406176

Ну и конечно, минус это не слово.
#175 #406189
>>406167

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


Погоди, а какие кодировки в БД (с уймой данных в кириллице) нынче предпочитают модные и продвинутые программисты? Все UTF-8 используют что ли? И все php-скрипты обязательно в UTF-8?

Означает ли это, что если я экспортирую куда-нибудь во внешние файлы все данные из таблиц своей БД, а потом создам новую в UTF-8 и импортну прошлые таблицы, то смогу беспрепятственно и без костылей работать с библиотекой PHPExcel, для которой UTF-8 родной? Лал, лень возиться, проще на двоще спросить.

>Ты делаешь большую ошибку что внутри скрипта исплоьзуешь эту кодировку.


Мне сложно описать тебе всю кулстори, скажем так, я не веб-разработчик, уже не студент, но работаю в около-ИТ сфере. Слегка знаю php, организацию баз данных и на очень слабом уровне JS; надо вследствие производственной необходимости разработать узкоспециализированное веб-приложение, которое и вовсе будет работать в мелкой локалке. Функционал сайта довольно широкий, примитивное знаение джумлы не помогло бы реализовать, а серьёзное изучение (потому что сайт-визитка веб-портал не катят которые я бы мог быстро реализовать не катят) отняло бы много времени. В случае с другими CMS, ещё больше.
Уже почти забацал, завершаю. Это уже даже превратилось в полухобби, нежели в серьёзное задание/поручение, от этого можно было даже отказаться/забить, з/п я так и так получаю и получу; я даже не уверен, будет ли оно серьёзно использоваться.
#176 #406191
>>406176

Ты неправильно пишешь тег textarea:

<textarea .... /> <-- вот тут слеш в конце не нужен.

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

php freq.php text.txt | head -10

Или надо оставить только слова, содержащие определенные буквы:

php freq.php text.txt | grep 'меч'

Или надо отсортировать результат:

php freq.php text.txt | sort

Ну может конечно ты пока все это не умеешь, жаль, но советую потом изучить основы командной строки и bash сотоварищи. По основам у меня даже мини-урок сделан (увы, команды head, grep и sort в нем не описаны): https://gist.github.com/codedokode/10539568

Ну и добавлю еще раз, веб-технологии не такие и плохие. Сообщество вокруг них по моему самое большое и активное, постоянно появляются новые инструменты, библиотеки, браузеры развиваются и т.д. Можно сказать, передний край.
#177 #406193
>>406189

> Все UTF-8 используют что ли? И все php-скрипты обязательно в UTF-8?


Да. В отличие от 1251 которая содержит всего 255 символов или около того, utf-8 позволяет хранить данные на любых языках и потому это стандарт дефакто.

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

> Означает ли это, что если я экспортирую куда-нибудь во внешние файлы все данные из таблиц своей БД, а потом создам новую в UTF-8 и импортну прошлые таблицы, то смогу беспрепятственно и без костылей работать с библиотекой PHPExcel


Да, и не только с ней.

Тут пишут: http://petrenco.com/mysql.php?txt=141 — хватит 1 SQL запроса, если у тебя все верно хранится то MySQL сама может конвертировать. Не забудь сделать бекап.

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


Ну ок. По крайней мере теперь, если ты будешь делать следующий проект, ты будешь знать какую кодировку выбирать.
#178 #406194
>>406193
Благодарю.
#179 #406205
>>406191

Я уже читал статью по консоли, спасибо огромное что ты их делаешь. Но прост такому хую как я, который отвык от кропотливой умственной работы трудно учиться без какой-либо системы. Если учебник по пхп еще представлял из себя какую-то последовательность с упражнениями, которые как раз и нужны большинству нубов в большом количестве имхо, то дальше идет просто гора инфы за ктотрую фиг пойми с какой стороны браться и фиг знает как применять слету.
sage #180 #406208
Немного не совсем по пхп, но я вот никогда вебом не занимался. Поясните в чём отличие событийно-ориентированного подхода как в Node.js от подхода в пхп? Я так понимаю в ноде для каждого запроса на сервере вызывается листенер (Где ивент=запрос клиента) в отдельном потоке (Действительно в отдельном?). А в пхп тогда как, для каждой сессии клиента (не запроса) держится отдельный поток?
#181 #406209
>>406186
[Sat Nov 15 16:32:15.131525 2014] [:error] [pid 1236] [client 127.0.0.1:60549] PHP Warning: Unknown: POST Content-Length of 8721899 bytes exceeds the limit of 8388608 bytes in Unknown on line 0, referer: http://wea.net/
[Sat Nov 15 16:32:15.132119 2014] [:error] [pid 1236] [client 127.0.0.1:60549] PHP Notice: Undefined index: text in /var/www/wea.net/public_html/action.php on line 11, referer: http://wea.net/

Вот такое пишет в логе апача по указанному тобой адресу.
#182 #406210
>>406208
Сажа приклеилась.
#183 #406212
>>406209
Собственно это я попытался впихнуть две книги первых Властелина колец в форму. Судя по всему метод post не принимает больше 8 мегабайт, хотя не знаю откуда им там взяться когда текстовые файлы вроде как весят по 800кб, и должно быть ну максимум 2мб в буфере.

файл php.ini не нашелся на виртуалке вообще. Там линукс и устаавливал через apt-get, посмотрел мануал http://php.net/manual/ru/configuration.file.php и возможных файлов php-apache.ini тоже не найдено.
#184 #406213
Решаю задачу с картой и поиском минимального пути. Вопрос появился, а я вообще в правильном направлению пишу или это говно и нужно все переделать?

http://ideone.com/7XFU2U

P.S. Я еще не искал минимального пути и не делал, что бы наш клиент не ходил по кругую
#185 #406224
>>406212

В линуксе конфиги в /etc

Там вроде бы /etc/php5/apache2/php.ini и папка php.d

И тебе лучше не править php.ini а добавить свой в папку php.d, например

username.ini

и в нем писать что надо. Не забудь перезапустить Апач

sudo service apache2 restart

Проверить текущие настройки можно php -i в консоли или файлом <?php phpinfo(); в браузере.
#187 #406226
>>406213

Я бы советовал посмотреть на существующи алгоритма поиска пути и выбрать который больше нравится:

https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%BF%D1%83%D1%82%D0%B8
#188 #406228
>>406213

Так как со своим алгоритмом ты еще намучаешься. Хотя код выглядит более-менее норм
#189 #406231
Совсем недавно ознакомился с регулярными выражениями и они меня увлекают, такая-то филологическая математика, скажите как часто они используются? И насколько действительно нужны?
#190 #406233
>>406228
Спасибо. Сейчас просто, как пример задачи хочу сделать его наглым перебором, а учитывая, что станций не много, то все будет работать нормально.

Просто интересовался не сделал ли я где-нибудь тупой ошибки.
#191 #406238
>>406231

По моим ощущениям, везде, где надо как-то задать шаблон для тексты или строки или заменить одну часть текста на другую. Так что действительно нужны.
148 Кб, 346x500
#192 #406239
>>406231
Прочти пикрелейтед. Ты залезешь в самые кишки регулярных выражених и постигнешь всю их глубинную суть.
#193 #406240
>>406239
О, спасибо, надо будет почитать.
#194 #406243
>>406158

>Правильно так и надо сделать. MPMapper может работать только с MPKeeper, а не любыми сущностями.


Интерфейс требует точного совпадения.

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


Это я просто на ходу переделывал. Было немного иначе. Логично, что бы маппер сам его вызывал.

>В принципе, afterInsert можно сделать пустым. Мы можем в beforeInsert проставить path, а CommentMapper его сохранит вместе с остальными полями (хотя так, получается, он должен знать об их наличии).


Так же логичнее. Коммент маппер не знает о тримаппере.

>Неиспользуемые функции удаляй


Просто забыл.

>И избавиться от работы с путем как со строкой напрямую.


В смысле?

>Тебе нужен логический оператор AND


Я думал, что это он и есть.

>Потому надежнее начинать отсчет с 1.


Отчет комментариев и начинается с 1. А это именно айди комментария. Либо нуль.

>C чего бы там будет пустая строка?


А в каком виде с бд приходит значение null?

>Потому предлагаю пожертвовать абстракцией и оставить ORDER BY path либо сделать в MPMapper методы для выборки с учетом иерархии.


Я пришел к такому же выводу, пока читал! хотя мне понравилась идея с query builder'ом

Больше всего меня в моем варианте волнует первый пункт - с параметром типа HMember в MPMapper'е. Но интерфейсы же другого не позволяют, да?
#194 #406243
>>406158

>Правильно так и надо сделать. MPMapper может работать только с MPKeeper, а не любыми сущностями.


Интерфейс требует точного совпадения.

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


Это я просто на ходу переделывал. Было немного иначе. Логично, что бы маппер сам его вызывал.

>В принципе, afterInsert можно сделать пустым. Мы можем в beforeInsert проставить path, а CommentMapper его сохранит вместе с остальными полями (хотя так, получается, он должен знать об их наличии).


Так же логичнее. Коммент маппер не знает о тримаппере.

>Неиспользуемые функции удаляй


Просто забыл.

>И избавиться от работы с путем как со строкой напрямую.


В смысле?

>Тебе нужен логический оператор AND


Я думал, что это он и есть.

>Потому надежнее начинать отсчет с 1.


Отчет комментариев и начинается с 1. А это именно айди комментария. Либо нуль.

>C чего бы там будет пустая строка?


А в каком виде с бд приходит значение null?

>Потому предлагаю пожертвовать абстракцией и оставить ORDER BY path либо сделать в MPMapper методы для выборки с учетом иерархии.


Я пришел к такому же выводу, пока читал! хотя мне понравилась идея с query builder'ом

Больше всего меня в моем варианте волнует первый пункт - с параметром типа HMember в MPMapper'е. Но интерфейсы же другого не позволяют, да?
124 Кб, 1280x274
#195 #406261
Я сделал задачу на поиск минимального пути, но еще не исправлял код. Посмотрите, пожалуйста и скажите, что стоит делать, что нет и если не сложно ткнуть носом в ошибку

http://ideone.com/ijjFLe

пик-рандом
#196 #406269
>>406225
Примного благодарен
#197 #406270
>>406261
На 17ой строчке ошибка.
15 Кб, 958x651
68 Кб, 1366x650
Yii1. Создание блога на Yii #198 #406271
http://yiiframework.ru/doc/blog/ru/post.model
При создании записи в блоге такая ошибка. Смущает, что в описании ошибки VALUES (:yp0, :yp1, :yp2, :yp3), хотя я писал совсем другое
#199 #406272
>>406271

Прочитай про внешние ключи если не знаешь что это (хотя надо бы знать): http://denis.in.ua/foreign-keys-in-mysql.htm

В твоем случае ты вставляешь post в котором нет или непраивльная ссылка на user.
#200 #406273
>>406243

Не понимаю. в чем проблема. Наследование интерфейсов прекрасно работает:

http://ideone.com/aTWxt9
#201 #406274
>>406243

NULL можно передаватаь и принимать из БД.

> А в каком виде с бд приходит значение null?


В виде PHP значения NULL, проверь:

$q = $pdo->prepare('SELECT NULL');
$q->execute( ); // интересно, а нельзя без execute, сразу fetchColumn?
$result = $q->fetchColumn( );
var_dump($result);

Но не стоит путать NULL и отсутствие результатов:

$q = $pdo->prepare('SELECT FROM t WHERE id = -1');
$q->execute( );
$result = $q->fetchAll( );
var_dump($result); // array( )
#202 #406276
>>406272
В таблице tbl_users есть запись с id 1. Если я его вписываю в форму, всё равно ошибка остаётся
#203 #406277
>>406276

Между «вписываю в форму» и «выполняется запрос» есть немало слоев кода. Изучи код и разберись какой запрос идет в таблицу и попадает ли эта 1 туда.

Например в запросе на скриншоте я вижу что author_id там не указан.
#204 #406278
>>406277

Из чего можно сделать вывод что ты где-то накосячил. Возможно в relations() или rules()

Почитай теорию что ли: http://www.yiiframework.com/doc/guide/1.1/ru/database.overview (весь раздел)
#206 #406284
>>406273
Ты не понял.
У меня Маппер реализует интерфейс, в котором задана форма функции beforeInsert(TreeMember $member);
TreeMember - другой интерфейс, который реализуется классом MPKeeper.
Так вот в маппере я не могу написать функцию beforeInsert(MPKeeper $member), так как интерфейс там требует TreeMember. Вот.
#207 #406309
У меня крыша едет. Скажите пожалуйста, какого фига оно не сохраняет? $key в массив $ways?!

http://ideone.com/ocwDYh
#208 #406327
>>406309
Я эту задачу делал полтора месяца, ночами не спал. До сих пор в кошмарах снится.
#209 #406342
>>406327
Чего так долго?
#210 #406347
>>406224 >>406225

спасибо, в общем разобрался, сначала было превышено ограничение на пост, потом после того как я продолжил увеличивать пасту до размера полного властелина колец помноженного на два у меня вылезла проблема нехватки выделенной памяти для скрипта, тоже прогуглил и поправил в пхп.ини что нужно.
Делаю это в учебных целях и понимаю что не нужно такими вещами злоупотреблять, но заметил одну особенность. Вот скажем копирую я кусок текста, который лежа в текстовом файле занимает 20мб места, а у меня мой сайт выдает ошибку и в логах соответственно написано что пост превышает допустимый размер в 64мегабайта Кто может объяснить мне эту занятную штуку?
#211 #406348
>>406327
Так долго делал что ну просто обязаны быть бумажка или картинка с наброском "проекта". Покажи что нибудь или расскажи что она делает, а то лень разбираться.
#212 #406352
>>406348
Нет никакого проекта, после долгих попыток осилить рекурсию, я таки взял другой готовый алгоритм поиска пути в википедии и тупо писал код по этому алгоритму. Сразу дело пошло, за 2 или 3 дня управился.
https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%94%D0%B5%D0%B9%D0%BA%D1%81%D1%82%D1%80%D1%8B
#213 #406355
>>406352
Ты хоть расскажи что она делает.
#214 #406357
>>406355
Там же описан алгоритм. Мне пересказать тебе статью?
#215 #406369
>>406357
Расскажи о своей программе. Если ты не в силах этого сделать, тогда глупо рассчитывать на помощь. Как говорится, телепаты в отпуске.
#216 #406370
>>406369
На какую помощь? Это не мне помощь нужна, а ему >>406309, я то сделал её еще в августе.
#217 #406381
Аноны, если понимаешь что можешь решить вот эти задачи http://archive-ipq-co.narod.ru/i-am-smart.html (правда без применения ООП) это о чём-нибудь говорит?
#218 #406383
>>406381
Ну так сделай если можешь, или ты только пиздеть горазд? Я вот сейчас прочитал первую и захотлось её решить, собственно чем и пошел заниматься.
#219 #406384
>>406381
Нужно порешать. Иначе, как правило так и бывает, возможно просто переоцениваешь свои способности.
#220 #406388
>>406383
>>406384
Это да, тут без вопросов, просто хотелось бы знать, что значит если допустим какой-то анон смог их решить, что можно сказать о его знаниях? Он достоен позиции стажёра?
#221 #406390
>>406381
Первое задание выглядит простым на первый взгляд. Второе трудное. А вот третье я вообще понятия не имею как решать. Как работать со временем? Как подсчитывать вызовы функций? Ни с чем подобным нигде не встречался еще.
#222 #406395
>>406390
Во втором задании выделяем регулярными выражениями всё то что идёт после равно и заканчивается запятой, из этих значений формируем массив. Из ключей также формируем массив, а затем через foreach их объединяем в один массив, или есть какие-то подводные камни?
#223 #406399
>>406395
Хм, seems legit. Так что насчет третьей? Есть догадки?
#224 #406400
>>406388
Да, пожалуй. Только к этому нужно добавить работу с файлами и БД. И можно искать работу за еду ради опыта, то есть стажером.
#225 #406402
>>406399
Проверить количество вызовов можно при помощи статической переменной внутри функции. А насчёт не чаще чем раз в 2 секунды, помню когда находил выражение которое определяет время работы скрипта, там суть в том что кажется сравнивается абсолютное время в начале работы скрипта и в конце, вот имея два таких значения может как-то можно поставить условия разницы между ними не более 2 секунд.
#226 #406403
>>406400
Кстати, поясни если не тяжело Стажёр!=Джуниор, верно?
#227 #406404
>>406347

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



При посте данные кодируются через процентное кодирование может быть в этом дело? Попробуй вставить короткий текст из нескольких русских слов, открыть инспектор (Ctrl + Shift + I) на вкладке Network и отправить форму. И посмотри, как закодированы данные. Если там коды типа

%c2%f1

То это и есть процентное кодирование. Чтобы не тратить на него память. можно поменять тип формы с

application/x-www-form-urlencoded

на

multipart/form-data

И опять же посмотреть что поменяется.

ссылка: http://htmlbook.ru/html/form/enctype
#228 #406407
>>406403
ХЗ. Жуниор это просто такое слово: младший, помощник, ребенок с именем как у отца. Конечно у нас оно интерпретируется по принципу "кто во что горазд", так что нужно просто смотреть на требования и обязанности.
#229 #406408
>>406381

Я сейчас посмотрел, там кроме 6-й все элементарно.

От джуниора обычно требуют знания используемых языков (php, html. js и тд), то есть человек должен быть способен сделать небольшое веб-приложение например, может быть поверхностное знакомство с какой-то библиотекой или фреймворком.

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

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

Джуниор > Стажер
#230 #406409
>>406381

ООП надо знать без вариантов. Ничего сложного в нем нет, у меня в учебнике есть урок, который любой осилит (по крайней мере жалоб что что-то непонятно, еще не было, а решенные задачи на оОП были).
#231 #406412
>>406381

>Аноны, если понимаешь что можешь решить вот эти задачи


Приступай к чему-то сложнее, очевидно.
#232 #406417
>>406284

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

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

Соответственно надо либо отказаться от определения beforeInsert в HierarchyMapper, либо отказаться от сужения требований к аргументам insertBefore. Мне кажется, лучше вынести insertBefore из HierarchyMapper.
#233 #406418
>>406284

Ой. есть еще третий вариант: оставить все как есть и ничего не менять. Он тоже годится.
#234 #406420
>>406309

Сдампь чему равно $key и $target перед if.
#235 #406423
>>406205

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

Вот, смотри:

https://gist.github.com/codedokode/9424217
https://gist.github.com/codedokode/d7e7f11449fc3bcb24b4

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

Тебе понадобится знания HTML, CSS, MySQL. Вот ссылки на инфу по MySQL:

https://gist.github.com/codedokode/10539213 (там еще есть задачки, если ты захочешь их решить, я с удовольствием проверю)

Вот ссылки на путь HTML: https://gist.github.com/codedokode/58ebc90bd006baf4b35c

Заметь что пока что тебе не надо изучать SQL или HTML досконально. Сейчас главное вообще научиться делать приложения. Но потом желательно пройти оба этих урока полностью. Ну и JS потом изучить (по нему тоже есть задачи).
#236 #406430
>>406403
Ну хз где и как, но как по мне должно быть так:

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

Джун - способен решать самые простые задачи по работе самостоятельно, то есть его можно закидывать этими самыми простейшими задачами без того что бы ему что-то объяснять и тратить на него время других сотрудников. Ему обязаны платить.
#237 #406434
>>406208

> Я так понимаю в ноде для каждого запроса на сервере вызывается листенер (Где ивент=запрос клиента) в отдельном потоке (Действительно в отдельном?).


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

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

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

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

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

> А в пхп тогда как, для каждой сессии клиента (не запроса) держится отдельный поток?


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

В Php состояние не сохраняется между запросами потому какой поток будет обрабатывать запрос клиента, не важно.
#237 #406434
>>406208

> Я так понимаю в ноде для каждого запроса на сервере вызывается листенер (Где ивент=запрос клиента) в отдельном потоке (Действительно в отдельном?).


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

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

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

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

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

> А в пхп тогда как, для каждой сессии клиента (не запроса) держится отдельный поток?


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

В Php состояние не сохраняется между запросами потому какой поток будет обрабатывать запрос клиента, не важно.
#238 #406437
>>406208

Главный цикл ноды выглядит примерно так:

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

- если нет событий, ждать

- вызвать обработчик для каждого

- перейти к п.1

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

Соответственно если какой-то обработчик долго работает, то пока он не завершится, ничего другого не происходит.
#239 #406439
>>406208

> держится отдельный поток?


Никто его не держит. PHP скрипт работает по принципу принял данные — обработал — отдал ответ — завершился.
93 Кб, 1306x673
#240 #406442
>>406404
Судя по твоей ссылке у меня там значение text/plain так как просто ставятся плюсики вместо пробелов.
#241 #406443
>>406243

>>И избавиться от работы с путем как со строкой напрямую.


> В смысле?


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

— превратить path в массив номеров
— превратить массив номеров в path

Тогда можно легко поменять способ хранения path например с цифр и точек на буквы и минусы или использовать бинарный формат, храня path в виде байтов.
#242 #406444
>>406261

> PHP Notice: Undefined variable: min_way in /home/V2xgxL/prog.php on line 158


> PHP Notice: Undefined variable: path in /home/V2xgxL/prog.php on line 158


Обращаешься к несуществующей переменной

> PHP Warning: Invalid argument supplied for foreach() in /home/V2xgxL/prog.php on line 147


Вместо массива ты передаешь в foreach что-то другое.
#243 #406445
>>406395

> всё то что идёт после равно и заканчивается запятой



a="Hello, world=1", b=2

Тут твой алгоритм ошибется.
#244 #406449
>>406442

У тебя www-form-encoded наверно. Тип данных указывается в заголовках запроса в Content-Type.

То что ты видишь на экране это раскодированные данные из тела запроса. Надо смотреть само тело, например в Хроме для этого можно жать на «view raw» или как-то так. В фаерфоксе наверно никак.

Ты можешь получить тело запроса на стороне php сделав

$body = file_get_contents('php://input');
var_dump($body);

Это не работает для типа multipart.

Мануал: http://php.net/manual/ru/wrappers.php.php

text/plain это что-то другое. В стандарте написано что это когда значения полей передаются в виде многострочного текста: http://www.w3.org/TR/2011/WD-html5-20110525/association-of-controls-and-forms.html#plain-text-form-data

Попробуй поставить multipart, объем должен уменьшиться.
#245 #406450
>>406442

Я погуглил, метод text/plain это когда данные кодируются построчно в виде

user=Иван
text=Привет мир

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

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

Тестовая страница: http://jsfiddle.net/gLapztra/
#246 #406454
>>406450
text/plain используется например для CORS non-GET запросов чтобы не слались лишние OPTION можно не только text/plain, но порой это удобнее.
#247 #406458
>>406449
>>406450
>>406454

Ты такой крутой, и похоже действительно сечешь, и тебе не лень с этой ебалой разбираться, но мне то что сделать в итоге? Мне вписать в атрибут формы multipart/form-data
и проверить стал ли мой сайт переваривать тексты большего объема?
#248 #406470
>>406458

да. И увеличить ограничения в php.ini
#249 #406473
>>406470
Так я ограничения уже увеличил, на объем поста и на память выделяемую скрипту.
#250 #406474
>>406381
Вот первая задача http://ideone.com/NdwOav
Писать максимально кратко не хотелось, а то без интерактива скучно. Но если выкинуть всякие эхи и тупо выкидывать ретурном при первом несовпадении, то функция будет в два раза короче минимум. Базарю))
1024 Кб, 500x213
#251 #406476
>>406474

> написанны

#252 #406489
>>406476
стеклянны, оловянны, деревянны
#253 #406497
>>406417

>Мне кажется, лучше вынести insertBefore из HierarchyMapper.


Тогда нет смысла в HierarchyMapper'е.
#254 #406516
Господа, всем привет. Я к вам с платиной.

Почему пишете на PHP? Точнее, если забыть об аргументе «фриланс, CMS, заказчики», есть еще причины? В 2014 году есть и другие интересные варианты.
#255 #406521
>>406516

Почему нет? Язык простой, востребованный, работает, кроссплатформенный, без толпы неучей-хипстеров в коммьюнити.

>>406497

Получается да.

>>406474

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

Допустим я хочу вызвать твою функцию из своей прогаммы. Если все в порядке, моя программа должна написать YES SIR если нет то NO SIR. Как это сделать, не меняя твой код?

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

Оформление кода также страшноватое. Кто ставит так отступы? В каком стандарте это описано?

Если это задача для собеседования, на это обратят внимание. Сама функция названа бессмысленно, что за array10? Функции принято назвать начиная с глагола, в стиле сделайЧтоТо.

Ну и по коду. Это можно написать в 2-3 строчки без циклов.
#256 #406523
>>406521

>Получается да.


Я хотел вызов в коммент маппере сделать более общим.
#257 #406524
>>406473

А тип поменял на multipart? Все теперь работает?
#258 #406526
>>406523

Ну вот, есть 2 варианта:

— убрать insertbefore из интерфейса HierarchyMapper, но зато написать в MPMapper MPKeeper в тайп хинт
— не убирать, оставить как есть

То есть можно остаивть как есть.
#259 #406527
>>406526

Я имею в виду, убрать insertBefore из интерфейса, но оставить в MPMapper.
#260 #406538
>>406527
Я понял. И я оставлю как есть.
#261 #406558
Господа, допустим, я присоединяю очень много таблиц джойнами, ведь там как, допустим, есть у тебя кино, ты присоединяешь к нему таблицу со сценаристами (которых у этого кино, например, 3), и на выходе получается массив из 3 строк–элементов — одно и то же кино, только с разным значением поля с именем сценариста. Так вот, если у кино таких отношений много, то получается ад и пизда — очень много строк, с которыми неудобно работать.

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

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

Посоветуйте, что-нибудь, пожалуйста.
#262 #406575
>>406524
Я больше пердолился вчера с установкой хрома, тип в описании элемента тоже прописал, потом уходил поспать на пару часов.
#263 #406589
ОП, как правильно писать в ДБ составные поля? Например, мне нужно хранить часы работы организации на наделе. Писать в таблицу организаций 7 полей (по дням недели) с часами работы, обедом, перерывами? Засовывать все в 1 поле в каком-то формате? Как потом по простому разобрать ее в php?
#264 #406590
#265 #406606
>>406558

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

>>406589

Есть 2 варианта: с использованием возможностей БД и реляционных отношений и без.

Первый — это сделать таблицу типа work_time такого вида

company_id | weekday | from | to
1 | 1 | 12:00 | 18:00
1 | 2 | 12:00 | 16:00
....

Второй — хранить данные например в JSON внутри поля.

[{"day": "monday", "from": "12:00", "to": "16:00"}, ...]

(насчет удобного варианта стоит еще подумать).

Третий — свой формат типа

Mo 12:00-16:00, Tu 12:00-18:00

Но по моему это уже лишнее, JSON гораздо проще использовать.

В любом случае, на стороне PHP стоит сделать представление расписания в виде объекта, который умеет распаковыать/запаковывать данные из БД, таким образом чтобы способ хранения был надежно в нем инкапсулирован и код просто вызвал его методы, вроде isWorkingAt($time)
#265 #406606
>>406558

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

>>406589

Есть 2 варианта: с использованием возможностей БД и реляционных отношений и без.

Первый — это сделать таблицу типа work_time такого вида

company_id | weekday | from | to
1 | 1 | 12:00 | 18:00
1 | 2 | 12:00 | 16:00
....

Второй — хранить данные например в JSON внутри поля.

[{"day": "monday", "from": "12:00", "to": "16:00"}, ...]

(насчет удобного варианта стоит еще подумать).

Третий — свой формат типа

Mo 12:00-16:00, Tu 12:00-18:00

Но по моему это уже лишнее, JSON гораздо проще использовать.

В любом случае, на стороне PHP стоит сделать представление расписания в виде объекта, который умеет распаковыать/запаковывать данные из БД, таким образом чтобы способ хранения был надежно в нем инкапсулирован и код просто вызвал его методы, вроде isWorkingAt($time)
#266 #406614
Запустил у себя на компе локальный сайтик и начал делать уроки с сайтика опа, появилось пару вопросов, связанных с echo:
1) Зачем заключать переменные в фигурные скобки, хотя и без них выводит?
2) Почему у меня в echo на '\n' не идёт переход строки, а просто добавляется пробел?
#267 #406647
>>406614
Используй хтмл тег <br>
#268 #406653
http://ideone.com/31WQlL

Мне надо распечать эти строки, как таблицу, почему эта хрень съезжает?
#269 #406654
>>406653
Лол, у меня так же было. Приходилось для каждого столбца свою цифру подбирать на глаз.
#270 #406662
>>406654
Но почему, блядь? Все же верно.
#271 #406664
>>406662
Я сам не могу понять в чем проблема.
#272 #406667
>>406664
Может оп нам поможет, а то как-то обидно
#273 #406670
>>406653
\t или printf
#274 #406675
http://ideone.com/EXhH4y
Хочу через функцию изменить значения внутри массива но насколько я понимаю внутри функции не распознает сам массив, что не так?
#275 #406676
>>406675
У тебя функция принимает аргумент $c, но внутри она работает с массивом $d. Откуда ей знать, что это за массив если ты его в неё не передаешь?
#276 #406678
>>406614

Чтобы переносы строк нормально работали и в браузере и в ideone (и в консоли), можно использовать для этого \n, а в начале программы поставить

header("Content-Type: text/plain; charset=utf-8");

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

Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.
#277 #406679
>>406614

> Зачем заключать переменные в фигурные скобки,


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

echo "{$x}kg {$w['hello']}";

>>406653

> str_pad(


Эта функция не поддерживает многобайтные кодировки, в том числе русские буквы в utf-8. Она считает русскую букву как 2 символа. Подробнее: https://gist.github.com/codedokode/ff99e357e9860ea169b8

То есть надо отказаться от str_pad.
#278 #406682
>>406675

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

Извне внутрь функции можно передать значения с помощью аргументов (в скобках), а вернуть из функции через return.

В сомнительных учебниках ты можешь увидеть советы вроде использовать global или $GLOBALS (эти конструкции позволяют из функции получить доступ к глобальным переменным), не используй их, так как код будет некачественный.
#279 #406683
>>406670

printf не умеет правильно считать русские буквы, так что это плохой совет использовать printf для выравнивания колонок.
#280 #406684
>>406682
Тогда получается что не выйдет использовать функцию для изменения массива и придется делать без неё? Странно, нагуглил задачки по PHP http://www.masterwebs.ru/topic/5975-zadachi-na-php-dlja-nachinajushih/ там в Задаче №3 просили именно функцию составить
#281 #406687
>>406684
Почему же не выйдет? Все можно сделать, если знать как. Тебе нужно прочитать урок про функции у ОПа или еще где-нибудь, потому-что ты пока плохо понимаешь как они работают.
http://ideone.com/AFiVJh
#282 #406690
>>406687
Спасибо, всё никак не мог понять как же передать внутрь функции массив и гугл не хотел помогать
#284 #406692
#285 #406725
Проверьте задачу с функцией, всё правильно или нет - http://ideone.com/iUn2JX
#286 #406743
>>406725

Считает верно. Единственное, что выглядит не очень, это вот это место:

> $current = $current$percent + $service - $monthlyPayment;


> $payed += $monthlyPayment;


>\t\t\tif ($current < 0) {


>\t\t\t\t$payed += $current;


Лучше бы не загонять долг в минус, а просто считать сколько осталось заплатить в последний месяц и выплчивать только эту сумму.
#287 #406780
>>405044
Товарищи, напишите скрипт который разошлёт по вкудахтам тян 18-20 лвл из дс-2 сообщение"привет ты не ездила в лагерь 7 лет назад, у тебя ещё был sonyericsson k750i." с меня пиво в ДС-2, ну или почтой отправлю.
#288 #406781
>>406780
Бляядь, надеюсь это ультратолстота.
73 Кб, 720x785
#289 #406798
>>406383
В общем вот оценивайте идею первой задачи из http://archive-ipq-co.narod.ru/i-am-smart.html

Может быть тесты и не сильно изящно реализованы, но ведь главное это сделать функцию. Вот на неё смотрите.
#290 #406799
>>406798
Блядь, код забыл.
http://ideone.com/1mmHVE
50 Кб, 800x800
#292 #406812
>>406800
словарь говорит мне что neat = четко, стало быть сочту за комплимент.

Тем временем решил вторую задачку.
http://ideone.com/BatUFr
Критика? Дыры?
#293 #406815
>>406798

Неплохо. Стоит добавить еще тайп хинт в функцию. Также, можно использовать array_diff чтобы обойтись без сортировки.
#294 #406817
>>406798
Там ключи нужно сравнивать, а не их значения.
#295 #406818
>>406817
А он что делает?
#296 #406821
>>406812

http://ideone.com/QRQqU2
Не работает если в кавычках есть запятая.

Также, кавычки не должны сохраняться то есть a="hello" должно давать просто строку 'hello', а не строку '"hello"'. То же с бекслешами, \" должен вставлять в строку только символ кавычки.
34 Кб, 471x232
#297 #406829
>>406821
Там дан конкретный пример строки и настолько же конкретный ответ который нужно получить, если в строках бы присутствовали дополнительные запятые, то решение был бы совершенно другим.

>Также, кавычки не должны сохраняться то есть a="hello" должно давать просто строку 'hello', а не строку '"hello"'. То же с бекслешами, \" должен вставлять в строку только символ кавычки.


Я нихуя тебя не понимаю. С чего это не должны, картинку посмотри. Ну или давай я для тебя вырежу и подсвечу.
#298 #406830
>>406815

>Неплохо. Стоит добавить еще тайп хинт в функцию.


вут?
sage #299 #406831
>>406830
Гугли, мразь
#300 #406832
>>406830
function matchKeys(array $testArray) {
#301 #406833
>>406831
что эт у тебя пердак подгорел? Пытался меня говном накормить постом выше да обосрался сам?
#302 #406835
Ребяты, как сделать загрузку файлов в файлообменнике? Ну т.е. сделать ссылку на загрузку файла к клиенту? Есть аттрибут download к <a>, но он не везде пашет.
#303 #406836
>>406835
типо при клике на ссылку файл качать что ли?
#304 #406840
>>406836
Тип, да.
#305 #406847
>>406840
указывать на ссылке прямой путь к файлу
#306 #406849
>>406815
А тебя не смущает что все вылетит нахуй с критикал эррором если туда подадут не массив? В моем случае просто выдаст такой же false и все продолжит работать дальше.
#307 #406859
>>406847
Если это, например, картинка, то он её просто откроет. А надо чтобы предложил сохранить.
#308 #406880
Такая проблема.
$app->get('/files/(:id)', function($id) use ($app) {
\t$fileInfo = $sharing->getFileInfo($id);
\t$app->render('file_temp.php', array('fileInfo' => $fileInfo));
});
Как мне сделать, чтобы $sharing(object) был виден внутри функции?
#309 #406885
>>406880
Так ты же здесь
$app->render('file_temp.php', array('fileInfo' => $fileInfo));
передаешь массив с переменными, которые видны внутри рендера.
#310 #406887
>>406880
Или у тебя в $fileInfo = $sharing->getFileInfo($id) не видит $sharing? А что это и откуда оно вылезло?
#311 #406910
>>406885
>>406887
Всунул его в слим $app->sharing = new Sharing. Таки сделал прото-аплоадер. Только допилить, чтобы людям показывать можно было.
#312 #406913
>>406910

>Только допилить, чтобы людям показывать можно было.


Я тоже так думал. Вышло, что пилить и пилить. Так что кидай сразу.
Так что такое Sharing?
#313 #406914
>>406910
Ну и как бы сразу тебе предложу сделать этот объект через слим синглтон. Это же слим, да?
#314 #406928
>>406913

>Так что такое Sharing?


Класс с методами типа uploadFiles, getFileInfo, listAllFiles.
>>406914
Что за синглтон? Доки слима читал (по диогонали) нихрена не нашел толком.
#316 #406931
>>406928
http://docs.slimframework.com/ -> Singleton resources
И ты видишь этот объект везде, где виден $app. И если я правильно понял, как работает синглтон, то нельзя создавать еще экземпляры этого класса. Собственно в моем случае это fileMapper. Ты же видел здесь линк на мое решение не до конца это задачи?
#317 #406933
Ппц. Немогу найти git без gui. Раньше стоял у меня, а сейчас везде с gui и со своей оболочкой какой-то.
#318 #406935
>>406933
Так это. Даже с оффсайта гуи качается. Только не обязательно его использовать.
#319 #406936
>>406935
Тупо. Раньше же стоял у меня. Был только в коммандной строке и все. Хочу снова так.
#320 #406937
>>406936
Вспомнил. Когда начинал на руби ставил сборку со всяким. там было. Вот ведь...
#321 #406956
Помогите тупому нубу понять логику задачи "Граммар-наци" из части про регулярные выражения:

>в тексте есть слова «а» или «но» без запятой перед ними.



Как нужно искать ", а" или ", но" в тексте? Соединить условия "если перед и после а есть пробел, то перед первым пробелом должна быть запятая" или искать все, что не является запятой и пробелом перед а, после которой есть пробел? Как, кстати, соединить два условия, которые могут встречаться отдельно друг от друга в разных местах, в одном выражении?
#322 #406970
>>406956

Искать вещи типа

любая буква пробелы слово «а»

Или воспользовать assertions: http://php.net/manual/ru/regexp.reference.assertions.php
#323 #406971
>>406829

Может я непонятно пояснил. Эти кавычки добавляет функция вывода. В самой строке их нет. Заметь что вокруг simple_value они тоже есть.

>>406815

Тайп хинт гуглится по словам «php тайп хинт» в Гугле. Он делает твой код гораздо лучше и наежнее и понятнее.

>>406849

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

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

Почитай про fail fast: http://habrahabr.ru/post/218325/
#324 #406973
>>406849

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

>>406829

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


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

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

>>406835

Надо например через htaccess добавлять при скачивании файла заголовок

Content-Disposition: attachment

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

Не забудь что загрузка файлов открывает уязвимость. Что если на твой файлообменник загрузить php файл? Он выполнится?
#325 #406974
>>406880

Через use может быть? Ты читал http://php.net/manual/ru/functions.anonymous.php ?

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

>>406910

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

http://docs.slimframework.com/#DI-Overview
#326 #406975
>>406973

>Что если на твой файлообменник загрузить php файл? Он выполнится?


Конечно. Я еще ничего не сделал, кроме как то, что я могу аплоадить и донлоадить. И как мне сделать что-бы они не выполнялись?
#327 #406976
>>406933

Это назвыается Msys Git (если ты под виндой). Он чисто в командной строке.

Может в инсталляторе гита можно не стаивть gui? Ну или ты можешь поставить его, но использовать только командную строку, открыв Git bash.
#328 #406977
>>406975
На, в принципе, чтобы скрипты не выполнялись. И хтмл не выводился. Переименовывать, а формат сохранять в базе данных? Или есть более адекватные способы? Типо просто запретить серверу запускать файлы с папки, а только передавать.
#329 #406978
>>406975

В предыдущем треде обсуждали:

>>403704
>>403706
>>403707
>>403724
>>403729

И далее по ссылкам. Можешь вообще предыдущий тред поиском по слову uppu почитать, там много советов и замечаний я давал анону.
#330 #406980
>>406978
А на чем, кстати, я остановился? Добавить поиск по файлам стоит?
#331 #406981
>>406978
Ну значит htaccess я могу отключить в отдельной папке и дочерних,а как на счет скриптов? Их тоже могу отключить?
#332 #406982
хм, анон, подскажешь в чем трабл?
http://ideone.com/FrzkbB
#333 #406983
>>406981

>а как на счет скриптов? Их тоже могу отключить?


Да, там же в htaccess
#334 #406985
>>406980

Стоит, желательно на сфинксе. У меня есть мануал:

https://gist.github.com/codedokode/10539366

Плюс в сети есть инструкции.

>>406981

php_flag engine off

Но это работает не везде. на хостинге например эта директива может быть отключена и файлы будут исполняемыми. Тогда надо использовать другой подход например переименовывать из в txt (и не забыть подсунуть нужное имя при скачивании).
#335 #406986
>>406982

> public function drinkCoffe($this) {


this это не обычная переменная и ее нельзя передавать как аргумент. Мануал http://php.net/manual/ru/language.oop5.basic.php
#336 #406987
>>406976

>Это назвыается Msys Git


Уже минут 20 устанавливается. Вирус мне подсунул! А я только шиндовс переставил!
#337 #407004
>>406986
Тогда какой аргумент передавать?
#338 #407008
Гайз, нужно замутить обратную связь для сайта, т.е. пользователь может ввести свои данные и отправить мне на мыло. Как это сделать, братишки, есть какой нибудь гайд? форма уже есть
#339 #407052
>>407008
передавай данные из формы через $_POST в http://php.net/manual/ru/function.mail.php
#340 #407056
Поясните.
есть пхп файл, в нем происходит такое:
\\какой-то пхп код
$js = "
какой-то js код
\\место куда я хочу вставить пхп код
какой-то js код
"
\\пхп код

в общем всё устроено так, что по ходу кода генерируется переменная js в которой собирается весь js код, а потом выполняется.
так вот, как мне вставить в js пхп код? Я делаю все как надо, закрываю теги, открываю, а оно всё равно не хочет.
Там ведь вообще по идее никакие теги не нужны, так как все происходит в пхп.
#341 #407058
>>407004

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

>>407056

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

Вставляй в JS код только значения переменных через json_encode и все. А код должен быть неизменным.
#342 #407059
>>407058
я охуенно согласен с тобой, но как раз я и есть тот, кому пришлось разбираться в этой параше.
#343 #407060
>>407056

Я перечитал вопрос и вообще тебя перестал понимать. Зачем вставлять в JS php-код если JS исполняется в браузере, а он не понимает php? PHP выполняется только на сервере и вставляить в JS его нет смысла.

Ты случайно не тот анон, который пару тредов назад отказался изучать php, но просил исправить ошибки в его коде? Если так то иди читай мануал сначала, напрмиер http://php.net/manual/ru/language.basic-syntax.phpmode.php .
#344 #407061
>>407059

Браузер не выполняет php. Потому вставлять php в JS бессмысленно.

Если ты исплоьзуешь php для генерации js кода то откажись. Алсо, перечитай мануал по ссылке выше в любом случае.
#345 #407062
>>407060
выполняется js скрипт. в ходе его выполнения я хочу записать в сессию кое-какие данные. js не работает с сессиями.
нет, я не тот анон.
#346 #407065
>>407061
я же написал, что я так не делаю. у меня есть охуенно огромный движок сайта, на тысячи строк и переделывать его уже не представляется возможным. тут винигрет из пхп, хтмл, и джс. мануал я давно перечитал
#347 #407066
>>407062

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



Как работают сессии, знаешь? Как данные попадают в $_SESSION после session_start? Куда они сохраняются после завершения скрипта?
#348 #407068
>>407066

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

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

Браузер отправляет запрос на сервер
На сервере выполняется php-код и формируется html-страница
Она отдается в браузер
Браузер отображает ее и выполняет скрипты в ней

Соответственно, JS не имеет никакого доступа к данным на сервере. По моему это очевидно. От того, что ты в JS код впишешь кусок php, ничего не поменяется. Так как php код выполняется до того как страниц отдается в браузер, а не после.
#349 #407072
>>407068
но ведь множество форм написаны на js, неужели, если у меня форма <option> работает без перезагрузки страницы, я не могу в зависимости от выбора в форме передать данные в сессию?
#350 #407073
>>407068
нагуглил, всё решается с помощью Cookie
#351 #407074
>>407072

Нет. Сессии хранятся на сервере. передавать только аякс запросом, и я подозреваю, что ты опять что-то хочешь сделать неправльно. Например, почему не сохранять эти данные в cookie или что лучше, localStorage?

> но ведь множество форм написаны на js,


Очевидно они сессии не используют
#352 #407075
>>407074
вот это и надо было посоветовать в первую очередь. спасибо
#353 #407079
у меня есть переменная, например $vovan. по ходу различных манипуляций у меня получается строка, тоже "$vovan". можно ли строку в переменную преобразовать?
#354 #407081
>>407079
Посмотри про eval(), но скорее всего ты делаешь что-то не то.
#355 #407104
получается, в IE куки по умолчанию отключены?
#356 #407110
>>407079

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

>>407104

Нет. с чего ты так решил?
#357 #407114
>>407110
оказывается нет, включены. но есть одна проблемка
устанавливаю я значение куки, всё отличненько во всех браузерах, кроме эксплорера. там значение куков теряется ни с того ни с сего. например смотрю я на var_dump($_COOKIE); и нужное значение установлено. щелкаю по какой-то внутренней ссылке, там тоже пишет, что есть. Но через несколько таких переходов значение исчезает, будто его и не было.
время хранения куки у меня 7 дней. да и в остальных браузерах работает адекватно.
#358 #407121
>>407114

Скорее всего, ты что-то делаешь неправильно. Открой F12 в ИЕ и посмотри там заголвоки ответов/запросов. ну и помни что размер всех кук на 1 домен может быть ограничен до 4 кб.
#359 #407123
>>407121
я просто тупой, никчемный лох и не установил путь куков. соответственно они сохранялись только на той странице, на которой происходило действие. теперь уже всё нормально.
#360 #407125
>>407123

Да ничего страшного, с куками легко запутаться. Но ошибку стоит искать в своем коде в первую очередь, и конечно отлаживать это надо не вардампом, а хотя бы просмотром заголовков — там больше информации.
#361 #407128
>>407125
у меня ие 11. я что-то не нахожу в инструментах разработчика никаких заголовков
#362 #407139
>>407128

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

Тут на картиинках есть http://msdn.microsoft.com/en-us/library/ie/dn255004(v=vs.85).aspx
#363 #407168
>>406982
В конструкторе должно быть
$this->name = $workers_name;
$this->level = $workers_level;
$this->chief = $is_chief;

В дочернем классе вместо $this->chief нужно parent::chief
#364 #407170
>>407168

>В дочернем классе вместо $this->chief нужно parent::chief


Зачем?
#365 #407172
>>406423
Я бы советовал делать файлообменник, но если это очень сложно то можно другую задачу.

Тебе понадобится знания HTML, CSS, MySQL

Ну вот какая еще есть задача для еще большего хуя, ктоторый совсем не может перескакивать с простых пхп-задач на изготовление полноценного сайта.
#366 #407182
>>407168
Смотри, а вот есть такой код?
Почему функция не использует $coffee заданую в дочернем классе?
#368 #407186
>>407170
Тебе нужно обратиться к родительскому свойству, а ты таким образом обрашаешся к локальному, задавая его неявно.
#369 #407189
>>407186
Но свойства и методы родительских классов передаются дочерним.
17 Кб, 655x288
#370 #407190
>>407189
Только не $thisом. Вот смотри пикчу. У тебя $this говорит "возьми из текущего класса свойство $chief и проверь его на true". Но у дочернего класса такого свойства нет и оно автоматически будет создано. А там лежит (кажется) NULL, то есть вернется false.
#371 #407193
>>407190
Но он ему через конструктор передает тру или фолс, как там будет null?

http://ideone.com/Eyq4fQ
#372 #407194
>>407193
Блин, я чето запутался. Просто сам только начал ооп ковырять. Ты не мог бы описать что должна делать программа? Я понял так: если Питер менеджер при это босс, то кофе ему давать в 2 раза больше. Так?
#373 #407195
>>407194

> Ты не мог бы описать что должна делать программа?


Я понятия не имею, я просто мимо проходил и увидел, что ты советуешь кому-то использовать parent:: и решил спросить что это такое и зачем это юзать, когда дочерний класс имеет точно такие же свойства (и методы тоже), как и родительский и через $this все должно работать?
#374 #407196
>>407195
parent обращается к свойствам и методам родителя, $this - к своим (есть еще аналогичное self::property). И свойства там есть у обоих классов, но они разные - присмотрись.
#375 #407197
>>407196
Ну епта, не совсем уж и аналогичное, иначе бы не было двух вариантов.
#376 #407198
Есть ли какой-то курс на русском или зарекомендовавшая себя книга по php? Правда-ли, что перед пхп нужно учить html, css, js и потом уже сам php?
Т.к все курсы, что я начинал сразу знакомили меня с переменными, а я даже хуй знает зачем они нужны? Ну повторяю я за учителем, делаю эти практические задание, только я всё равно не могу уловить суть.
Есть ли какой-то гайд для тех, кто захотел обмазаться php, видимо я должен ещё что-то знать до него.
#377 #407200
>>407198
Идешь на codecademy, делаешь все до чего дотянутся руки. Если к этому моменту не дропнешь, возвращайся в тред.
#378 #407201
>>407196>>407197

Бля, нихуя. parent и self похоже только для методов. щас
#379 #407202
>>407200
Но это того хуже, он ещё на английском.
#380 #407204
>>407196
В чем они разные? Там просто свойств у дочернего класса больше, чем у родительского.
#381 #407205
>>407202
Там элементарный английский+мощный форум. Если даже это не понимаешь, то тебе стоит начать с инглиша.
#382 #407206
>>407182>>407185
Если переменная $cofee это свойство данного класса, а не просто переменная внутри него, то внутри класса к ней нужно обращаться $this->cofee а не $cofee.
#383 #407208
>>407205
Спасибо босс, а что-нибудь из русского, если не осилю коудакадеми. Или же codeacademy это КЛАССИКА БЛЯТЬ ЭТО ЗНАТЬ НАДО и без этого никуда?
#384 #407209
>>407208
У опа же есть уроки, почему не начать с них?
#385 #407210
>>407208
Да нет, материала как говна на самом деле, просто ресурсов уровня кодкадеми на русском я не знаю. Можешь просто хуячить все по ОП-у и не заморачиваться. Зачем переменные? Очень просто, до того как говорить слова и выражать с их помощью свои мысли, ты выучил буквы. Так же и с переменными и другими языковыми конструкциями.
#386 #407211
>>406982
Короче там все было правильно, только $this в методах дочернего класса проебались. Вот исправленный вариант http://ideone.com/fV2VlR
#387 #407212
>>407209
Нам препод сказал, что новичок не должен тупо зубрить функции, а учиться нужно, работая с управляющими конструкциями пока не дойдет до автоматизма. Также неплохой практикой будет самому писать функции у которых будут такие же задачи как и у системных. И в конце концов, лучше написать быстренько функцию самому, не зная о существовании аналогичной системной, чем ебаться как макака пытаясь решить задачу готовыми функциями, но при этом с трудом собирать циклы и придумывать логические схемы.

В общем руководство опа хорошо для расширения кругозора, но не для старта с нуля.
#388 #407213
>>407212
Не знаю, по моему у Опа очень даже хороший учебник. И где ты там зубрежку нашел?
Сам я начинал с древнего говна "Робин Никсон -создаем динамические сайты с помощью PHP" и потом прорешивал учебник ОПа. Его мякотка в том, что ты не зубришь функции, ты их постоянно используешь, решая его задачи, потому что без них никак. В книжках же нужно просто переписывать код, ничего не решая, вот это и есть зубрежка.
#389 #407220
>>407213
Я там нашел список готовых функций в большом количестве. Когда знаешь основы это ОК. Если сразу начинать с этого материала, то выработается рефлекс - есть задача - ищи функцию, а не рисуй и реализовывай логику.
#390 #407222
>>407220
Ты в любом учебнике найдешь точно такой же список функций. Я не пойму, что ты хочешь вообще? В первых уроках ты изучаешь переменные, это и есть основы. Все остальное это уже готовые функции. А с твоим подходом тебе надо с ассемблера начинать.
#391 #407234
>>407222
Основы это "управляющие конструкции" - погугли что это такое, к которым нужно переходить после переменных и операторов. У опа же с места в карьер: поговорили о переменных и операторах и давайте делать программки используя готовые функции. А управляющими конструкциями будем пользоваться только в крайнем случае. Так оп знакомит нас с циклом for и заваливает кучей функций по работе с массивами. Все, больше к конструкциям (то есть принципам работы) мы почти не возвращаемся.
#392 #407238
>>407234
Что ты несешь? У ОПа они идут сразу после переменных. Вот первый урок:
http://archive-ipq-co.narod.ru/l1/conditions.html
Вот второй
http://archive-ipq-co.narod.ru/l1/conditions.html
#393 #407257
>>407238
Там for, if, foreach и в общем все. Ознакомься с полным списком http://php.net/manual/ru/language.control-structures.php
Хотя ты скорее начнешь рассуждать о нинужности последнего.
#394 #407258
>>407257
Там все это есть, кроме require который на айдеоне все равно не работает и goto(который нахуй не нужен)
#395 #407268
>>406971
Окей, прочитал и погуглил про тайм хинт и про фейл фаст, только я все равно не понял по какому принципу должна устроена входящая строка во второй задаче, и какой должна быть исходящая. Нужно больше правил указать.
#396 #407279
>>407268

> по какому принципу должна устроена входящая строка во второй задаче,



входная строка состоит из частей, разделенных запятыми. Частей может быть от 0 до бесконечности. В начале и конце части может также стоять любое число пробельных символов (то есть пробелов и переводов строк \n).

строка ::= (пробелы) (часть) (пробелы) , (пробелы) (часть) (пробелы) , ....

Каждая часть имеет вид

часть ::= (ключ) (пробелы) = (пробелы) (значение)

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

Значение может быть записано в разных формах:

— null, false, true без кавычек — соответствуют одноименным значениям php
— целое или дробное число
— строка без кавычек, состоящая из любых символов кроме пробельных, кавычек, запятой, бекслеша
— строка, заключенная в двойные или одинарные кавычки

Строка в кавычках может содержать последовательности вида бекслеш + символ, которые называются escape- последовательности:

\\ вставляет в строку 1 бекслеш
\" и \' вставляет кавычку
\n вставляет перевод строки \n
\ + любой другой символ вставляет в строку бексеш + указанный символ, например \1 вставляет в строку символы \ и 1

На выходе программа (точнее, функция в ней) должна давать массив, содержащий указанные в строке ключи и значения.
#396 #407279
>>407268

> по какому принципу должна устроена входящая строка во второй задаче,



входная строка состоит из частей, разделенных запятыми. Частей может быть от 0 до бесконечности. В начале и конце части может также стоять любое число пробельных символов (то есть пробелов и переводов строк \n).

строка ::= (пробелы) (часть) (пробелы) , (пробелы) (часть) (пробелы) , ....

Каждая часть имеет вид

часть ::= (ключ) (пробелы) = (пробелы) (значение)

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

Значение может быть записано в разных формах:

— null, false, true без кавычек — соответствуют одноименным значениям php
— целое или дробное число
— строка без кавычек, состоящая из любых символов кроме пробельных, кавычек, запятой, бекслеша
— строка, заключенная в двойные или одинарные кавычки

Строка в кавычках может содержать последовательности вида бекслеш + символ, которые называются escape- последовательности:

\\ вставляет в строку 1 бекслеш
\" и \' вставляет кавычку
\n вставляет перевод строки \n
\ + любой другой символ вставляет в строку бексеш + указанный символ, например \1 вставляет в строку символы \ и 1

На выходе программа (точнее, функция в ней) должна давать массив, содержащий указанные в строке ключи и значения.
#397 #407286
>>407168

Ты прав насчет конструктора, но в конце ошибочка.

> В дочернем классе вместо $this->chief нужно parent::chief


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

public function test( ) {
...
parent::test( );
}

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

>>407172

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

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

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

Что скажешь?

Для решения задачи надо Апач + совсем чуть-чуть HTML + PHP.

HTML код не должен быть перемешан с PHP логикой (т.е HTML в одном файле, логика в другом).

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

Немного инфы из мануала:

http://php.net/manual/ru/tutorial.php (здесь упомянута работа с формами)
http://php.net/manual/ru/language.basic-syntax.phpmode.php

Как отделить php от html

http://www.phpinfo.su/articles/practice/shablony_v_php.html

Основы HTML

http://htmlbook.ru/samhtml

Что скажешь? Если и это сложно, или что-то непонятно, пиши. Я либо дам подсказку либо придумаю задачу проще.
#397 #407286
>>407168

Ты прав насчет конструктора, но в конце ошибочка.

> В дочернем классе вместо $this->chief нужно parent::chief


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

public function test( ) {
...
parent::test( );
}

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

>>407172

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

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

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

Что скажешь?

Для решения задачи надо Апач + совсем чуть-чуть HTML + PHP.

HTML код не должен быть перемешан с PHP логикой (т.е HTML в одном файле, логика в другом).

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

Немного инфы из мануала:

http://php.net/manual/ru/tutorial.php (здесь упомянута работа с формами)
http://php.net/manual/ru/language.basic-syntax.phpmode.php

Как отделить php от html

http://www.phpinfo.su/articles/practice/shablony_v_php.html

Основы HTML

http://htmlbook.ru/samhtml

Что скажешь? Если и это сложно, или что-то непонятно, пиши. Я либо дам подсказку либо придумаю задачу проще.
#398 #407288
>>407172

Информация про установку Апача и PHP

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

Апач: https://gist.github.com/codedokode/10774100

Если ты столкнешься с командной строкой, вот курс молодого бойца: https://gist.github.com/codedokode/10539568

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

>>407190

К ним надо обращаться через $this->

>>407190

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


Ты путаешь. Свойства создаются только если им что-то присвоить:

$this->newProp = 1;

Если же ты пытаешься использовать несуществующее свойство то получишь предупреждение и оно вернет null. Программа которая генерирует предупреждения сама по себе непраивльная, потому что именно там вернеться непринципиально — ты в любом случае должен эту ошибку исправить.
#398 #407288
>>407172

Информация про установку Апача и PHP

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

Апач: https://gist.github.com/codedokode/10774100

Если ты столкнешься с командной строкой, вот курс молодого бойца: https://gist.github.com/codedokode/10539568

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

>>407190

К ним надо обращаться через $this->

>>407190

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


Ты путаешь. Свойства создаются только если им что-то присвоить:

$this->newProp = 1;

Если же ты пытаешься использовать несуществующее свойство то получишь предупреждение и оно вернет null. Программа которая генерирует предупреждения сама по себе непраивльная, потому что именно там вернеться непринципиально — ты в любом случае должен эту ошибку исправить.
#399 #407290
>>407189

К ним надо обращаться через $this->

>>407196

Нет. parent:: используется чтобы вызвать родительский метод с таким же именем (иначе получится вызов самого себя). Для остального есть мастеркард $this->

self:: и static:: используются для обращения к константам, статическим методам и свойствам.
#400 #407293
>>407198

Для изучения переменных мой учебник не подойдет? Он на русском.

А после него можешь взять Мэтта Зандстру или Шлоссгнейла (названия книг в ОП-посте) — хорошие книги, но не для совсем начинающих.

Во многих книгах также требуется знать основы HTML.

>>407212

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

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

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



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

>>407220

Ты можешь переписать все используемые функции с нуля. если хочешь. Я проверю код.
#401 #407294
>>407279
В таком случае я не знаю как это распарсить, особенно вот с такой частью как тут http://ideone.com/QRQqU2

>willItWork="a=1,b=2,c=3"


Видимо действительно задача для умных. Нуб который рыпнуля заслуженно ткнут носом в свое место.
#402 #407296
>>407257

В учебнике мы изучаем только основые конструкции, if, for, foreach, break, return (и while + continue в конце упомянут). Зная их, остальные понять легко и самому.

Это сделано чтобы не заниматься зубрежкой теории, а сначала научиться использовать язык. А после этого, кто хочет, может просто открыть мануал PHP и прочесть справочник по языку полностью: http://php.net/manual/ru/langref.php

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

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

Я знакомлю с тем, как используются главные конструкции и функции, как пишутся программы, а если ты хочешь знать все, в том числе более редкие, конструкции, то можешь прочесть о них в мануале или в книге указанной в ОП-посте. Я бы советовал мануал.
#403 #407297
>>407294

Не расстраивайся. Если захочешь, то рано или поздно разберешься.

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

Вот примерный список возможных токенов:

null, false, true, =, число, запятая, бекслеш, одинарная/двойная кавычка, любой другой символ

Соответственно, функции для парсинга выглядят примерно так. Мы спускаемся от составных конструкций к примитивным:

распарситьСтроку {
пары = пустой массив;
пока (не конец строки) {
параКлючЗначение = распарситьПаруКлючЗначение( );
добавить пару в массив;
если (конец строки) { выйти из цикла }
прочитать токен «запятая», если его нет то ошибка;
}
}

распарситьПаруКлючЗначение {
ключ = распарситьКлюч;
прочитать токен «равно», если нет то ошибка;
значение = прочитатьЗначение;
вернуть пару (ключ, значение);
}

И так далее. Если тебе интересно, можешь попробовать начать с разбиения строки на массив токенов, а дальше я дам подсказки.
#403 #407297
>>407294

Не расстраивайся. Если захочешь, то рано или поздно разберешься.

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

Вот примерный список возможных токенов:

null, false, true, =, число, запятая, бекслеш, одинарная/двойная кавычка, любой другой символ

Соответственно, функции для парсинга выглядят примерно так. Мы спускаемся от составных конструкций к примитивным:

распарситьСтроку {
пары = пустой массив;
пока (не конец строки) {
параКлючЗначение = распарситьПаруКлючЗначение( );
добавить пару в массив;
если (конец строки) { выйти из цикла }
прочитать токен «запятая», если его нет то ошибка;
}
}

распарситьПаруКлючЗначение {
ключ = распарситьКлюч;
прочитать токен «равно», если нет то ошибка;
значение = прочитатьЗначение;
вернуть пару (ключ, значение);
}

И так далее. Если тебе интересно, можешь попробовать начать с разбиения строки на массив токенов, а дальше я дам подсказки.
#404 #407366
>>407293

>Для изучения переменных мой учебник не >подойдет? Он на русском.


Извини, я не нашёл твой учебник в оппосте, или ты имеешь ввиду сайт http://archive-ipq-co.narod.ru ?

Что можешь посоветовать абсолютно нулёвому стремящимуся ? в какой последовательности изучать, чтобы максимум комфорто и правильно проходило обучение php, может с какой компьютерной теории по работе какой-нибудь оперативной памяти?
Потому, что мне кажется что вот так налетать на изучение php при этом абсолютно не зная ничего более - плохо, или же так и надо? Извини за тупорылые вопросы, просто хочется выставить путь и приоритеты расставить и спокойно взяться за обучение.
#405 #407428
Можно ли так использовать preg_split для разделения текста на предложения, чтобы знаки препинания остались?
Например: Хуй! Пизда. Говно
Результат: [0] - Хуй! [1] - Пизда. [2] - Говно
#406 #407432
анонсы, подскажите, помогает ли вам как-нибудь знание с++ вообще в программировании на пхп.
в пхп я мидл, написал пару небольших проектов, ооп все дела. Но с фреймворками у меня трудности, зенд мне кажется вообще кошмаром, yii или кохана еще более менее понимаю.
Так вот, сейчас вышла необходимость выучить си++, я его знаю на уровне написать простой класс. И при изучении тешу себя мыслью что это мне поможет как-то в кодерстве на пхп, т.к с++ мне очень не нравится.
был ли у кого-нибудь качественный скачок в пхп после изучение другого ЯП?
#407 #407433
>>407366

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

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

Ну или если эта идея тебе не нравится, то выучи основы html на htmlbook.ru/samhtml и бери любой другой учебник по PHP. В большинстве других учебников требуется знать HTML, и может быть уметь установить и настроить Апач (если надо, у меня есть инструкции и я готов подсказать как).

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

Пост с ссылками и названиями книг: http://habrahabr.ru/post/131971/

Если будешь изучать, лучше начинай сразу с 32-битного ассемблера под linux или windows — ибо 16-битный ассемблер и DOS устарели еще году так в 1995, и незачем на них тратить время.

Ну и насчет работы оперативной памяти — она работает очень просто (несмотря на сложные технологии, на которых она построена). Для процессора оперативная память выглядит как набор ячеек, пронумерованных начиная от 0 и выше, каждая ячейка может хранить 1 байт, то есть целое число от 0 до 255. Процессор может прочитать число из ячейки с указанным адресом или записать его туда. Программа, которую выполняет процессор, также хранится в виде чисел в памяти, то есть память используется и для хранения данных, и для программ.

Чтобы хранить числа больше 255 (а также дробные и отрицательные числа) используются специальные схемы кодирования и несколько ячеек.

Число ячеек определяется объемом памяти. В 1 Гб памяти 1024 × 1024 × 1024 ~ 1 млрд. ячеек.

Про то как устроен чип памяти и про разные их виды, можно почитать в вики: https://ru.wikipedia.org/wiki/DRAM
#407 #407433
>>407366

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

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

Ну или если эта идея тебе не нравится, то выучи основы html на htmlbook.ru/samhtml и бери любой другой учебник по PHP. В большинстве других учебников требуется знать HTML, и может быть уметь установить и настроить Апач (если надо, у меня есть инструкции и я готов подсказать как).

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

Пост с ссылками и названиями книг: http://habrahabr.ru/post/131971/

Если будешь изучать, лучше начинай сразу с 32-битного ассемблера под linux или windows — ибо 16-битный ассемблер и DOS устарели еще году так в 1995, и незачем на них тратить время.

Ну и насчет работы оперативной памяти — она работает очень просто (несмотря на сложные технологии, на которых она построена). Для процессора оперативная память выглядит как набор ячеек, пронумерованных начиная от 0 и выше, каждая ячейка может хранить 1 байт, то есть целое число от 0 до 255. Процессор может прочитать число из ячейки с указанным адресом или записать его туда. Программа, которую выполняет процессор, также хранится в виде чисел в памяти, то есть память используется и для хранения данных, и для программ.

Чтобы хранить числа больше 255 (а также дробные и отрицательные числа) используются специальные схемы кодирования и несколько ячеек.

Число ячеек определяется объемом памяти. В 1 Гб памяти 1024 × 1024 × 1024 ~ 1 млрд. ячеек.

Про то как устроен чип памяти и про разные их виды, можно почитать в вики: https://ru.wikipedia.org/wiki/DRAM
#408 #407434
>>407428

Ответ из-за спам-листа тут: http://ideone.com/r1L9cM

>>407432

Не уверен, что поможет. Если ты плохо понимаешь ООП, паттерны, SOLID, YAGNI и другие модные принципы, по которым строятся фреймворки, то Си++ вряд ли поможет. ООП там точно такой же.

Насчет качественного скачка, попробуй какой-нибудь экзотический язык типа Хаскелл или Лисп — от них вполне возможно у тебя появятся новые идеи.
#409 #407476
>>407432
Чтобы понимать фреймворки, учи фреймворки. На пхп можешь попробовать Laravel, я с книжкой в руках освоил его за пару дней буквально, он достаточно простой и красивый. Или рельсы попробуй, хоть и не пхп. Зато куча документации и обучающих курсов. После них перекатиться на любой пхп-фреймворк будет несложно.
#410 #407509
Как можно передать в функцию imagecolorallocate цвет в rgb ввиде переменной?
Очевидно:
$color = "150, 150, 150";
imagecolorallocate =($image, $color);

Не работает, есть вариант разобрать строку на отдельные переменные, но пока не знаю как и достаточно не лаконично, как это можно вообще сделать и сделать по канонам, а не велосипедом?
#411 #407526
>>407509
$color = [150, 150, 150];
imagecolorallocate =($image, $color[0], $color[1], $color[2]);

Ну вот так попробуй.

Мимодаун который не может тут ничего решить
#412 #407527
>>407509
Нихера не понял, что тебе нужно. Ты не можешь передать переменную в функцию или что?
#413 #407528
>>407527
Он вместо трех аргументов пытался в функцию передать строку с тремя числами через запятую
#414 #407529
>>407528
Ну можно и строку, потом внутри разбивать её регуляркой, но проще как уже сказали выше массив передать.
#415 #407531
>>407526
Спасибо, все получилось.
#416 #407532
>>407529
и как ты себе это представляешь? Покажи мне пожалуйста.
#417 #407533
Почему нельзя использовать тенарный оператор вот так?:

$cof = ($level == 3): $cof = 1: $cof = ($level == 2) : $cof = 1.25 : $cof = ($level == 1) : $cof = 1.5 : echo "Введите уровень работника от 1 до 3\n";
#418 #407534
>>407532
Что именно?
#419 #407546
>>407534
Реализацию вот этого:

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

#420 #407547
Не до конца понял.
Ведь переменная может быть числом?
например $9
но при попытки операции $9 = 10; - не получается, а при $a = 10; всё окей
#421 #407548
>>407547
fastfix

$9 = 10;
$a
= 10;
#422 #407549
>>407548
>>407547

блять, не отображает знак умножения

тогда так
$9 += 10;
$a += 10:
#424 #407551
>>407550
Спасибо богослов, перед цифрами нужно подчёркивание ставить. добра тебе.
#425 #407553
>>407546
>>407546
Ну вот самый простой пример
http://ideone.com/PRpj9o
25 Кб, 836x423
#426 #407557
>>407509
Задача интересная.

Тебе нужно передать 4 параметра, а так получается только 2.

Юзай массив, например.
#427 #407558
>>407509
$color = [150, 150, 150];
imagecolorallocate =($image, $color);

Чем не устраивает? Зачем со строкой заморачиваться?
#428 #407559
>>407557
Что за задача?
#429 #407560
>>407559
Вот же >>407509

А кому суть не ясна - идите и учите пехапу, ебаные школьники, сука. Написали пару хелловордов и давай срач устраивать, с аналитикой и прочей ахинеей в лучших традициях /б/. Иксперты блять.
#430 #407561
>>407560
Это не задача, а кусок из нее в виде "как мне передать в функцию три параметра в одной переменной". И где ты здесь увидел срач?
#431 #407562
>>407533

Тернарный оператор имеет форму a ? b : c и там предусмотрено одно двоеточие. По идее, правила php разрешают вкладывать операторы:

a ? b : (c ? d : e)

Но делать так не надо ибо нечитаемый быдлокод получается. Ипользуй if/elseif или switch для этого. Или что еще лучше, массив вида [level => коэффициент].

И тем более нельзя вставлять команды вроде echo внутрь тернарного оператора.
#432 #407563
>>407558

Ошибка на ошибке у тебя. Нельзя писать так

imagecolorallocate =($image,...

Надо писать

$x = fn($a1, $a2, $a3);

для вызова функции.

Дальше, в мануале http://php.net/manual/ru/function.imagecolorallocate.php написано что функция принимает 4 аргумента-числа, значит и передавать ей надо ровно 4 аргумента, а не 2.
#433 #407564
>>407560

Не ругайся в нашем треде.
#434 #407565
>>407476

Фреймворки лучше всего изучать на примере Симфони 2, он самый продвинутый и ООП-ориентированный.
#435 #407570
Вопрос. Как написать свой str_pad?
Как вообще добавлять к строке символы, кроме, как точкой слепливать?
#436 #407571
>>407570
Чем тебя точка не устроила?
#437 #407581
Подскажите эцсамое.
Я тут пытаюсь постигать искусство, сейчас делаю 6-ти значную рулетку из оппоста, проверьте код, он то работает, но может какие-то условности я не соблюдаю? или может я как-то по-другому должен был сделать.

http://ideone.com/8MHwYi
Верно ли я распоряжаюсь функцией \n и где про неё подробнее почитать можно ?
#438 #407584
>>407581
Ты вкидываешь код на сосаку, а потом его трешь сам, что я тебе могу сказать, если сначала я зашел у тебя там была рулетка, а через 20 секунд уже цикл.
#439 #407585
>>407584
ох щит, забыл про это привязку по ссылке.
#440 #407587
>>407581

\n это не функция, а так называемая escape-последовательность (последовательность, начинающаяся с бекслеша). Она вставляет в строку в двойных кавычках невидимый символ перевода строки, который при выводе через echo разрывает строку.

Почитать можно например в мануале: http://php.net/manual/ru/language.types.string.php#language.types.string.syntax.double

По коду все верно, только одно замечание — на называй переменные по-русски, тебя будут за это гнобить другие программисты. Если ты не силен в английском, не беда, в наш век можно воспользоваться сайтом slovari.yandex.ru или translate.google.com когда придумываешь название переменной.
#441 #407588
>>407585

Жми fork или создавай новый код.
#442 #407621
Полный ступор на задании с долгом за айфон. Абсолютно не могу понять как "оплатить" остаток.
#443 #407644
>>407621

Если остаток долга больше 5000, платим 5000
Если меньше или равен, платим сколько осталось

Учти, что код который приведен в задаче, не совсем правильный. Возможно, лучше стереть его и написать свой с нуля.
#444 #407645
>>407621

Также, есть вариант сделать так:

Цикл, внутри него:

- прибавляем проценты и комиссию к остатку долга
- если остаток маленький, выплачиваем сколько осталось и уходим
- иначе платим 5000
#445 #407657
>>407644
>>407645
Там есть какой-то цикл, но я не знаю что исправлять и куда дописывать.
Может есть уже готовый вариант, т.к я сижу уже полтора часа как даун и не могу понять откуда начать.
#446 #407660
>>407657

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

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

Также, в уроке есть задача попроще, про вклад в банк и миллион, можешь ее решить сначала, если хочешь.
#447 #407671
>>407660

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



http://ideone.com/F41I6W

Я не понимаю в чём ошибка т.е при том, что есть echo - не выводит почему-то
#448 #407675
>>407671

>$month >= 20

#449 #407679
>>407571
Ладно, а как добавлять нужное количество пробелов, то есть 2, три и т.п.? Или допустим создать строку из n пробелов? Можно нормальный ответ?
#450 #407682
>>407679
Берешь строку, вычисляешь её длинну, добавляешь циклом столько пробелов, сколько не хватает до нужной длинны. Ты ведь задачу на ооп про сотрудников делаешь?
#451 #407684
>>407679
$n = 0; //количество пробелов
while ($i<=$n){
$str .= ' ';
$i++;
}
#452 #407688
>>407675

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



Теперь проблема с этим, выводит не на каждый месяц, а в конце. Что - то не ладное.
http://ideone.com/F41I6W

потом пытался засунуть условия в цикл - и вообще край.
http://ideone.com/8oerod

Я не могу понять, что я упустил.
#453 #407689
>>407679

str_repeat и точка
#454 #407690
>>407688

> Теперь проблема с этим, выводит не на каждый месяц, а в конце. Что - то не ладное.


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

for (...) {
тело цикла;
то есть команды которые выполнятся на каждом шаге;
}

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


Ты их не засунул внутрь цикла, а добавил второй цикл. То есть выполняется первый цикл 20 раз, а потом второй.
#455 #407692
>>407688

Ты не внимательно прочел, что надо сделать:

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



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

Попробуй сам написать код, который каждый месяц увеличивает долг, прибавляя к нему проценты и комиссию.
#456 #407693
Делал одну из задачек по регулярным выражением, там надо найти где не поставлены пробелы после точек, запятых и других знаков. Но захотелось доработать так что бы исправлял скрипт эти ошибки и вставлял пробелы, если в тексте есть только одна ошибка подобного рода, то работает, если больше одной то возникают проблемы. Вот код http://ideone.com/9JzYV4 как его можно исправить?
#457 #407694
>>407688

То есть, должно быть примерно так:

for (....) {
долг = долг × проценты + комиссия;
echo долг;
}
#458 #407696
>>407690
Спасибо, теперь понял про тело цикла и засунул всё в него, сразу полегчало. Спасибо большое!
>>407692
Я уже так делал и переделывал, ведь долг изначально 40.000 и если он будет увеличиваться, то как я смогу проверить работоспособность

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



Ведь школьник не может оплатить 40к, только если меньше.
#459 #407699
>>407693

А почему код не выравниваешь нормально? Невозможно же прочесть. Можно через phpformatter.com за 5 секунд его отформатировать автоматически.

Чтобы делать замены, не нужен strpos. Зачем? Можно просто использовать str_replace:

$text = str_replace($from, $to, $text);

Где from — исходная часть текста, а to — замена.

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

Ну и еще. Я вижу, ты невнимателньо читал мой урок про строки, где красным цветом написано что некоторые функции работы со строками плохие и ненадежные. Используя их, ты рискуешь тратить время на поиск и исправление сложных ошибок. Вот, почитай: https://gist.github.com/codedokode/ff99e357e9860ea169b8

> for($j=0;$j<count($res[0]);$j++)


Для перебора массива надо использовать foreach — он гораздо читабельнее.

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

Я не советую тебе пропускать уроки и переходить к сложным задачам сразу. У тебя явно пробелы в знаниях стандартных функций работы со строками и цикла foreach.
#460 #407700
>>407696

Можешь начальный долг сделать не 40 000, а например 500 для проверки.
#461 #407701
>>407696

Ну и скажу что задача про кредит сложная. Люди ее по 3 дня решали и попыток по 10 делали.
#462 #407702
>>407693

Если используешь русские буквы в регулярке, надо ставить флаг u в конце. У меня в уроке, опять же, это вроде написано (правда, может, мелким шрифтом)
#463 #407704
>>407693

В чем именно проблема, сказать сложно, так как код у тебя довольно запутанный. Но ты можешь поставить в программу var_dump и echo чтобы увидеть чему равна какая переменная и соответственно понять что идет не так.
#464 #407705
ОП, я не знаю о чем говорить с девушками. Ненавижу неловкое молчание, но и пустой треп из себя выдавит не могу.
#465 #407706
>>407699
Спасибо, но например через str_replace или preg_replace можно заменить (,в) на (, в) если я уже буду знать на что менять, то есть напишу (, в) , а вместо в может быть любая буква. Если просто заменить (,) на (, ) то я таким образом заменю все запятые в тексте, иначе мне надо знать позицию каждого проблемного символа, что я и пытаюсь сделать использовав strpos. Я кажется чего то не понял скорее всего.
#466 #407712
>>407706
Наверное мне стоит пояснить что я делаю в коде, он не понятен. Вначале идёт проверка строки и нахождение всех вхождений этого шаблона

$pattern="/[,.;:][А-Яа-я]/";
$n=preg_match_all($pattern,$str,$res);

В этом блоке:

for($j=0;$j<count($res[0]);$j++) {

$l=strpos($str,$res["0"][$j]);

//Находим позиции всех интересующих нас вхождений в строке

for($i=0; $i<strlen($str);$i++) {

if($i==$l+1)

$k .=' ';

$k .=$str[$i];

}

//Добавляем пробелы в тех местах где счётчик равен $l+1, $l- это позиции вхождений которые ищем.

}
#466 #407712
>>407706
Наверное мне стоит пояснить что я делаю в коде, он не понятен. Вначале идёт проверка строки и нахождение всех вхождений этого шаблона

$pattern="/[,.;:][А-Яа-я]/";
$n=preg_match_all($pattern,$str,$res);

В этом блоке:

for($j=0;$j<count($res[0]);$j++) {

$l=strpos($str,$res["0"][$j]);

//Находим позиции всех интересующих нас вхождений в строке

for($i=0; $i<strlen($str);$i++) {

if($i==$l+1)

$k .=' ';

$k .=$str[$i];

}

//Добавляем пробелы в тех местах где счётчик равен $l+1, $l- это позиции вхождений которые ищем.

}
#467 #407713
>>407557
Что за редактор?
#468 #407714
>>407713
Sublime text editor
#469 #407715
>>407712
Здесь мне кажется может ещё помочь функция которая будет записывать все позиции вхождения подстроки в строку. Но я такой функции не знаю, и не смог найти.
#470 #407716
>>407705

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

>>407706

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


Действительно. Ну раз так, то лучше сразу использовать preg_replace и не мучаться.
#471 #407717
>>407660

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


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

http://ideone.com/B0ssmX
Будьте добры проверить, всё ли верно сделано по 3-ём из 4 пунктов.
#472 #407718
>>407712

Здесь нужно использовать preg-replace а не изобретать велосипеды.

Вместо первого for там надо исплоьзовать гораздо более удобный foreach.

Вместо второго for надо использовать str_replace.

В регулярке надо использовать флаг u.

После if () надо писать фигурные скобки {}

Но приавльное решение использовать preg_replace.
#473 #407719
>>407717

Почти все верно. Только когда долг больше 5000, он должен писать что школьник заплатит в этом меясце 5000, а у тебя не пишет. В остальном все верно.
#474 #407720
>>407716
Извини если надоел но в случае с preg_replace это будет выглядеть:
$str="Здравствуйте мне кажется,вы совсем:поехавший";
$pattern="/[,.;:][А-Яа-я]/";
$n=preg_replace($pattern, ", в",$str);

В итоге снова один вариант а не универсальный для всех вхождений. Я так пробовал, пробовал вставлять массив во второй параметр, то всеми шаблонами для замены, но порядок где и какой заменять функция естественно не знает.
#475 #407721
>>407717

Ну и теперь тебе осталось сделать выплату, то есть долг уменьшается на сумму выплаты, и в какой-то переменной учиытвается эта выплата (чтобы посчитать общую сумму выплат за все время).
#476 #407723
>>407720
А что если сделать функцию, которая через mb_substr выделяет букву и сохраняет её в переменной и потом уже в прег реплейс ты вставляешь эту переменную?
#477 #407726
>>407719
Как это пофиксить? куда смотреть?
#478 #407728
>>407720

Не надоел. Можешь задавать вопросы еще если что-то непонятно.

> но порядок где и какой заменять функция естественно не знает.



Почитай мануал по preg_replace.

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

Не забудь добавить флаг u к регулярке.
#479 #407729
>>407723
Спасибо, попробую
#480 #407730
>>407729
Я не оп если что, просто предположил.
#481 #407731
>>407728
Спасибо, не знал про такое свойство, сейчас посмотрю.
#482 #407733
>>407726

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

>>407723

Мануал почитай официальный по preg-replace: (ссылку вставить не могу, нагугли сам)
#483 #407736
ОП, а куда подевалась инструкция с твоего гита - как настроить свой локалхост? Что-то не вижу.
#484 #407737
>>407736

Может одна из этих?

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

Алсо инструкция по командной строке если надо будет в ней вводить команды:

https://gist.github.com/codedokode/10539568
#485 #407739
>>407737
О, спасибо. Кстати, поясни за Федору, годный дистрибутив?
Стоит ли ставить 2 ос - генту и федора?
144 Кб, 1280x720
#486 #407741
#487 #407742
>>407739

Никогда с ней не работал, так что не знаю. Вроде как известный дистрибутив.

Насчет генту, можешь поставить, но придется красноглазить с ней по хардкору.
#488 #407754
>>407733
Школьник с айфоном опять на связи
http://ideone.com/1H2ohl
Почему у меня не прибавляется бобло от сервисного обслуживания?
Походу пора ложиться спать.
#489 #407759
>>407754

> ($credit × $percent)


Ты не прибавляешь проценты, а просто берешь 3% от остатка долга. Надо умножать на 1.03 чтобы прибавить 3%
#490 #407760
>>407759
лол, главное я сам узнав, что к этой задаче какая та ошибка думал, что ошибка - именно плохо/неправильно написанный процент и забыл про него.
#491 #407766
>>407759
Теперь уже самое главное. Так решается, или же мне нужно что-то сделать с остатком?
http://ideone.com/1H2ohl
#492 #407777
У меня кажется получилось справиться с той задачкой про исправление ошибок без preg_replace http://ideone.com/4gsPHU
#493 #407780
>>407777

Тогда давай проверим, все ли верно. Объясни, почему в этом примере http://ideone.com/0IAaSS появляется пробел, хотя у тебя указано что пробел надо добавлять только перед русскими буквами.

Ссылки-подсказки:

http://php.net/manual/ru/reference.pcre.pattern.modifiers.php
https://gist.github.com/codedokode/ff99e357e9860ea169b8

Правльный ответ: потому что в коде много грубых ошибок, например u надо писать маленькой, а обращаться к строке как к массиву $str[0] нельзя, я уже это писал выше
#494 #407781
>>407777

И все же через preg_replace решение будет гораздо короче, в 1 строчку. Лучше использовать его.

Также, я советую тебе не браться за более сложные задания сразу, а вернуться к уроку про строки и прорешать задачи там.
#495 #407787
>>407780

Спасибои, теперь буду знать. А как поступить в этом моменте?

for($j=0; $j<count($k); $j++) {

$r[$j]=$k[$j]['0']." ".$k[$j]['1'];

}

Нужно использовать символы {} ?
#496 #407796
>>407766
даже если вы не мастер ОП, кто - нибудь может взглянуть на это дерьмо, дабы я мог пойти спать и наконец-то убрать это ублюдка школьника с айфоном.
#497 #407798
>>407796
Ну вообще-то по условию задачи он должен выплатить всё, до копеечки, никаких остатков. Ты же банку не скажешь "сори ребят, нет купюр ниже 5к"
#498 #407800
>>407798
блять, я хуй знает что делать с этим, прошерстил функции там в учебнике и ненашёл в общем начну завтра самого начала. Видимо где-то что-то упустил
#499 #407803
ОП, если ты ещё здесь и не занят посмотри пожалуйста на вот это решение http://ideone.com/2880c это задача про преобразование строки в массив.
#500 #407804
>>407800
Что мешало так сделать http://ideone.com/ZpQfU7 ?
#501 #407815
Вот ещё одна http://ideone.com/WaNkqW про проверку ключей
#502 #407849
>>407787

Нет.

Нужно использовать mb_substr чтобы получить 1 букву из строки.

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

>>407766

Пока что неприавльно. Посмотри сам

> $credit = ($credit $percent) + $service - $oplata;



Ты выплаиваешь ровно 5000 даже если остаток например всего 1000. Надо в последний месяц выплатить эту оставшуюся 1000.

То есть не надо сразу вычитать $oplata. Надо посмотреть большой ли долг и поступать по-разному в разных случаях. Вернись к тому коду который пишет большой или маленький остаток долга и в него допиши выплату. Если долг большой то платим 5000, если маленький то сколько осталось.
#503 #407851
>>407800

Тебе хватит команды if.

увеличиваем долг;

if (долг большой) {
платим 5000;
} else {
платим сколько осталось;
долг выплачен, ура, выходим из цикла;
}

>>407803

По ссылке открывается главная. Запости еще раз.

>>407804

Норм решение.

>>407815

А что с оформлением? Почему строчки разбросаны по всей странице? Оформи нормально, например пропусти через сайт phpformatter.com (больше способов отформатировать код в посте: >>405045 )

Когда отформатируешь, тогда проверю.
#503 #407851
>>407800

Тебе хватит команды if.

увеличиваем долг;

if (долг большой) {
платим 5000;
} else {
платим сколько осталось;
долг выплачен, ура, выходим из цикла;
}

>>407803

По ссылке открывается главная. Запости еще раз.

>>407804

Норм решение.

>>407815

А что с оформлением? Почему строчки разбросаны по всей странице? Оформи нормально, например пропусти через сайт phpformatter.com (больше способов отформатировать код в посте: >>405045 )

Когда отформатируешь, тогда проверю.
#504 #407853
>>407815

Не забудь также убрать все лишние пустые строчки (можно использовать максимум 1-2 пустых строчки подряд), замени <? на <?php и убери ?> в конце.
#505 #407859
Есть ли какие-то хорошие видео курсы по MySQL? Посмотрел Харина по PHP, вроде неплохо объясняет основы, нужно что-то такое же по MySQL. Ссылку на статьи в оп-посте видел.
#506 #407862
>>407851

>платим сколько осталось;


Как это выразить ?
#507 #407866
>>407862
в моей голове только
if ($credit > 5000) {
$credit = $oplata
}
И то, благодаря господину >>407804
#508 #407869
>>407866
Наоборот же. У тебя кредит становится меньше регулярной оплаты, значит оплату нужно приравнивать к кредиту (а не кредит к оплате)
#509 #407870
>>407869
Верно, перепутал.
Самооценка после того, как сам с такой задачей не справился за 12 часов - просто в жопе, аж руки трясутся.
#510 #407871
>>407870
Ну я вроде забил на неё в свое время, потому-что в уроке нет ответа на задачу, а я не могу писать код, не зная, какой должен быть результат. Вчера только решил по фану >>407804
#511 #407876
>>407871
Попытался по твоему коду сам написать новый, в чём может быть ошибка?
http://ideone.com/1H2ohl
#512 #407882
>>407876
Ты перепутал переменные оплачено и оплата. В проверке условия у тебя не оплата приравнивается к кредиту а оплаченная сумма. Поэтому на 13ом месяце оплачено из 60 тысяч превращается в 6.
#513 #407884
>>407882
Чтобы такого не путаться в переменных называй их, как оп советовал, по английски.
#514 #407888
>>407882
>>407884
Спасибо, всё пофиксил - всё работает. Буду пытаться опять писать из головы, чтобы сразу и всё чётко с пониманием.
#515 #407891
>>407859
бамп вопросу
#516 #407913
>>407851

>По ссылке открывается главная. Запости еще раз.


Вот - http://ideone.com/Qj5kKL (преобразование строки в массив)
И за одно ещё одна - http://ideone.com/AJhXke (проверка ключей)
#517 #407933
Ребята, а каков объем этого курса?
Сколько еще придется выучить/прочитать/освоить после этого курса чтобы добиться своих 1к зеленых в месяц на одеске?
#518 #407953
#519 #407954
>>407933
Если умеешь пользоваться echo то можешь уже идти.
#520 #407984
>>407933

На сайте только основы PHP. После них надо будет делать более сложные задания, изучать HTML, CSS, SQL, JS, фреймворки. даже если ты будешь очень быстро все изучать, меньше чем за месяцев 4-5 ты не успеешь.

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

Ну и с анлийским надеюсь у тебя все в порядке, если на одеск метишь?
#521 #407986
>>407984

>4-5 месяцев


Что там изучать 5 месяцев? Мускуль и хтмл?
#522 #408005
>>407986
А ещё пыхпых и шапкоскрипт. А потом после того как ты сдашь заказ индус-заказчик пололирует с твоего кода и тебя в придачу.
#523 #408007
>>408005
Как страшно жить.
#524 #408024
>>407913

А зачем так много пустых строк в программе?

Запятые в массив добавлять не надо. Зачем ты это делаешь?

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

Вместо br надо использовать \n, а то читать невозможно. Чтобы в браузерt тоже работало, подкрути заголовок Content-Type.

http://ideone.com/0jR4M1 - не сохраняется пробел

> $value = substr($masiv[$i], $k + 1);


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

> quotedString - "test\"value"


А должно быть просто test"value

http://ideone.com/4ujioD — должно быть просто булевое значение true, а не строка true, да еще и с лишней запятой.

Думаю, тут есть над чем поработать.
#525 #408030
>>407913

проверка ключей

В задании написано:

> В функцию приходит массив


Где у тебя функция?

Переменные надо назвать нормально, например a1 -> keys.

> for ($i = 0; $i < count($name1);


тут надо foreach

Также, эта задача решается без цикла, если знать нужные функции для работы с массивами. Поищи тут: http://php.net/manual/ru/ref.array.php
#526 #408034
>>407859
Специалист за 2014 год. Там 4 уровня от базовых принципов до шаблонов погромирования. Причем все новшества версии 5.4 тоже изложены. Обычно его дропают из-за сложности, а прикрываются отговорками "данускучна я за час бы все расказал".
#527 #408036
>>408024

>А должно быть просто test"value


Я смотрел по заданию, там в ответе должно быть "test\"value", с запятыми такая же история. Запятые не нужны? Они есть в том что должно получиться
#528 #408038
>>408036

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

Вот я выше тут расписал подробно: >>407279
#529 #408041
>>408038
Ага, теперь кажется понятнее, спасибо. Что бы скрипт работал нормально, достаточно будет вставить preg_replace в момент где записываем в массив который удалит все символы, вроде /": и других которые там могут возникнуть? Пробелы перед цифрами это обязательно?
96 Кб, 500x732
#530 #408069
>>407297
даж строку на массив разбить не могу представить как. Ну вот всякие идеи типа разбиваем через запятую или через huitaname=любая рандомная хуита, huitaname2= повторить... не работает, так как willItWork="a=1,b=2,c=3" просто возьмет и сломает все свомими запятыми или a= Стало быть нужно что-то более изощренное, в духе: Парсим строку через huitaname= но когда открываются кавычки, мы всё в них игнорируем? В общем была еще идея перед тем как начать парсить, пройтись по строке в поисках выражений внутри кавычек, и сделать автозамену например на большие числа, одновременно с этим складывая штуки в духе: "a=1,b=2,c=3" в массив с ключами из этих больших чисел. Что бы опять же распарсить строку простой регуляркой, и сделать потом обратную автозамену уже в массиве. В общем вот как-то так. Пока отложу эту задачку.
#531 #408070
>>408069

>В общем была еще идея перед тем как начать парсить, пройтись по строке в поисках выражений внутри кавычек, и сделать автозамену например на большие числа, одновременно с этим складывая штуки в духе: "a=1,b=2,c=3" в массив с ключами из этих больших чисел. Что бы опять же распарсить строку простой регуляркой, и сделать потом обратную автозамену уже в массиве. Но тогда в игру вступает quotedString="test\"value" которая тоже поспешит поломать все нахуй.

#532 #408126
>>408041

> , достаточно будет вставить preg_replace в момент где записываем в массив который удалит все символы, вроде /": и других которые там могут возникнуть?


Нет

> Пробелы перед цифрами это обязательно?


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

>>408069

А как по твоему интерпретатор php парсит код программы? Там все в 100 раз сложнее, но он же справляется. Я уже писал выше, тут нужны либо хардкорные регулярки, либо идти по строке слева направо и разбирать на части.
#533 #408153
>>408126
Интерпретатор знает чего ждать от кода, там каждый случай прописан заранее, а все что выходит за рамки просто идет нахер? Предлагаешь разобрать все возможные случаи со всякими , " " ' ' \ ?
#534 #408217
>>408034
Гугл ничего конкретного не говорит, можно более точную формулировку или ссылку?
#535 #408232
>>408217
Так и есть, раздача куда-то проебалась. Вот кеш, сидов еще море http://btdigg.org/search?info_hash=4a8de0ca4cea94824185a35c15932da2da4f0813
#536 #408263
>>408232
Благодарю, поставлю на закачку, вечером посмотрю.
#537 #408289
>>408232
Так он же по MySql просил, а это курс по всему пхп
906 Кб, 1920x1200
Воннаби #538 #408293
В очередной раз переделаная хрень по переводу чисел в слова! http://ideone.com/sSOFaM

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

Как думаете, можно подобное приложить как кусок портфолио к анкете на джуна? Это пожалуй пока что лучшее из всего, что я написал на пхп.
#539 #408294
>>408293
Не очень-то и сложная. С банкоматом или поиском пути сложнее, а тут просто строчек кода дохуя.
#540 #408295
>>408293

Прикладывать лучше пример приложения, например, файлообменник, который мы делаем после учебника. А это все же как-то слишком просто мне кажется, это же основы языка php всего лишь. Очевидно что ты их должен знать по-любому.
#541 #408302
ребе, чекните задачку про вклад в 10.000 т.к я тот самый даун, который мучался с айфоном у школьника 2 дня. + Подскажите, можно ли как-то по простому округлить числа т.к в этом коде очень сильно заметно эти "большие" десятые, тысячные и миллионные
http://ideone.com/xAvU9A
#542 #408303
>>408294
Нисколько не сомневаюсь, в итоге если поднапрячься то решается за 3 часа, просто очень долго не брался за исправления. Банкомат и поиск пути мне только предстоит. Я же сказал, что это пока лучшее из того что я писал.
>>408295
Тоже верно, но пока нет никаких приложений, кроме счетчика слов в тексте на локальном хосте. Во первых не знаю как им показать его грамотно, не скрины же. А во вторых там позор скорее, а не начинка.

> А это все же как-то слишком просто мне кажется, это же основы языка php всего лишь.


Ну основы пхп + алгоритмы какие-никакие. Основы как по мне закончились на первой задаче с функцией и кредитом.
#543 #408305
>>408303
Стоп, кому ты показывать что-то собрался? Ты на работу уже что-ли хочешь устроится?
#544 #408307
>>408305
Да, за еду.
#545 #408308
>>408307
Это куда берут с такими навыками, не поделишься ссылочкой? Я даже на фрилансе не могу какой-нибудь самой простой фигни найти, которая мне бы по силам была, везде абсолютно нужны знания фреймворков.
#546 #408310
>>408302
http://ideone.com/6fUSXJ

Держи, $bablo = round($deposit, 2);

значит округляем переменную $deposit до двух знаков после запятой и кладем её в переменную баблло. При этом твой $depodit по факту остается нетронутым и его округление не искажает дальнейшие расчеты.
#547 #408314
>>408308
Во первых пока никуда не берут, хотя я пытаюсь на самые донные вакансии откликаться, хотя бы для опыта собеседований, прощупывания почвы по требованиям и посмотреть в глаза на тестовые задания, даже если и не возьмут.

Во вторых у тебя подход мне кажется неверный. Естественно на фрилансе не нужны никому джуно-макаки, а нужен человек который знает как решать конкретные задачи, пусть диапазон этих задач и будет очень небольшим. Думаю в отличие от офиса тебя на фрилансе не будет ниодин работодатель натаскивать на работу. А в офис могут взять совсем нубом, но с прицелом на рост, надеюсь.
#548 #408315
>>408308

Если ты не знаешь ООП и фреймворки, то как ты собрался работать над сайтами на них? У нас в треде, к слову есть задания на изучение фреймоврков (и ООП если ты в нем не очень разбираешься). Например та же задача на файлообменник (она вообще полезна, в ходе ее решения можно много пробелов в знаниях выявить).
#549 #408316
>>408315
Ну я еще изучаю ооп, а потом уже буду браться за фреймворки.
#550 #408347
Задачка про массивы и радномный ответ.
http://ideone.com/oKVKzF
Верно ли сделал? вроде всё работает.
И вопрос, могу ли не писать нумерацию в массиве с 1-6, а в строке с echo указать "Net", он ведь всё равно будет рандомным? ведь за тем же "Net" закрепляется свой индекс и благодаря шафлу он рандомент. Или же я слишком много на себя беру и не надо выёбываться.
#551 #408355
Я может поехавший, но я пытаюсь написать функцию explode только с использованием циклов, переменных и управляющих структур. Кажется написал, но вот незадача скрипт записывает пробелы вначале и конце строки если они есть. Конечно можно использовать регулярки, trim и прочее, но я хочу написать только с использованием циклов, переменных и управляющих структур. Если вдруг кому нечего делать, может у кого есть идеи как это сделать? сделать что бы убрать пробелы вначале и конце записываемого элемента в массив, без использования регулярок и других функций для работы со строками. Вот код http://ideone.com/D6jsUa
#552 #408362
>>408355
Пока смотрел пришла мысль, кажется после уже того как всё записано в массив, стоит пройтись по каждому элементу циклом, и если первый символ и последний символ в элементе массива равен пробелу, просто его удалить.
85 Кб, 500x654
Воннаби #553 #408369
http://ideone.com/rie222

Так как после перевода чисел в строчки идет не менее легкая на первый взгляд хрень, за которую сложно браться такому мудиле, то пробежался по предстоящим задачам, и для разминочки накидал оче быстро лайтовую альфа версию вывода текста по окружно синусоиде
#554 #408373
ОП, извини если тупой вопрос, но так можно заполнять объекты в классе?

http://ideone.com/PgxzCT

Я так и не смог понять как это делать массивом, а не конкретно по каждой переменной.
#555 #408383
Помогити нубью ссаному, почему не постит перевод шифра через array_flip http://ideone.com/J91nSe
что я упустил?
#556 #408385
>>408383
значение функции array_flip нигде не сохраняется и поэтому её вызов в целом никак не влияет на программу. Если что, array_flip($code) саму переменную $code не изменяет.
#557 #408386
>>408383
видимо ты пропустил
$code = array_flip($code);

просто так array_flip($code); ничего не делает, точнее делает, но никуда не сохраняет измененя, это как написать
$a + 1;
Типа что это твоему значит? Ну прибавил ты к $a единицу и все, но ведь $a осталась прежней при этом, и новую переменную не завел и ничего, другое дело скажем $b = $a+1; Теперь у тебя есть переменная в которую ты сохранил результат своих действий. Так же и с $a = $a + 1; Ты перезаписал переменную новым значением, а старое стер.
#558 #408389
>>408385
>>408386
Спасибо няши милаши, Даже 100 раз заглядывал в мануал на сайте, но там было чисто написано array_flip(массив), а тут вот как оказывается.
#559 #408392
>>408389
Обращайся, хули.
#560 #408406
>>408392
Извините сэр, тут задание с генератором стихотворения,
как сделать так, чтобы выдавалось слово, а не цифра(индекс в массиве). Можно конечно в массиве прорисовать типо 1 => ~текст~, но в задание нужно херануть в лучшем виде.
http://ideone.com/l01zaN
#561 #408407
>>408406
Ну если в лучшем виде, то есть уже готовая функция http://php.net/manual/ru/function.array-rand.php
#562 #408411
>>408153

> Предлагаешь разобрать все возможные случаи со всякими , " " ' ' \ ?


Там не так и много случаев. Но да, через explode это не решить.

>>408293

> $typeTotal .= typeEnding($millions, 0);


Это магические числа, wiki: https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)#.D0.9F.D0.BB.D0.BE.D1.85.D0.B0.D1.8F_.D0.BF.D1.80.D0.B0.D0.BA.D1.82.D0.B8.D0.BA.D0.B0_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F

Я думаю, проще всего убрать число и передавать варианты слов в функцию:

typeEnding($millions, "миллион", "миллиона", ...)

> if ((($number%100<=20) &



& — это двоиный битовый оператор «и». Тебе нужен логический оператор &&

> $ending .= $typing[$power][1];


Тут вместо .= уместнее просто =

В остальном, хорошо.
#563 #408414
Замахнулся на серьёзную задачу про компанию Вектор. Может ещё рано такое делать, но после урока по ООП решил таки попробовать. Вот только начал:
http://ideone.com/a8biLX
Есть проблемы, не понимаю каким образом хранить данные о рангах сотрудников. Создавать новый класс и в качестве объектов использовать департаменты? Добавить ещё одну переменную массив в существующий класс, но как тогда правильно записать кто какого ранга, через пару ключ=>значение? Или можно просто хранить в массиве (вне класса и объекта) данные по каждому департаменту? Или вообще всё не верно что я думал?
#564 #408415
>>408414
Наверное нужно для каждого типа работника (менеджер, маркетолог) сделать свой класс. Ну и ранг должен быть свойством класса.
#565 #408416
>>408414
Привет, я кстати недавно доделал. Посмотри код. Правда я такой же нуб, как и ты. Можешь спрашивать, что не ясно. Я не очень коментировал код.

http://ideone.com/3QjIOe
#566 #408417
>>408302

Считает правильно. Небольшие замечания.

> $godov


Используй slovari.yandex.ru, translate.google.com

> умер в 60 лет


Пессимистично :)

> $godov = $godov + 1;


$age ++;

> $deposit = ($deposit × $percent)


$deposit ×= $percent;

Округлить через функцию round.

>>408303

> Ну основы пхп + алгоритмы какие-никакие.


Это еще не алгоритмы. Пройди следующие задачи и поймешь.

>>408347

Сделал верно, только оформление странное.

> И вопрос, могу ли не писать нумерацию в массиве с 1-6,


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

> а в строке с echo указать "Net", он ведь всё равно будет рандомным?


нет. Net — это значение, а не ключ элемента. Перечитай как устроен массив. Ты можешь получить значение по ключу с помощью скобок, но не наоборот.
#566 #408417
>>408302

Считает правильно. Небольшие замечания.

> $godov


Используй slovari.yandex.ru, translate.google.com

> умер в 60 лет


Пессимистично :)

> $godov = $godov + 1;


$age ++;

> $deposit = ($deposit × $percent)


$deposit ×= $percent;

Округлить через функцию round.

>>408303

> Ну основы пхп + алгоритмы какие-никакие.


Это еще не алгоритмы. Пройди следующие задачи и поймешь.

>>408347

Сделал верно, только оформление странное.

> И вопрос, могу ли не писать нумерацию в массиве с 1-6,


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

> а в строке с echo указать "Net", он ведь всё равно будет рандомным?


нет. Net — это значение, а не ключ элемента. Перечитай как устроен массив. Ты можешь получить значение по ключу с помощью скобок, но не наоборот.
#567 #408418
>>408415
Это сложно. Для каждого класса тогда нужно копиастить функции одинаковые.
#568 #408419
Оп, вот как мне научиться работать с БД? Документация сложно очень, паттерны не совсем понятные. Можно ли использовать шаблоны без понимания?
#569 #408420
>>408418
Не нужно копипастить, прочти в мануале про наследование и абстрактный класс.
#570 #408421
>>408420
Дык. Я то так и сделал, но прежде этого была попытка создавать классы без наследования.
#571 #408422
>>408421
Ну так в этой задаче от тебя ожидается именно применение наследования.
#572 #408424
>>408407
Ууу ну теперь то я утонул

>>408417
ОП, посмотри с этим дерьмом http://ideone.com/UMMJkN
задание про генерируемое стихотворение, как мне быть? точнее даже я хотел бы уж сам закончить его, но в какую сторону копать, где искать ответ?
#573 #408425
>>408424
Так оно работает у тебя. В чем проблема?
#574 #408426
>>408355

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

> $string, $separator


В explode идет в обратном порядке. Посмотри мануал по функции прежде чем ее делать. Там кстати, еще аргументы есть.

> if ($string[$i] != $separator) {


Это работает только для строк из 1 латинской буквы или цифры. Для русских не работает. А в explode можно передать любую строку разделителем.

Прочитай вот это: https://gist.github.com/codedokode/ff99e357e9860ea169b8

Нельзя к строке обращаться как к массиву. Это не работает.

> unset($string1);


Почему unset? переменные не должны удаляться.

> PHP Notice: Undefined variable: string1 in /home/b3a4qO/prog.php on line 12


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

> скрипт записывает пробелы вначале и конце строки если они есть


Посмотри как делает explode, если она делает так же то так и должно быть.
97 Кб, 752x690
#575 #408427
>>408425
Не не, слова должны быть рандомные, а у меня они, как бы так сказать, в одной фазе и поэтому первые две строки всегда одинаковые. И, как мне кажеться не так она решается, ибо год с этим псевдо-рандомов выглядит крайне глупо.
#576 #408428
>>408416
Спасибо, пытаюсь вникнуть но кажется мне ещё рано такие задачи решать. Я конечно не разбираюсь, но кажется у тебя очень неплохо получается, давно ПХП учишь? Много сидел над задачей?
#577 #408429
>>408427

>год с этим псевдо-рандомов


кода с этим псевдо-рандомом
#578 #408431
>>408427
Ну естественно они одинаковые, потому что ты используешь одинаковые переменные, не? Или ты думаешь, что они внутри echo будут еще раз вызывать функцию mt_rand и каждый раз меняться? Если ты присвоил переменной какое-то значение, то она такой и останется, пока ты не изменишь её езе раз.
#579 #408432
>>408369

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

> $y = sin($ipi()/10);


>\t$y=14;


>\t$y+=15;


Не надо размазывать простую формулу на 3 строки, пиши в одну

Числа типа 14, 15 надо вынести в переменные и вынести в начало программы чтобы легко было подстраивать вид синусоиды.

> for ($i=0; $i<count($field); $i++) {


Тут нужен foreach. А внутренний цикл лучше заменить на echo implode ...
#580 #408435
>>408373

> извини если тупой вопрос, но так можно заполнять объекты в классе?


Нормальный вопрос. Только вот делаешь ты не совсем правильно. Вместо того чтобы раскидывать данные о пользователе по 3 массивам, надо сделать массив из 3 пользователей:

array(
array("Иван", "Петров", 23),
....
);

Соответстенно дальше мы пишем

foreach ($users as $user) {
list($name, $surname, $age) = $user;
....

Мануал по list: http://php.net/manual/ru/function.list.php

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

Имена классов надо писать с большой буквы. Это же Классы, а не обычные функции или переменные.
#581 #408436
>>408431
Ну да, но в задании так и надо так т.е стих выглядит след образом.
1 2 3
1 2 3
4 5

Хотя, вот - пофиксил, вроде работает, но не уверен, что должно выглядит именно так.
#582 #408437
>>408426

>Это работает только для строк из 1 латинской буквы или цифры.


Да, точно этого я и не подметил.

>Почему unset? переменные не должны удаляться.


Если этого не сделать то записывает не правильно, я мыслил так после того как одна строка записывается в массив надо её удалить и потом вновь записывать туда символы.
Ну а вообще да, многое не правильно, спасибо, буду стараться переделать.
#584 #408440
>>408438
У тебя там ошибка. Элемента с индексом 4 не существует в массиве $word3, так как нумерация начинается с нуля.
#585 #408441
>>408435
Спасибо, теперь кажется стало понятнее.
#586 #408442
>>408406

$random1 = array_rand($word1, 4);

Зачем указывешь 4? Он тогда тебе вернет массив из 4 случайно выбранных ключей. надо не указывать второй аргумент и тогда он вернет ровно один ключ.

>>408414

Задача про Вектор как раз на ООП.

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

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

1) какие в задаче есть сущности, которые мы представим в виде объектов? Тут очевидно, есть Работники и есть Департаменты

2) какие у них есть свойства?

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

4) как объекты связаны между собой? Очевидно, один Департамент может содержать несколько Сотрудников и одного Босса.

> не понимаю каким образом хранить данные о рангах сотрудников


Свойство в классе.

> Добавить ещё одну переменную массив в существующий класс, но как тогда правильно записать кто какого ранга, через пару ключ=>значение?


Для каждого работника ты создаешь свой объект. То есть 15 сотрудников = 15 объектов. Соовтетственно, у каждого свой ранг, своя зарплата, и тд.
#586 #408442
>>408406

$random1 = array_rand($word1, 4);

Зачем указывешь 4? Он тогда тебе вернет массив из 4 случайно выбранных ключей. надо не указывать второй аргумент и тогда он вернет ровно один ключ.

>>408414

Задача про Вектор как раз на ООП.

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

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

1) какие в задаче есть сущности, которые мы представим в виде объектов? Тут очевидно, есть Работники и есть Департаменты

2) какие у них есть свойства?

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

4) как объекты связаны между собой? Очевидно, один Департамент может содержать несколько Сотрудников и одного Босса.

> не понимаю каким образом хранить данные о рангах сотрудников


Свойство в классе.

> Добавить ещё одну переменную массив в существующий класс, но как тогда правильно записать кто какого ранга, через пару ключ=>значение?


Для каждого работника ты создаешь свой объект. То есть 15 сотрудников = 15 объектов. Соовтетственно, у каждого свой ранг, своя зарплата, и тд.
#587 #408443
>>408442

>$random1 = array_rand($word1, 4);


>Зачем указывешь 4?


Да я слепо пытался юзать пример из маунала
http://php.net/manual/ru/function.array-rand.php
Спасибо, что прояснил!
#588 #408445
>>408443
+++
Только теперь он показывает индекс т.е цифру, вместо значения http://ideone.com/a92az3
#589 #408446
>>408416

> drinkCoffe(


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

> if ($this->level == 3) { $cof = 1.5; } elseif ($this->level == 2)


Не пиши в одну строку, оформи нормально, с переносами

> echo "Invalid level\n"; die;}


В мире ООП надо выбрасывать исключение. Мой мини-урок про них: https://gist.github.com/codedokode/65d43ca5ac95c762bc1a

> $paid = $this->paid $cof;


>\t\t\treturn $paid


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

> $this->coffe = 20;


ты можешь просто в классе писать

public $coffee = 20;

> $this->paid = $this->getPaid( );


Вот это неприавльно. Если мы поменяем ранг работника, зарплата пересчитается? Если нет то не надо ее хранить вообще.

> if ($this->chief) {


>\t\t\t$this->pages = 0;


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

> str_pad("", $add


Ты наверно хотел str_repeat исплоьзовать

> addWorkers($example, $count) {


Неправильно. Объекты не клонируются, а копируются по ссылке. У тебя в массиве там получается 15 ссылок на один и тот же объект, и если ты например поменяешь одному сотруднику level, то он поменяется у всех сразу. Это неправильно. Должны быть отдельные объекты, мне кажется, а не ссылки на один и тот же.

Вот пример про копирование и ссылки:

// массив копируется
$a = array(1, 2, 3);
$b = $a; // в $b отдельная копия, не зависимая от $a

$c = new Worker(
);
$d= $c; // в $c и $d лежит ссылка на один и тот же объект

> $total += $this->workers[$key]->paid;


Вместо $this->workers[$key] можно и нужно писать $value

Не хватает в таблице колонки «Итого».

В общем, тут еще много чего можно доделать. Я советую исправить замечания и снова показать код для проверки.
#589 #408446
>>408416

> drinkCoffe(


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

> if ($this->level == 3) { $cof = 1.5; } elseif ($this->level == 2)


Не пиши в одну строку, оформи нормально, с переносами

> echo "Invalid level\n"; die;}


В мире ООП надо выбрасывать исключение. Мой мини-урок про них: https://gist.github.com/codedokode/65d43ca5ac95c762bc1a

> $paid = $this->paid $cof;


>\t\t\treturn $paid


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

> $this->coffe = 20;


ты можешь просто в классе писать

public $coffee = 20;

> $this->paid = $this->getPaid( );


Вот это неприавльно. Если мы поменяем ранг работника, зарплата пересчитается? Если нет то не надо ее хранить вообще.

> if ($this->chief) {


>\t\t\t$this->pages = 0;


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

> str_pad("", $add


Ты наверно хотел str_repeat исплоьзовать

> addWorkers($example, $count) {


Неправильно. Объекты не клонируются, а копируются по ссылке. У тебя в массиве там получается 15 ссылок на один и тот же объект, и если ты например поменяешь одному сотруднику level, то он поменяется у всех сразу. Это неправильно. Должны быть отдельные объекты, мне кажется, а не ссылки на один и тот же.

Вот пример про копирование и ссылки:

// массив копируется
$a = array(1, 2, 3);
$b = $a; // в $b отдельная копия, не зависимая от $a

$c = new Worker(
);
$d= $c; // в $c и $d лежит ссылка на один и тот же объект

> $total += $this->workers[$key]->paid;


Вместо $this->workers[$key] можно и нужно писать $value

Не хватает в таблице колонки «Итого».

В общем, тут еще много чего можно доделать. Я советую исправить замечания и снова показать код для проверки.
#590 #408447
>>408445
Потому что array_rand возвращает ключи, а не значения.

http://ideone.com/ro0KgU
#591 #408450
>>408447
мдя, походу я слишком даун для php.
#592 #408451
>>408419

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

Ты читал мануалы тут: https://gist.github.com/codedokode/10539213 ?

Вот этот мануал: http://jtest.ru/bazyi-dannyix/sql-dlya-nachinayushhix-chast-3.html вполне простой если читать не начиная с третьей, а с первой части.

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

>>408424

> $random2 = mt_rand(1, count($word2));


Элементы в массиве нумеруются не с 1, а с нуля.

> echo " $slovo1 $slovo2 $slovo3 \n" ;


> echo " $slovo1 $slovo2 $slovo3 \n" ;


Это выведет две одинаковых строчки. Переменные не поменяют свое значение волшебным образом. Надо не 3, а 6 переменных.

Не называй переменные русскими словами. slovari.yandex.ru тебе помогут.
#593 #408454
>>408450
А ты думал все получатся будет с первого раза и через недельку 1к зелных на одеске будут платить?
#594 #408455
>>408427

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

>>408428

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

>>408429

Почему? Нормально работает, если слова правильно подобрать.

>>408437

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


Можно просто сделать $string = ''; а удалять не надо. Это плохая программа если в ней переменная то существует то нет.

>>408438

> PHP Notice: Undefined offset: 4 in /h


Если у массива count() == 3 то в нем есть элементы 0, 1, 2, а элемента с ключом 3 нету. Отсюда и ошибка.
#595 #408458
>>408451

>Не называй переменные русскими словами. slovari.yandex.ru тебе помогут


Это этика (также как и camelCase?) или же просто для будущей привычки и читаемости
#596 #408465
>>408416
Серьезно засел недели две назад, но до этого знал pascal/delphi и интересовался ИТ, еще на олимпиадки ходил, но там лажал.
>>408446
Спасибо. Надо сохранить и исправить. Просто у меня тут цель - максимально быстро выучить php и не сильно говно-кодить.
#597 #408472
>>408451
Хм, да нет. Я о том, что бы работать с ними в php.
#598 #408473
>>408458

> Это этика (также как и camelCase?) или же просто для будущей привычки и читаемости


Сам php конечно позволяет называть переменные как угодно.

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

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

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

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

Ну а насчет camelCase, это вполне официально написано в стандарте оформления кода PSR-1: http://svyatoslav.biz/misc/psr_translation/#_PSR-2

Насчет требования называть переменные по-английски, его нет в стандартах, так как их пишут американцы, и у них такой проблемы нет.
#599 #408475
>>408472

Чтобы работать с SQL в pHP, можно использовать PDO. читал? http://habrahabr.ru/post/137664/
!xnn2uE3AU. #600 #408476
Аноны, переходите в новый тред: >>408466

Этот тред закрыт.
88 Кб, 759x888
#601 #409993
>>405466
Разобрался. Меня по сути интересовало как вообще заниматься на ней администрированием.
Сейчас подключил к ней модуль extplorer , открываю php и css вручную, и прямо там правлю, сделав бекапы, может можно удобнее , меня пока устраивает.
Что не могу понять.
Клиент сейчас хочет страницу на своем сайте оформить как пикрелейтед 1. То есть элементарно кликабельная картинка перенаправляющая на их свадьбу. Но скопировав верстку и стили (пикрелейтед 2) и вставив их в свой файл , я получаю нихуя.
Тред утонул или удален.
Это копия, сохраненная 17 декабря 2014 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски