Это копия, сохраненная 17 декабря 2014 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.
Требуемые знания: умение читать. Устанавливать пока что ничего не требуется, разве что редактор кода вроде 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 дня слушаешь от заказчика что он о тебе думает, есть удаленная работа — продаешься в рабство, и занимаешься только программированием, задачи тебе будут подкидывать наготово. Ищется по слову «удаленно» на перечисленных сайтах. Зарплата на удаленной работе может быть меньше чем в офисе в столице, но больше чем в твоей деревне. На одеске зарабатывают больше, чем на русском фрилансе.
В общем, давайте начинать уже!
Как и чем отформатировать код
Важно писать код не как попало, а аккуратно, как принято. Почему? Ну потому, что другой человек, который будет смотреть твой код, вряд ли обрадуется, когда ему придется разбирать слипшиеся строчки, разбросанные в беспорядке скобки и написанные русскими словами названия переменных. Особенно плохо будет если это, например, код тестового задания, которое ты сделал, чтобы устроиться на работу. Ты же не хочешь, чтобы тебя называли быдлокодером?
Не бойся, сделать код аккуратным совсем не сложно. Самый универсальный способ — вставить его на сайт 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/
Как и чем отформатировать код
Важно писать код не как попало, а аккуратно, как принято. Почему? Ну потому, что другой человек, который будет смотреть твой код, вряд ли обрадуется, когда ему придется разбирать слипшиеся строчки, разбросанные в беспорядке скобки и написанные русскими словами названия переменных. Особенно плохо будет если это, например, код тестового задания, которое ты сделал, чтобы устроиться на работу. Ты же не хочешь, чтобы тебя называли быдлокодером?
Не бойся, сделать код аккуратным совсем не сложно. Самый универсальный способ — вставить его на сайт 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/
101, 10101, 1010101 ..., а
01, 10, 1010, 0101, 01010 ... не подходит по этому [0-1]+ не вариант
Не оп, но бесплатный хост не вариант, лучше купи дешевый хост например на http://ru.bluehost.com/
Да не за что, я не уверен что круглые скобки с + удачно сочетаются сам, но тип такая задумка.
Но мне же в учебных целях. Хочется выкладывать свое говно по типу считалки слов в тексте.
На локалхосте не вариант? Или ты хочешь перед друзьями хвастаться своими считалками?
посмотри здесь http://hosting101.ru/more-providers.html#2e12
какой-то конкретный не могу посоветовать
Я малость не понимаю, перед тем как начать изучать php, нужны знания html+css? Если да, то учить одновременно или сначала html+css изучить? JavaScript и сахарок к нему единственный путь?
Я думаю (ОП оспорит и скажет, что конечно надо) достаточно просто понять базовый синтаксис и все. Займет минут 20, даже меньше. Все равно все аттрибуты не запомнишь. Ну может сверстать одну страницу, чтоб понять как с этим работать. А так, учить то там и нечего.
>Я малость не понимаю, перед тем как начать изучать php, нужны знания html+css?
У меня вон никаких знаний по html. Но, скорее всего, учить все равно придется.
>>405032
>По моему лучше не стало. Зачем например сюда
>SetPathByParentId(MaterializedPathKeeper $keeper, $tableName, $partitionData)
>передавать имя таблицы? Оно может быть разным? Если не может быть то наверно лучше один раз его при создании указать, а не передавать каждый раз.
Ну я как раз на случай, если я захочу еще что-то древовидным сделать там оставил место для имени таблицы. Выкину в отдельный метод тогда, который устанавливает текущую таблицу.
>По идее за взаимодействие с БД отвечает маппер, там это делать уместнее наверно.
Так это не информация из бд. Это как раз таки в объекте хранится, с него и берется.
>Ну и вариант с before/afterInsert, по моему, более универсальный так как позволяет поменять способ хранения.
Я не понимаю, в чем его суть.
нужно сделать определение из какого города пользователь и в зависимости от этого отображать ему разные данные о наличии товаров на складе(ну, типа, в каждом городе свой склад и в одном городе может товар быть, а в другом нет). Нагуглил несколько способов, но что посоветует ОП?
> Допустим, я хочу сделать папки равные графе id которая PRIMARY KEY и AUTO_INCREMENT, но я создаю папку до того, как заношу запись в базу данных. Какие варианты?
Вставить запись в БД, получить id, создать папку, обновить данные в БД.
>>405094
Если ты учишься по моему учебнику, то перед изучать необязательно — можно изучить после. Если не по моему то в 90% случаев да. надо сначала изучить HTML.
У меня есть путь HTML c задачками если что: https://gist.github.com/codedokode/58ebc90bd006baf4b35c
JS тоже можно на потом отложить.
>>405109
Можно но уровень там очень базовый.
> Ну я как раз на случай, если я захочу еще что-то древовидным сделать там оставил место для имени таблицы
Так я не спорю, что имя таблицы нужно. Да, надо его передавать. Но почему в функцию 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 и тогда мы получим объект дерева для комментов только к одному файлу — вполне удобно.
И еще вопрос, а почему 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 в чужой процесс.
> , почему такое случается?
Так и должно быть. Попробуй такой пример:
$x = preg_replace("/(((\\d)\\d)\\d)/", '1=$1, 2=$2, 3=$3', "123456 789");
$1 это первые скобки
$2 вторые
$3 третьи
Если не найдешь работающую версию Vbox, можно попробовать альтернативы вроде VMWare или Microsoft Virtual PC.
Оно работает еще хуже, чем предыдущий вариант
ideone.com/5Y2G0W
Я удивляюсь почему этот вариант не работает
http://ideone.com/j7cSIK
Пиши не $1 $2 $3 а как у меня '1=$1, 2=$2, 3=$3' чтобы увидеть что считается за $1 что за $2 и т д.
Так и должно быть. Ты просто неправильно написал код.
> почему этот вариант не работает
Потому что ты не совсем понимаешь что считается за $1, что за $2 и тд.
for($i=0; $i<10; $i++) {
$k=$i;
}
echo $k;
Переменная $k будет равна 9. Нет я конечно понимаю что считается с нуля, меня интересует почему именно записывает 9 а не например любое число от 0 до 9?
Потому что после цикла $k будет равно 9, не? Странный вопрос.
Потому что сначала отрабатывает цикл, и после того как цикл отработал, $k = 9
Я конечно понимаю что документация это важно, но там столько всего, если учить по книгам и например по Интуиту толку не будет?
Я не сказал что нужно читать всю документациюхотя нужно. Но епта, если ты применяешь функцию и получаешь хуйню, логично посмотреть инфу про эту функцию в документации.
Возможно, по сути это бессмысленно, но навыки всёравно улучшаются как мне кажется. Например я написал strpos и strstr но только когда работает мы ищем один символ, как написать для поиска подстроки не знаю.
У меня идёт элементарный поиск в строке через символ и когда i-ый элемент равен значению того что ищем, записываем этот номер в массив. Потом имеем массив совпадений. В случае с strstr первым циклом находим номер совпадения символа в строке, а потом используем этот номер в качестве стартового значения для следующего цикла, в которым всё вписываем в строку начиная с буквы совпадения. Как сделать что бы искать не символ а хотя бы несколько символов я пока не знаю.
Две автомашины движутся навстречу друг другу со скоростями 60км/ч и 80км/ч. Расстояние между ними 500км. Какое расстояние будет между ними через 2
часа?
Сделать интернет-магазин.
Я сделал бекап через akeebo .
Что мне непонятно- обязательно ли устанавливать её на комп для залива контента или это можно сделать средствами самой админки. Точнее - нужно залить новую шапку.
спасибо
Написать парсер с двача
<?php
header("Location: index.php");
?>
Это вот так? Его можно только в самом вверху страницы делать?
У тебя код, который пишет в БД, там же где и форма или отдельный скрипт? В любом случае, можешь поместить его туда же где и форма, только обернуть в if ($_SERVER['REQUEST_METHOD'] == "%тут твой метод%")
Ну и вообще, что это за скрипт, который пишет пустые поля? Нигде првоерки никакой нет чтоли?
Ну давай разберем на примере.
$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.
Ну давай разберем на примере.
$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.
> И у меня вопрос можно ли это сделать средствами языка ПХП?
Да. PHP — Тьюринг-полный язык, а это значит что на нем можно реализовать любой алгоритм.
> У меня сразу возник целый ряд проблем, например функции вида strpos и strstr получается писать только для одного символа
Ты что-то неправильно делаешь. Сделай дополнительный цикл, который будет проверять совпадают ли оставшиеся буквы.
> Можно ли решить эту проблему без регулярок?
да.
Алсо, покажи код. Трудно так советовать.
Алсо, прочитай это: https://gist.github.com/codedokode/ff99e357e9860ea169b8
Если ты хочешь сделать хорошие функции, аналогичные mb_ функциям, то надо сначала разбить строку на массив символов через хак с preg_split и затем уже работать с этими массивами.
В первом шаге цикла в $k записывается 0
На втором запиывается 1
На третьем 2
....
На десятом записывается 9
На одинаццатом $i = 10, условие $i < 10 не соблюдается и цикл заканчивется, а в K остается последнее записанное значение.
А ты читай не всю документацию, а только по тем функциям которые используешь.
>>405262
> просто интересно сконструировать подобное.
да, для обучения это хорошая идея. Только тогда уж делай чтобы они нормально с русскими буквами в utf-8 работали.
>>405280
Код покажи уже. Ну что мы будем по твоему описанию угадывать как он написан что ли?
>>405298
На какую тему? Задачи в учебнике из ОП-поста решал? Там есть в том числе на ООП хорошие задачи, например «кошки-мышки».
Есть еще задачки с собеседований:
>>399201
>>399214
Я не очень понял что ты хочешь. Ты хочешь перенести БД и файлы с помощью указанной программы с сервера на свой комп? Если эта программа устанавливается как плагин к Джумле то очевидно ее надо поставить и на сервер и к себе, чтобы пользоваться.
Если ты хотел спросить «обязательно ли ставить Джумлу себе чтобы что-то поправить на сайте» то нет, это можно сделать скорее всего через админку.
После успешной отправки формы надо делать редирект. Например после добавления поста надо делать редирект на страницу просмотра этого поста. После загрузки файла на rghost он тебя редиректит на страницу скачивания.
Это правда не устраняет проблему на 100%. Если у человека медленный плохой интернет, то запрос может отправиться, а ответ, с редиректом, не придти, и тогда человек обновит страницу и отправит запрос повторно.
Код оформлен не по стандарту. После 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 и посмотреть как там сделано. Разбери их исходный код и сравни со своим.
Код оформлен не по стандарту. После 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 и посмотреть как там сделано. Разбери их исходный код и сравни со своим.
Спасибо. насколько я понимаю функция avigator.geolocation.getCurrentPosition выдаст мне координаты. как же мне перевести их в город, регион?
почитал google maps api и хочу заодно спросить: судя по всему можно сделать так, чтобы человеку на встроенной гуглокарте отображало путь до ближайшего магазина, ведь можно? его местоположение будет известно, местоположения магазинов тоже.
Вот есть у меня список:
<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?
Нагугли в интернете формулу вычисления расстояния между 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/
У меня стоит убунта на ноуте, хочу поставить чистый линукс - стоит того?
И где взять лучше дистрибутив для установки?
Смотрел на гну, кернел и линукс.орг, там только сборки.
Нэ.
> Смотрел на гну, кернел и линукс.орг, там только сборки.
Линукс — это ядро. Само по себе оно малополезно, потому тебе нужен конкретный дистрибутив.
Если ты хочешь хардкора, ставь генту. Это дистрибутив, где программы надо компилировать и ставить вручную.
Если хочешь нормальный линукс, можешь попробовать дебиан (на нем основана убунта например). Он простой и надежный, из минусов — версии программ старые, так как там в первую очередь ценят надежность и проверенные временем решения.
Если ты не хочешь брать готовый дистрибутив, а хочешь боли и унижений, можешь попробовать «linux from scratch» то есть собрать и скомпилировать систему из исходников с нуля: http://www.linuxfromscratch.org/
http://habrahabr.ru/post/113615/
Но судя по твоему вопросу, ты не шибко опытный, и тебе gentoo за глаза хватит.
Есть сайт http://distrowatch.com/index.php?language=RU где есть рейтинг популярности дистрибутивов.
«чистого» линукса нет. Чистый линукс — это ядро, которое показывает какие-то надписи на черном фоне и через 2 секунды падает в панику из-за отсутствия программы init.
Чтобы системой можно было пользоваться, кроме ядра нужны системные программы — минимум, оболочка командной строки с нужными библиотеками, программы для поддержки железа. . Их можно либо собрать из исходников самому либо установить в составе готового дистрибутива.
> И где взять лучше дистрибутив для установки?
На официальном сайте этого дистрибутива. Для дебиана например можно скачать netinstall — небольшой образ, который можно записать на дис или загрузочную флешку, а дальше он все скачает с интернета.
Алсо, эксперименты по установке лучше проводить на виртуальной машине. Или хотя бы в отдельный раздел на диске.
>Чистый линукс — это ядро,
debian-linux можно запустить с фрибсдешным ядром. линукс это НЕ ядро.
<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 меняет своё значение, что очевидно. Как запретить это ей делать?
Ну например можно втыкнуть первую форму в else твоего if. Но в целом все равно какая-то хуйня получается,не говоря уже о том, что ты метод формы, типы и именя инпутов пишешь без кавычек лучше бы ты описал что делаешь и дал ссыку на какую-нибудь песочницу со своим кодом.
Я на денвере делаю, мне короче нужно на экране иметь одну кнопку, после нажатия на которую выведется на экране определённая картинка, текст (взависимости от рандомного числа) и кнопка по которой можно последовать дальше. Вообще затея такая, я пытаюсь написать примитивную игру в которой выступаешь в роли брокера, и каждый раз вначале дня выводится цена на акции, которая зависит от политических событий (есть массив с вариантами событий случайно выводится одно из них, от события зависит цена на акции при помощи специального коэффициента). Вторая кнопка на странице предназначена для того что бы перейти на саму биржу где можно покупать акции. Конечно можно просто написать в action на какую страницу перейти и там уже посчитать, но захотелось придумать как можно сделать это на одной странице.
Есть один вопрос на счет gmail'a!
Дело в том, что гугол, каким-то образом, при регистрации е-мейла берет или мак-адрес или что-то, что на 1 девайсе можно зарегистрировать е-мейл не указывая телефон 1 раз. Т.е. при повторной регистрации е-мейла у меня уже будут спрашивать номер телефона, без которого почту не сделать.
Куки и сессии чистил, АЙПИ менял - в чем может быть проблема?
Дело в том, что я с ноута попробовал в этой же сети зарегистрировать, и там зарегистрировалось ОК, но на 2 раз тоже спросило телефон.
Во-первых удали денвер. Во-вторых я тебе выше написал как это можно реализовать.
<input type="button" onclick="this.disabled=true;">
http://habrahabr.ru/post/48381/
Это подойдёт?
Спасибо попробую, а зачем Денвер удалять? Кстати как что скажешь про то что я написал? Только всё очень примитивно и зависит практически всё от вероятности, но некоторое подобие игрового процесса должно быть. Сейчас уже почти сделал, короче каждое утро выскакивает событие, например там "Танкер Шелл потерпел крушение", поэтому акции падают, у каждого события есть своё значение коэффициента которое увеличивает либо уменьшает цену акций (есть стартовая цена акций, например 50 долларов). Дальше предлагается игроку купить либо продать определённое количество акций, есть стартовый капитал (допустим 500 долларов) к которому отнимается либо добавляется сумма взависимости от действий игрока, цель за определённое количество дней заработать определённую сумму. Также есть статистика по всем дням, сколько было куплено или продано акций и какие активы были на тот момент. Конечно тут мало что зависит от игрока, но я надеюсь усложнить эту игру в будущем.
Спасибо, но это же яваскрипт? Хотя думаю подойдёт.
Я думаю тебе оп подробно ответит, у него явно больше терпения чем у меня, лол. В целом ничего нельзя сказать конкретно, потому что я даже не знаю как в принципе работает рынок акцийили как там оно называется. Очевидно что и у rand() есть свой механизм действия и он вряд ли достаточен для организации рандома для подобной "игры".Если ты действительно реализовал то что говоришь, очень странно что ты не можешь показать код. Это говорит о том что написал ты много хуйни. И это еще одна причина показать код.
Да хуйни много, я не дописал ещё, в принципе могу скинуть код но даже не знаю будет он работать или нет, так как ещё работаю над ним, там постоянно проблемы возникают, думаю через дня 3-4 должно работать. Насчёт рынка акций то тут конечно всё не так, у меня нет не всяких РТС не курса валют, не прочего, я только пробую что то написать, учить ПХП начал пару месяцев назад в этот тред впервые зашёл. Куда кстати вы код размещаете? Я наверное зря начал рассказывать про это всё, так как там ещё много проблем.
С фига ли Gii базу не видит, когда она есть?
http://ideone.com/26wjav
posix_kill ($pid, 15);
но естественно не помогло.
затем попробовал
exec("kill -9 $pid");
конечено, точно также не заработал и вместо завершения вывел pid.
так что аноны, как завершить процесс по pid только средствами php?
Also,
была идея получить дескриптор процесса по pid и сделать proc_terminate, но я не знаю как получить этот самый дескриптор процесса по pid.
блядь, это же сука невозможно! pid - номер процессора apache. ну что я за дебил. аноны, как скрипт то этот бесконечный завершить?
В винде нет ни системного вызова kill (который в POSIX отправляет сигнал) ни программы kill. Есть taskkill правда.
В твоем случае проще всего залогинитьяс на сервер и убить диспетчером задач.
Ты мануал открывал? По proc_terminate
Там написано как получтиь дескриптор.
Что за дебил составлял спамлист на этом сайте?
Гм, может быть. В вики написано что линукс это « общее название Unix-подобных операционных систем, основанных на одноимённом ядре». Но факт в том, что как я понимаю «чистый линукс» в природе не существует, линукс это название и ты можешь установить лишь один из дистрибутовов.
>>405681
Яваскриптом.
>>405696
Яваскрипт нужен для этого. Программы на яваскрипте встраиваются в страницу и выполняются в браузере.
>>405697
Введи телефон, в чем проблема? У меня всегда спрашивает, так как у нас на одном IP полгорода сидит. Или регистрируйся на яндексе, там вроде этого нет.
Алсо, если тебе надо много аккаунтов для спама, сео или подобных целей, то такие темы у нас не обсуждаются и не приветствуются.
>>405699
Удалить я думаю он всегда успеет. Ему бы основы HTML и PHP подучить лучше.
Тебе еще данные надо где-то сохранять — в базе данных например. А то скрипт в php после завершения освобождает память и переменныеы и при повторном обращении к странице запускается с нуля.
Ну и для игр обычно JS используют чтобы не перезагружать страницу постоянно. Хотя это не обязательно.
>>405706
> Куда кстати вы код размещаете?
Маленький кусок кода — ideone.com (там сразубудет виден результат работы скрипта), много файлов — gist.github.com или сам github.
Ты можешь задавать вопросы, если тебе что-то непонятно, но имей в виду, что у нас никто наготово информацию разжевывать не будет, а лишь даст ссылку на мануал или слова для гугления.
$fp = fopen("close.txt", "a");
$mytext = "true";
$test = fwrite($fp, $mytext);
fclose($fp);
а в бесконечном цикле:
for(;;){
$check = readfile("close.txt");
if($check=="true"){exit("Задача завершена");}
else
{
...
}
но это почему-то не работает. в файл пишет, но процесс не завершается.
В database connection надо писать не имя БД, а имя соединения. Для основного наверно можно оставить пустым или вписать default или еще что-нибудь.
>>405734
При использовании русских букв надо ставить в конце регулярки флаг u (а лучше его ставить вообще всегда).
>>405790
Рекурсия, то есть вызов функцией самой себя.
>>405824
Апач перезапусти. И исправь код.
Апач не предназначен для запуска скриптов в бесконечном цикле. Он предназаначен для запуска скриптов который отдают ответ в браузер. Так что первое что ты должен сделать не запускать этот скрипт под апачем.
Удобнее конечно исплоьзовать линукс я вообще не понимаю какой смысл делать сервер на винде, если только нет необходимости в windows only софте.
Второе что ты должен сделать это запускать скрипт из командной строки. Чтобы не париться с перезапуском, можно поискать программу-супервизор которая будет его перезапускать когда надо.
Третье что ты должен сделать это читать мануал по команде прежде чем ее использовать. Читай:
http://php.net/manual/ru/function.readfile.php
И поймешь почему не работает.
Программа-супервизор конечно громко сказано. Хватит bat файла который будет перезапускать скрипт и логгировать факты падения.
Передавай в функцию при втором вызове $arr['key1']
В общем, напиши код и покажи, а то трудно говорить не видя кода. код на ideone удобно постить.
http://ideone.com/QP0XyO
Сделал так, но может нужно что-то править? Работает, но можно ли привести к более элегантному виду?
А точнее, не работает, стирается нужный ключ.
— лучше использовать нормальные имена функций и переменных, а то ничего не понять. В чем выигрыш что ты сократил одну букву?
— лучше ставить {} после foreach, а ты не ставишь
— есть стандартная функция array_walk_recursive для обхода рекурсивно массива
— ты неправильно делаешь что делаешь составной ключ разделенный пробелами. А что, если в массиве есть ключ с пробелами? Более того, нет смысла склеивать ключи в строку и разбивать — проще передавать сразу массив ключей.
Я знаю какие имена для переменных и функция делать, мне нужна была помощь в решении, а не нотации на тему ставить скобки для одного выражения или нет, какие имена придумывать. Если бы ключ был с пробелами, я бы делил иначе. Он не может быть составным.
http://ideone.com/7KCVY6
Все хорошо, кроме else, какого хрена оно не работает?
Какой-то ты херни нагородил. В массиве, когда ты перебираешь через foreach буквы то заглавные, но ты никуда результат не сохраняешь, только во временные переменные $value и $upperlatter, а $text в итоге остается с маленькими буквами. Потом проверка
\tif ($upperlatter[0])
проверяет, существует ли символ с нулевым индексом в массиве. А он всегда существует в данном примере, даже если это не буква, а пробел или еще что-то.
И вообще разбивать каждый массив слов на еще один массив букв по моему слишком хитровыебано. Воспользуйся лучше вот такой замечательной функцией http://php.net/manual/ru/function.mb-substr.php и работай со строками массива $text.
В твоем подходе, когда ты вызываешь в CommentMapper
$path = ... что то там ... getPathForComment(...)
У тебя все жестко завязано на то, что используется Materialized path и код работы с Mpath находится в том числе в CommentMapper.
А если сделать через beforeInsert/afterInsert то мы абстрагируемся от конкретного способа реализовать древовидность и можем заменить его на любой другой, к примеру, Nested Sets ии Adjacency List. В CommentMapper при этом никакого кода работы с Mpath не будет.
То есть в таком варианте разделение ролей получается лучше и код работы с Mpath находится только в одном классе.
Вот теперь понял. Убрать код с путями из коментмаппера.
Спасибо. Я уже разобрался, теперь другой вопрос.
Перебирая через foreach ($array as $value)
Я в цикле присваиваю $value какое-нибудь значения, почему оно не сохраняется в $array?
http://ideone.com/6nX68v
Насчет интерфейсов, обычно их названия оканчиваются на -able:
Countable
Iterable
Serializable
Но в твоем случае, мне что-то ничего подходящего не подходит, потому MaterializedPathKeeper можно переименовать в MaterializedPathEntity, ну или можно оставить как есть если тебе это название нравится.
> $pathElements = explode('.',$path);
> $maxPath = array_pop($pathElements);
лучше сделать 2 функции, разбить путь на компоненты и склеить. Тогда мы легко сможем например заменить потом путь из точек на более компактный бинарный формат. Не то, чтобы мы это планируем, просто это сделает код более логичным.
Потому что value это не элемент массива, а его копия. ты меняешь копию.
Решить проблему можно либо добавлением знака & (мануал http://php.net/manual/ru/language.references.php ), или можно просто добавлять измененные элементы в новый массив.
Оно и не должно там сохраняться. $value это просто временные переменные внутри цикла foreach которые имеют значения массива. Если ты хочешь изменить массив, тебе нужно присваивать значение переменной $value непосредственно переменной массива:
например вот так http://ideone.com/OxKHuy (хуево объяснил, но надеюсь ты понял)
>>405968
Спасибо. Буду иметь два варианта, как с этим делать.
Я честно говоря задолбался. У меня ничерта не выходит. Долбанную задачку уже пол дня решаю и заступорился вконец, вот без понятия что делать с этой херней и почему там preg_replace не работает
http://ideone.com/eKzhtF
https://github.com/sqghub/uppu.ru
Хотя все еще остались части в CommentMapper'e.
В выборке комментариев по айди файла стоит сортировки по пути.
Казалось бы st, notepad++, etc, но там только основная инфа, а хочется видеть какие параметры принимает и что возвращает.
>А то netbeans прожорливый дюже и пека аж усерается.
Прожорливый это сколько? У меня пхп сторм полгига жрет.
Да тормозит с ним компьютер ужасно. Приходится почти все закрывать, чтобы переключение между браузером и ide не занимало по секунд 30. Жава ебучая.
А там есть такая хуйня, как на пике?
И внезапно вопрос к знатокам: может это можно дополнениями в sublime text замутить?
>>405983
Бро, у тебя слишком сложно для того что бы такой же нуб например мог взять и разобраться. Но я тебе рекомендую убрать ща нахуй все функции и оставить чисто голый код, и в нем будет проще ориентироваться, вставлять вар_дампы где хочешь и все такое. Когда ты в одном куске кода уверен на 100%, то его уже заворачиваешь в функцию и используешь её тогда в твоем коде как обычную функцию из базовых библиотек. Всегда так делаю, зависимость есть. Может конечно и неправильно, гуру что скажут? В общем как-то так.
Как сворачивать? В редакторе - можно, а здесь никак. Не работает только preg_replace во второй фунции. И я не знаю почему
Правильно раставить пробел со знаком препенания.
Для ошибок у меня уже все работает и лежит в другом файле.
Текст - первое что пришло в голову
Алсо такая проблема, в убунте все стало оче мелким внезапно, шрифты все, как исправить?
>Как мне этот сайт увидеть из основной системы?
Думаю это уже настройки виртуалки, т.е. надо как-то виртуальную машину сделать частью сети реальной.
ноуп, файл пересохранил, там тоже utf-8.
Как же сложно быть нубом в этом вашем вебе. Вместо того что бы сидеть на каких-нибудь с++ быдлокодить ты должен пердолиться линуксом и всякими веб-серверами, знать кроме самого языка еще как минимум html и в перспективе еще 2 хуйни. Как же лампово было в школе кодить на паскале, я просто открывал окно с кодом, хуярил его туда, зная максимум самый базовый синтаксис даже без функций и мог запилить хотя бы змейку, или вообще на изичах текстовую игру, тут же блядь даже просто интерфейс с пользователем через боль и унижения.
Дай самому отучиться.
class Example
{
∙∙static function vacuum_horse()
∙∙{
∙∙∙∙$rus = 'Вакуумный конь';
∙∙}
}
Пробовал $var = Calculator::vacuum_horse()->$rus; и получил нотис Trying to get property of non-object.
Попробуй мету перед тайтлом поставить. По идее так и должно быть, поскольку это часть заголовка, а после вывода они не обрабатываются бла-бла-бла...
Да это я умею. Внезапно представил, а что если бы их было там несколько. Тогда к какой прикажете обращаться? Отсюда вангую что такое не возможно в принципе.
да уже решили проблему вроде как, спасибо.
Как сделать форму для вставки большого текста бтв? Тип как на дваче для отправки поста. Самую простую, не растягивающуюся.
Как правильно нынче записывать кириллицу в 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');
> (,|;|?|!)
Знак вопроса — это специальный символ, который задает повторение. То есть он используется в таком виде:
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
Ну и еще совет. Ты ищешь только знаки препинания, вокруг которых с обоих сторон есть хотя бы один пробел. А что если его нет?
Вообще, неплохо. Вот советы и замечания
> расчитывал, что здесь можно будет написать 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.
Вообще, неплохо. Вот советы и замечания
> расчитывал, что здесь можно будет написать 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.
Ты прав. То, что 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 методы для выборки с учетом иерархии.
Ты прав. То, что 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 методы для выборки с учетом иерархии.
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.
> А там есть такая хуйня, как на пике?
Нет но она есть в интернете.
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.
> А там есть такая хуйня, как на пике?
Нет но она есть в интернете.
Это связано с особенностями настройки сети. По умолчанию виртуальная сетевая карта виртуальной машины связана только с сетевым движком 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 тут есть немного про настройку гостевой ОС.
Я советую тебе разобраться как это все работает, а не просто бездумно выполнять непонятные советы из интернета.
> в убунте все стало оче мелким внезапно, шрифты все, как исправить?
Там же есть настройки (кнопка с шестеренкой) и выбор размера шрифта. Или ты в обход настроек что-то с DPI нахимичил?
>>406070
> Как же сложно быть нубом в этом вашем вебе.
Ты просто пропускаешь теорию и изучение основ и берешься сразу за сложное. А потом удивляешься почему не работает. Надо изучать все последовательно, а не перескакивать темы.
Ну или может тебе учебник плохой попался который не объясняет кодировки.
> Как же лампово было в школе кодить на паскале, я просто открывал окно с кодом
Это ограниченность. Ты ограничиваешь себя крошечным окошком 22×80 в устаревшей 30 лет назад программе. Не понимаю, что в этом хорошего.
> Внезапно захотелось обратиться в к значению переменной внутри статического метода.
Нет. Переменные внутри функций и методов (локальные) изолированы от внешних (глобальных) с целью повышения качества кода. Если бы такой защиты не было, все бы быдлокодили как хотели.
Алсо, скорее всего ты исплоьзуешь ООП неправильно если делаешь все на статических методах. Это не ООП, а тот же самый процедурный код.
>>406096
textarea. Не пропускай основы HTML. У меня кстати, есть «путь HTML» который заставит тебя тщательно выучить HTML/CSS, не хочешь попробовать как-нибудь? https://gist.github.com/codedokode/58ebc90bd006baf4b35c
Растягиваемость добавляет браузер, для этого делать ничего не надо.
> Как правильно нынче записывать кириллицу в PHPExcel? Нагуглил в интернетах способ через iconv.
PHPExcel с её классами и методами очень удобна, но вторым параметром в setCellValue приходиться добавлять вот такую вот конструкцию с iconv,
Ты сам виноват. Win-1251 — отстой, рано или поздно умрет. я бы ради нее даже одну строчку пожалел в код добавлять. Ты делаешь большую ошибку что внутри скрипта исплоьзуешь эту кодировку.
Потому страдай.
В твоем случае, надо писать iconv. также, ты можешь написать функцию с более коротким именем вроде toUtf или сделать свою версию setCellValue c нужной кодировкой.
> Читал ещё, что можно изменить кодировку в файлах PDOExcel,
Ты не можешь просто так хранить данные как хочешь, ексель не сможет их прочесть.
Сетую как раз на то, что вместо изучения чего-то основательно приходится в голову загружать горы синтаксиса из других технологий, да еще и помнить о всяких настройках и кодировках. В общем плохо сделали веб, гниловат он изнутри я бы сказал даже. Ведь все это по большому счету является огромными костылями, навешанными на устаревшее говно мамонта под названием http, который не способен в динамику, а может только странички в html туда сюда гонять, и вот нужно это говно подпирать с двух сторон, с одной стороны php, с другой js что бы было все как у людей в других сферах программирования.
>Ну или может тебе учебник плохой попался который не объясняет кодировки.
Учусь по треду и по твоему учебнику же, ну и в книги и статьи пытаюсь изучать.
>>406166
В общем вот запилил свой первый сайт ололо, знаю что быдлокод и можете гнобить меня, у меня была цель наконец-то создать хоть какую-то связку из html+php, а то только на идеоне пхп дрочить уже нет больше сил. Попытался скормить ему властелина колец - все норм, пикрилейтед. Далее две книги одновременно тоже проглотил. Но вот 3 уже не смог, хотя там на самом деле объемы меньше мегабайта в каждой. То есть текст порядка 1.5мб осиливает, а далее уже нет. Считает кстати быстро, думал хуже будет.
В чем ограничение собственно в html форме textarea или в php? Длина строки там или массива?
Странная регулярка. Читал уроки ОП-а, и задачки делал, но вот что эта делает не понимаю, точнее догадываюсь, что ищет слова в тексте, судя по результату.
я советую для разработки использовать несуществующие имена типа 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'] = ...;
Хотя, как по моему, так запускать в консоли удобнее чем через браузер.
я советую для разработки использовать несуществующие имена типа 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'] = ...;
Хотя, как по моему, так запускать в консоли удобнее чем через браузер.
\p{L} ищет любую букву на любом языке. Почитай-ка, у юникодных символов есть свойства: http://php.net/manual/ru/regexp.reference.unicode.php
>Ты сам виноват. Win-1251 — отстой, рано или поздно умрет. я бы ради нее даже одну строчку пожалел в код добавлять. Ты делаешь большую ошибку что внутри скрипта исплоьзуешь эту кодировку.
Погоди, а какие кодировки в БД (с уймой данных в кириллице) нынче предпочитают модные и продвинутые программисты? Все UTF-8 используют что ли? И все php-скрипты обязательно в UTF-8?
Означает ли это, что если я экспортирую куда-нибудь во внешние файлы все данные из таблиц своей БД, а потом создам новую в UTF-8 и импортну прошлые таблицы, то смогу беспрепятственно и без костылей работать с библиотекой PHPExcel, для которой UTF-8 родной? Лал, лень возиться, проще на двоще спросить.
>Ты делаешь большую ошибку что внутри скрипта исплоьзуешь эту кодировку.
Мне сложно описать тебе всю кулстори, скажем так, я не веб-разработчик, уже не студент, но работаю в около-ИТ сфере. Слегка знаю php, организацию баз данных и на очень слабом уровне JS; надо вследствие производственной необходимости разработать узкоспециализированное веб-приложение, которое и вовсе будет работать в мелкой локалке. Функционал сайта довольно широкий, примитивное знаение джумлы не помогло бы реализовать, а серьёзное изучение (потому что сайт-визитка веб-портал не катят которые я бы мог быстро реализовать не катят) отняло бы много времени. В случае с другими CMS, ещё больше.
Уже почти забацал, завершаю. Это уже даже превратилось в полухобби, нежели в серьёзное задание/поручение, от этого можно было даже отказаться/забить, з/п я так и так получаю и получу; я даже не уверен, будет ли оно серьёзно использоваться.
Ты неправильно пишешь тег 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
Ну и добавлю еще раз, веб-технологии не такие и плохие. Сообщество вокруг них по моему самое большое и активное, постоянно появляются новые инструменты, библиотеки, браузеры развиваются и т.д. Можно сказать, передний край.
> Все UTF-8 используют что ли? И все php-скрипты обязательно в UTF-8?
Да. В отличие от 1251 которая содержит всего 255 символов или около того, utf-8 позволяет хранить данные на любых языках и потому это стандарт дефакто.
Где-то в Америке еще есть сторонники 8-битных кодировок, но это их внутриамериканское дело, страдать им придется когда захотят свой продукт на международный рынок вытащить.
> Означает ли это, что если я экспортирую куда-нибудь во внешние файлы все данные из таблиц своей БД, а потом создам новую в UTF-8 и импортну прошлые таблицы, то смогу беспрепятственно и без костылей работать с библиотекой PHPExcel
Да, и не только с ней.
Тут пишут: http://petrenco.com/mysql.php?txt=141 — хватит 1 SQL запроса, если у тебя все верно хранится то MySQL сама может конвертировать. Не забудь сделать бекап.
> Мне сложно описать тебе всю кулстори, скажем так, я не веб-разработчик, уже не студент, но работаю в около-ИТ сфере.
Ну ок. По крайней мере теперь, если ты будешь делать следующий проект, ты будешь знать какую кодировку выбирать.
Благодарю.
Я уже читал статью по консоли, спасибо огромное что ты их делаешь. Но прост такому хую как я, который отвык от кропотливой умственной работы трудно учиться без какой-либо системы. Если учебник по пхп еще представлял из себя какую-то последовательность с упражнениями, которые как раз и нужны большинству нубов в большом количестве имхо, то дальше идет просто гора инфы за ктотрую фиг пойми с какой стороны браться и фиг знает как применять слету.
[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/
Вот такое пишет в логе апача по указанному тобой адресу.
Сажа приклеилась.
Собственно это я попытался впихнуть две книги первых Властелина колец в форму. Судя по всему метод post не принимает больше 8 мегабайт, хотя не знаю откуда им там взяться когда текстовые файлы вроде как весят по 800кб, и должно быть ну максимум 2мб в буфере.
файл php.ini не нашелся на виртуалке вообще. Там линукс и устаавливал через apt-get, посмотрел мануал http://php.net/manual/ru/configuration.file.php и возможных файлов php-apache.ini тоже не найдено.
http://ideone.com/7XFU2U
P.S. Я еще не искал минимального пути и не делал, что бы наш клиент не ходил по кругую
В линуксе конфиги в /etc
Там вроде бы /etc/php5/apache2/php.ini и папка php.d
И тебе лучше не править php.ini а добавить свой в папку php.d, например
username.ini
и в нем писать что надо. Не забудь перезапустить Апач
sudo service apache2 restart
Проверить текущие настройки можно php -i в консоли или файлом <?php phpinfo(); в браузере.
Я бы советовал посмотреть на существующи алгоритма поиска пути и выбрать который больше нравится:
https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%BF%D1%83%D1%82%D0%B8
Спасибо. Сейчас просто, как пример задачи хочу сделать его наглым перебором, а учитывая, что станций не много, то все будет работать нормально.
Просто интересовался не сделал ли я где-нибудь тупой ошибки.
По моим ощущениям, везде, где надо как-то задать шаблон для тексты или строки или заменить одну часть текста на другую. Так что действительно нужны.
Прочти пикрелейтед. Ты залезешь в самые кишки регулярных выражених и постигнешь всю их глубинную суть.
О, спасибо, надо будет почитать.
>Правильно так и надо сделать. MPMapper может работать только с MPKeeper, а не любыми сущностями.
Интерфейс требует точного совпадения.
>Если у тебя в Comment есть метод getPartitionData то treeMapper может и сам его вызвать. Но можно конечно и как у тебя, главное не забывать этот методы вызвать перед любым действием.
Это я просто на ходу переделывал. Было немного иначе. Логично, что бы маппер сам его вызывал.
>В принципе, afterInsert можно сделать пустым. Мы можем в beforeInsert проставить path, а CommentMapper его сохранит вместе с остальными полями (хотя так, получается, он должен знать об их наличии).
Так же логичнее. Коммент маппер не знает о тримаппере.
>Неиспользуемые функции удаляй
Просто забыл.
>И избавиться от работы с путем как со строкой напрямую.
В смысле?
>Тебе нужен логический оператор AND
Я думал, что это он и есть.
>Потому надежнее начинать отсчет с 1.
Отчет комментариев и начинается с 1. А это именно айди комментария. Либо нуль.
>C чего бы там будет пустая строка?
А в каком виде с бд приходит значение null?
>Потому предлагаю пожертвовать абстракцией и оставить ORDER BY path либо сделать в MPMapper методы для выборки с учетом иерархии.
Я пришел к такому же выводу, пока читал! хотя мне понравилась идея с query builder'ом
Больше всего меня в моем варианте волнует первый пункт - с параметром типа HMember в MPMapper'е. Но интерфейсы же другого не позволяют, да?
>Правильно так и надо сделать. MPMapper может работать только с MPKeeper, а не любыми сущностями.
Интерфейс требует точного совпадения.
>Если у тебя в Comment есть метод getPartitionData то treeMapper может и сам его вызвать. Но можно конечно и как у тебя, главное не забывать этот методы вызвать перед любым действием.
Это я просто на ходу переделывал. Было немного иначе. Логично, что бы маппер сам его вызывал.
>В принципе, afterInsert можно сделать пустым. Мы можем в beforeInsert проставить path, а CommentMapper его сохранит вместе с остальными полями (хотя так, получается, он должен знать об их наличии).
Так же логичнее. Коммент маппер не знает о тримаппере.
>Неиспользуемые функции удаляй
Просто забыл.
>И избавиться от работы с путем как со строкой напрямую.
В смысле?
>Тебе нужен логический оператор AND
Я думал, что это он и есть.
>Потому надежнее начинать отсчет с 1.
Отчет комментариев и начинается с 1. А это именно айди комментария. Либо нуль.
>C чего бы там будет пустая строка?
А в каком виде с бд приходит значение null?
>Потому предлагаю пожертвовать абстракцией и оставить ORDER BY path либо сделать в MPMapper методы для выборки с учетом иерархии.
Я пришел к такому же выводу, пока читал! хотя мне понравилась идея с query builder'ом
Больше всего меня в моем варианте волнует первый пункт - с параметром типа HMember в MPMapper'е. Но интерфейсы же другого не позволяют, да?
http://ideone.com/ijjFLe
пик-рандом
Примного благодарен
На 17ой строчке ошибка.
При создании записи в блоге такая ошибка. Смущает, что в описании ошибки VALUES (:yp0, :yp1, :yp2, :yp3), хотя я писал совсем другое
Прочитай про внешние ключи если не знаешь что это (хотя надо бы знать): http://denis.in.ua/foreign-keys-in-mysql.htm
В твоем случае ты вставляешь post в котором нет или непраивльная ссылка на user.
Не понимаю. в чем проблема. Наследование интерфейсов прекрасно работает:
http://ideone.com/aTWxt9
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( )
В таблице tbl_users есть запись с id 1. Если я его вписываю в форму, всё равно ошибка остаётся
Между «вписываю в форму» и «выполняется запрос» есть немало слоев кода. Изучи код и разберись какой запрос идет в таблицу и попадает ли эта 1 туда.
Например в запросе на скриншоте я вижу что author_id там не указан.
Из чего можно сделать вывод что ты где-то накосячил. Возможно в relations() или rules()
Почитай теорию что ли: http://www.yiiframework.com/doc/guide/1.1/ru/database.overview (весь раздел)
Ты не понял.
У меня Маппер реализует интерфейс, в котором задана форма функции beforeInsert(TreeMember $member);
TreeMember - другой интерфейс, который реализуется классом MPKeeper.
Так вот в маппере я не могу написать функцию beforeInsert(MPKeeper $member), так как интерфейс там требует TreeMember. Вот.
http://ideone.com/ocwDYh
Я эту задачу делал полтора месяца, ночами не спал. До сих пор в кошмарах снится.
Чего так долго?
спасибо, в общем разобрался, сначала было превышено ограничение на пост, потом после того как я продолжил увеличивать пасту до размера полного властелина колец помноженного на два у меня вылезла проблема нехватки выделенной памяти для скрипта, тоже прогуглил и поправил в пхп.ини что нужно.
Делаю это в учебных целях и понимаю что не нужно такими вещами злоупотреблять, но заметил одну особенность. Вот скажем копирую я кусок текста, который лежа в текстовом файле занимает 20мб места, а у меня мой сайт выдает ошибку и в логах соответственно написано что пост превышает допустимый размер в 64мегабайта Кто может объяснить мне эту занятную штуку?
Так долго делал что ну просто обязаны быть бумажка или картинка с наброском "проекта". Покажи что нибудь или расскажи что она делает, а то лень разбираться.
Нет никакого проекта, после долгих попыток осилить рекурсию, я таки взял другой готовый алгоритм поиска пути в википедии и тупо писал код по этому алгоритму. Сразу дело пошло, за 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
Расскажи о своей программе. Если ты не в силах этого сделать, тогда глупо рассчитывать на помощь. Как говорится, телепаты в отпуске.
Ну так сделай если можешь, или ты только пиздеть горазд? Я вот сейчас прочитал первую и захотлось её решить, собственно чем и пошел заниматься.
Нужно порешать. Иначе, как правило так и бывает, возможно просто переоцениваешь свои способности.
Первое задание выглядит простым на первый взгляд. Второе трудное. А вот третье я вообще понятия не имею как решать. Как работать со временем? Как подсчитывать вызовы функций? Ни с чем подобным нигде не встречался еще.
Во втором задании выделяем регулярными выражениями всё то что идёт после равно и заканчивается запятой, из этих значений формируем массив. Из ключей также формируем массив, а затем через foreach их объединяем в один массив, или есть какие-то подводные камни?
Да, пожалуй. Только к этому нужно добавить работу с файлами и БД. И можно искать работу за еду ради опыта, то есть стажером.
Проверить количество вызовов можно при помощи статической переменной внутри функции. А насчёт не чаще чем раз в 2 секунды, помню когда находил выражение которое определяет время работы скрипта, там суть в том что кажется сравнивается абсолютное время в начале работы скрипта и в конце, вот имея два таких значения может как-то можно поставить условия разницы между ними не более 2 секунд.
> лежа в текстовом файле занимает 20мб места, а у меня мой сайт выдает ошибку и в логах соответственно написано что пост превышает допустимый размер в 64мегабайта
При посте данные кодируются через процентное кодирование может быть в этом дело? Попробуй вставить короткий текст из нескольких русских слов, открыть инспектор (Ctrl + Shift + I) на вкладке Network и отправить форму. И посмотри, как закодированы данные. Если там коды типа
%c2%f1
То это и есть процентное кодирование. Чтобы не тратить на него память. можно поменять тип формы с
application/x-www-form-urlencoded
на
multipart/form-data
И опять же посмотреть что поменяется.
ссылка: http://htmlbook.ru/html/form/enctype
ХЗ. Жуниор это просто такое слово: младший, помощник, ребенок с именем как у отца. Конечно у нас оно интерпретируется по принципу "кто во что горазд", так что нужно просто смотреть на требования и обязанности.
Я сейчас посмотрел, там кроме 6-й все элементарно.
От джуниора обычно требуют знания используемых языков (php, html. js и тд), то есть человек должен быть способен сделать небольшое веб-приложение например, может быть поверхностное знакомство с какой-то библиотекой или фреймворком.
Стажер — это обычно студент, который работает вполсилы и больше учится чем работает, берут ради того чтобы подтянуть знания и предложить позицию джуниора. Стажера берут на небольшой срок, и по итогам либо до свиданья, либо джуниор, либо продлевают срок.
Несмотря на то, что от стажера компании пока особой пользы нет, и по хорошему с него надо брать деньги за возможность получать опыт, ему обычно платят небольшую зарплату. Нанимать стажеров может себе позволить не каждая компания.
Джуниор > Стажер
ООП надо знать без вариантов. Ничего сложного в нем нет, у меня в учебнике есть урок, который любой осилит (по крайней мере жалоб что что-то непонятно, еще не было, а решенные задачи на оОП были).
>Аноны, если понимаешь что можешь решить вот эти задачи
Приступай к чему-то сложнее, очевидно.
Ты прав, я не понял вопрос сначала. Смотри, тут такая петрушка: есть принцип подстановки Лисков. В нем сказано что наследника класса должно быть можно использовать вместо его предка.
Соответсвенно если ты в интерфейсе HierarchyMapper говоришь что в insertBefore можно передать любой класс реализующий HierarchyMember то в наследнике ты не имеешь права сужать требования. Так как в этом случае код, который передает HierarchyMember, может сломаться.
Соответственно надо либо отказаться от определения beforeInsert в HierarchyMapper, либо отказаться от сужения требований к аргументам insertBefore. Мне кажется, лучше вынести insertBefore из HierarchyMapper.
У нас это предусмотрено. У нас есть дополнительная большая задача (даже 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 потом изучить (по нему тоже есть задачи).
Ну хз где и как, но как по мне должно быть так:
Стажер это уже чел который что-то может, но не конкретные задачи компании например. И вот он стажируясь учится их выполнять. Ему можно не платить. После стажировки должен стать джуном в идеале.
Джун - способен решать самые простые задачи по работе самостоятельно, то есть его можно закидывать этими самыми простейшими задачами без того что бы ему что-то объяснять и тратить на него время других сотрудников. Ему обязаны платить.
> Я так понимаю в ноде для каждого запроса на сервере вызывается листенер (Где ивент=запрос клиента) в отдельном потоке (Действительно в отдельном?).
В ноде один поток. Там используется так называемая кооперативная многозадачность, то есть код вызывает асинхронную функцию типа «отправить данные в сеть» или «прочесть файл» с коллбеком, нода просит ОС начать выполнять эту операцию, и код выходит из функции (и после этого выполняются другие листенеры). Пока запрошенная операция выполняется ОС, нода выполняет другие листенеры. Но если твой код например будет 10 секунд перемалывать числа в цикле или синхронно читать файл, все остальные потоки не будут в это время выполняться. Потому многозадачность называется кооперативной — код должен сам отдать управление другим потокам.
Чтобы не было проблем с тормозами, обычно запускают много процессов ноды и например нгинксом распределяют запросы между ними.
Заметь что обработчики, работающие внутри одного процесса, разделяют его память. Например ты можешь в одном обработчике установить глобальную переменную и в другом прочитать (но делать так не стоит).
В PHP другая модель. Там при поступлении запроса скрипт выполняется в отдельном процессе. Обычно есть пул процессов-рабочих, и по мере поступления запросов они их разбирают и выполняют. При этом при завершении скрипта вся использованная имя память забирается и все переменные уничтожаются. Это в общем полезно тем, что код получается более надежным (но есть и минусы, надо инициализацию делать заново каждый раз).
Собственно разница в том, что нода однопоточная, а PHP выполняет много скриптов параллельно в отдельных потоках/процессах. Соответственно один скрипт может хоть год что-то делать, на другие это никак не влияет.
> А в пхп тогда как, для каждой сессии клиента (не запроса) держится отдельный поток?
нет. Есть пул процессов-рабочих, запросы случайно распределяются между ними. Если рабочих не хватает, могут быть запущены дополнительные процессы, зависит от настроек Апача или php-fpm.
В Php состояние не сохраняется между запросами потому какой поток будет обрабатывать запрос клиента, не важно.
> Я так понимаю в ноде для каждого запроса на сервере вызывается листенер (Где ивент=запрос клиента) в отдельном потоке (Действительно в отдельном?).
В ноде один поток. Там используется так называемая кооперативная многозадачность, то есть код вызывает асинхронную функцию типа «отправить данные в сеть» или «прочесть файл» с коллбеком, нода просит ОС начать выполнять эту операцию, и код выходит из функции (и после этого выполняются другие листенеры). Пока запрошенная операция выполняется ОС, нода выполняет другие листенеры. Но если твой код например будет 10 секунд перемалывать числа в цикле или синхронно читать файл, все остальные потоки не будут в это время выполняться. Потому многозадачность называется кооперативной — код должен сам отдать управление другим потокам.
Чтобы не было проблем с тормозами, обычно запускают много процессов ноды и например нгинксом распределяют запросы между ними.
Заметь что обработчики, работающие внутри одного процесса, разделяют его память. Например ты можешь в одном обработчике установить глобальную переменную и в другом прочитать (но делать так не стоит).
В PHP другая модель. Там при поступлении запроса скрипт выполняется в отдельном процессе. Обычно есть пул процессов-рабочих, и по мере поступления запросов они их разбирают и выполняют. При этом при завершении скрипта вся использованная имя память забирается и все переменные уничтожаются. Это в общем полезно тем, что код получается более надежным (но есть и минусы, надо инициализацию делать заново каждый раз).
Собственно разница в том, что нода однопоточная, а PHP выполняет много скриптов параллельно в отдельных потоках/процессах. Соответственно один скрипт может хоть год что-то делать, на другие это никак не влияет.
> А в пхп тогда как, для каждой сессии клиента (не запроса) держится отдельный поток?
нет. Есть пул процессов-рабочих, запросы случайно распределяются между ними. Если рабочих не хватает, могут быть запущены дополнительные процессы, зависит от настроек Апача или php-fpm.
В Php состояние не сохраняется между запросами потому какой поток будет обрабатывать запрос клиента, не важно.
Главный цикл ноды выглядит примерно так:
- получить события от ОС (события тут имеются в виду такого типа: получены данные по сети, получены данные с диска, диск готов принят данные на запись, истек таймер)
- если нет событий, ждать
- вызвать обработчик для каждого
- перейти к п.1
А соответственно обработчики запускают какие-то операции. Например по получении данных с диска обработчик может начать операцию отправки их в сеть.
Соответственно если какой-то обработчик долго работает, то пока он не завершится, ничего другого не происходит.
> держится отдельный поток?
Никто его не держит. PHP скрипт работает по принципу принял данные — обработал — отдал ответ — завершился.
Судя по твоей ссылке у меня там значение text/plain так как просто ставятся плюсики вместо пробелов.
>>И избавиться от работы с путем как со строкой напрямую.
> В смысле?
У тебя путь состоит из чисел, разделенных точками. И код, работающий по такому принципу. размазан по всему классу. Я предлагаю сделать абстракцию, то есть код не знает в каком виде хранится path, и есть 2 функции:
— превратить path в массив номеров
— превратить массив номеров в path
Тогда можно легко поменять способ хранения path например с цифр и точек на буквы и минусы или использовать бинарный формат, храня path в виде байтов.
> 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 что-то другое.
> всё то что идёт после равно и заканчивается запятой
a="Hello, world=1", b=2
Тут твой алгоритм ошибется.
У тебя 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, объем должен уменьшиться.
Я погуглил, метод text/plain это когда данные кодируются построчно в виде
user=Иван
text=Привет мир
Этот способ исплоьзовался в древних браузерах для отправки заполненной формы почтой (для этого в action надо указать не ссылку, а ссылку с адресом почты). После заполнения такой формы браузер открывал почтовый клиент, где в тело письма были вставлены данные из формы. Таким образом можно было собирать данные формы на почту без всяких серверных скриптов.
Сейчас он наверно рабоатет, но у многих пользователей не установлен или не настроен почтовый клиент и с большой вероятностью от них теюе ничего не придет.
Тестовая страница: http://jsfiddle.net/gLapztra/
text/plain используется например для CORS non-GET запросов чтобы не слались лишние OPTION можно не только text/plain, но порой это удобнее.
Так я ограничения уже увеличил, на объем поста и на память выделяемую скрипту.
Вот первая задача http://ideone.com/NdwOav
Писать максимально кратко не хотелось, а то без интерактива скучно. Но если выкинуть всякие эхи и тупо выкидывать ретурном при первом несовпадении, то функция будет в два раза короче минимум. Базарю))
стеклянны, оловянны, деревянны
>Мне кажется, лучше вынести insertBefore из HierarchyMapper.
Тогда нет смысла в HierarchyMapper'е.
Почему пишете на PHP? Точнее, если забыть об аргументе «фриланс, CMS, заказчики», есть еще причины? В 2014 году есть и другие интересные варианты.
Почему нет? Язык простой, востребованный, работает, кроссплатформенный, без толпы неучей-хипстеров в коммьюнити.
>>406497
Получается да.
>>406474
Неправильно. Твоя функция абсолютно бесполезна так как она не возвращает понятной машине информации.
Допустим я хочу вызвать твою функцию из своей прогаммы. Если все в порядке, моя программа должна написать YES SIR если нет то NO SIR. Как это сделать, не меняя твой код?
Функция не должна ничего выводить. Она должна только возвращать результат. А интерактив можно разместить за ее пределами.
Оформление кода также страшноватое. Кто ставит так отступы? В каком стандарте это описано?
Если это задача для собеседования, на это обратят внимание. Сама функция названа бессмысленно, что за array10? Функции принято назвать начиная с глагола, в стиле сделайЧтоТо.
Ну и по коду. Это можно написать в 2-3 строчки без циклов.
Ну вот, есть 2 варианта:
— убрать insertbefore из интерфейса HierarchyMapper, но зато написать в MPMapper MPKeeper в тайп хинт
— не убирать, оставить как есть
То есть можно остаивть как есть.
Я понял. И я оставлю как есть.
Вопрос в том, как облегчить себе жизнь? Можно ли как-то группировать отношения, чтобы, например, после всех джойнов выводился один элемент, у которого поле "сценаристы" просто было массивом? Можно с примером из любимого фреймворка, пытаюсь разобраться в Laravel, а они вроде все более или менее похожи.
Сейчас я, например, вывожу в вид просто первый элемент массива с кино (которых много из-за отношений), а потом прохожусь по массиву, выдирая отношения в отдельные массивы — это безумие полное, очень неудобно.
Посоветуйте, что-нибудь, пожалуйста.
Я больше пердолился вчера с установкой хрома, тип в описании элемента тоже прописал, потом уходил поспать на пару часов.
Да.
А зачем делать такую выборку? Выбери одним запросом кино, вторым всех его сценаристов.
>>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)
А зачем делать такую выборку? Выбери одним запросом кино, вторым всех его сценаристов.
>>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)
1) Зачем заключать переменные в фигурные скобки, хотя и без них выводит?
2) Почему у меня в echo на '\n' не идёт переход строки, а просто добавляется пробел?
Используй хтмл тег <br>
Лол, у меня так же было. Приходилось для каждого столбца свою цифру подбирать на глаз.
Может оп нам поможет, а то как-то обидно
Хочу через функцию изменить значения внутри массива но насколько я понимаю внутри функции не распознает сам массив, что не так?
У тебя функция принимает аргумент $c, но внутри она работает с массивом $d. Откуда ей знать, что это за массив если ты его в неё не передаешь?
Чтобы переносы строк нормально работали и в браузере и в ideone (и в консоли), можно использовать для этого \n, а в начале программы поставить
header("Content-Type: text/plain; charset=utf-8");
Это заставит браузер воспринимать то, что выводит твоя программа, как обычный текст, а не HTML, и уважать переносы строк в нем (так как в языке HTML перенос строки равносилен пробелу).
Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.
> Зачем заключать переменные в фигурные скобки,
Это не обязательно, и используется когда переменная граничит с текстом или когда сложное выражение:
echo "{$x}kg {$w['hello']}";
>>406653
> str_pad(
Эта функция не поддерживает многобайтные кодировки, в том числе русские буквы в utf-8. Она считает русскую букву как 2 символа. Подробнее: https://gist.github.com/codedokode/ff99e357e9860ea169b8
То есть надо отказаться от str_pad.
Переменные внутри функции (они называются локальные) и переменные снаружи функций (глобальные) изолированы друг от друга. Из функции недоступны глобальные переменные, а снаружи недоступны локальные.
Извне внутрь функции можно передать значения с помощью аргументов (в скобках), а вернуть из функции через return.
В сомнительных учебниках ты можешь увидеть советы вроде использовать global или $GLOBALS (эти конструкции позволяют из функции получить доступ к глобальным переменным), не используй их, так как код будет некачественный.
printf не умеет правильно считать русские буквы, так что это плохой совет использовать printf для выравнивания колонок.
Тогда получается что не выйдет использовать функцию для изменения массива и придется делать без неё? Странно, нагуглил задачки по PHP http://www.masterwebs.ru/topic/5975-zadachi-na-php-dlja-nachinajushih/ там в Задаче №3 просили именно функцию составить
Почему же не выйдет? Все можно сделать, если знать как. Тебе нужно прочитать урок про функции у ОПа или еще где-нибудь, потому-что ты пока плохо понимаешь как они работают.
http://ideone.com/AFiVJh
Спасибо, всё никак не мог понять как же передать внутрь функции массив и гугл не хотел помогать
Считает верно. Единственное, что выглядит не очень, это вот это место:
> $current = $current$percent + $service - $monthlyPayment;
> $payed += $monthlyPayment;
>\t\t\tif ($current < 0) {
>\t\t\t\t$payed += $current;
Лучше бы не загонять долг в минус, а просто считать сколько осталось заплатить в последний месяц и выплчивать только эту сумму.
Товарищи, напишите скрипт который разошлёт по вкудахтам тян 18-20 лвл из дс-2 сообщение"привет ты не ездила в лагерь 7 лет назад, у тебя ещё был sonyericsson k750i." с меня пиво в ДС-2, ну или почтой отправлю.
Бляядь, надеюсь это ультратолстота.
В общем вот оценивайте идею первой задачи из http://archive-ipq-co.narod.ru/i-am-smart.html
Может быть тесты и не сильно изящно реализованы, но ведь главное это сделать функцию. Вот на неё смотрите.
словарь говорит мне что neat = четко, стало быть сочту за комплимент.
Тем временем решил вторую задачку.
http://ideone.com/BatUFr
Критика? Дыры?
Неплохо. Стоит добавить еще тайп хинт в функцию. Также, можно использовать array_diff чтобы обойтись без сортировки.
А он что делает?
http://ideone.com/QRQqU2
Не работает если в кавычках есть запятая.
Также, кавычки не должны сохраняться то есть a="hello" должно давать просто строку 'hello', а не строку '"hello"'. То же с бекслешами, \" должен вставлять в строку только символ кавычки.
Там дан конкретный пример строки и настолько же конкретный ответ который нужно получить, если в строках бы присутствовали дополнительные запятые, то решение был бы совершенно другим.
>Также, кавычки не должны сохраняться то есть a="hello" должно давать просто строку 'hello', а не строку '"hello"'. То же с бекслешами, \" должен вставлять в строку только символ кавычки.
Я нихуя тебя не понимаю. С чего это не должны, картинку посмотри. Ну или давай я для тебя вырежу и подсвечу.
function matchKeys(array $testArray) {
что эт у тебя пердак подгорел? Пытался меня говном накормить постом выше да обосрался сам?
А тебя не смущает что все вылетит нахуй с критикал эррором если туда подадут не массив? В моем случае просто выдаст такой же false и все продолжит работать дальше.
Если это, например, картинка, то он её просто откроет. А надо чтобы предложил сохранить.
$app->get('/files/(:id)', function($id) use ($app) {
\t$fileInfo = $sharing->getFileInfo($id);
\t$app->render('file_temp.php', array('fileInfo' => $fileInfo));
});
Как мне сделать, чтобы $sharing(object) был виден внутри функции?
Так ты же здесь
$app->render('file_temp.php', array('fileInfo' => $fileInfo));
передаешь массив с переменными, которые видны внутри рендера.
Или у тебя в $fileInfo = $sharing->getFileInfo($id) не видит $sharing? А что это и откуда оно вылезло?
>Только допилить, чтобы людям показывать можно было.
Я тоже так думал. Вышло, что пилить и пилить. Так что кидай сразу.
Так что такое Sharing?
Ну и как бы сразу тебе предложу сделать этот объект через слим синглтон. Это же слим, да?
http://docs.slimframework.com/ -> Singleton resources
И ты видишь этот объект везде, где виден $app. И если я правильно понял, как работает синглтон, то нельзя создавать еще экземпляры этого класса. Собственно в моем случае это fileMapper. Ты же видел здесь линк на мое решение не до конца это задачи?
Так это. Даже с оффсайта гуи качается. Только не обязательно его использовать.
Тупо. Раньше же стоял у меня. Был только в коммандной строке и все. Хочу снова так.
Вспомнил. Когда начинал на руби ставил сборку со всяким. там было. Вот ведь...
>в тексте есть слова «а» или «но» без запятой перед ними.
Как нужно искать ", а" или ", но" в тексте? Соединить условия "если перед и после а есть пробел, то перед первым пробелом должна быть запятая" или искать все, что не является запятой и пробелом перед а, после которой есть пробел? Как, кстати, соединить два условия, которые могут встречаться отдельно друг от друга в разных местах, в одном выражении?
Искать вещи типа
любая буква пробелы слово «а»
Или воспользовать assertions: http://php.net/manual/ru/regexp.reference.assertions.php
Может я непонятно пояснил. Эти кавычки добавляет функция вывода. В самой строке их нет. Заметь что вокруг simple_value они тоже есть.
>>406815
Тайп хинт гуглится по словам «php тайп хинт» в Гугле. Он делает твой код гораздо лучше и наежнее и понятнее.
>>406849
И хорошо. Нефиг передавать что попало в функцию которая принимает массив. Ошибка будет видна сразу и ее можно быстро и просто исправить.
А возвращать false это каменный век и тупиковый путь развития. Ибо ты потом либо замучаешься ифы писать после каждой функции либо что более вероятно начнешь игнорировать ошибки и получишь гору кривого быдлокода.
Почитай про fail fast: http://habrahabr.ru/post/218325/
Хотя если в задании написано что в функцию можно передать что угодно то тогда можно без тайп хинта. Но такие функции, в которые можно передать что угодно, это плохо.
>>406829
> Там дан конкретный пример строки и настолько же конкретный ответ который нужно получить
Это только пример. Разумеется предполагается что можно парсить строки с запятыми и любыми другими символами.
Возможно, я плохо сформулировал задачу. но надо работать с любыми символами. И бекслеш там чтобы в строку можно было вставлять даже кавычки.
>>406835
Надо например через htaccess добавлять при скачивании файла заголовок
Content-Disposition: attachment
Который явно скажет браузеру что надо сохранить файл. Стоит заметить что такое поведение по моему не предусмотрено стандартом (это вообще заголовок для пометки вложений в электронной почте), но все браузеры его поддерживают.
Не забудь что загрузка файлов открывает уязвимость. Что если на твой файлообменник загрузить php файл? Он выполнится?
Через use может быть? Ты читал http://php.net/manual/ru/functions.anonymous.php ?
Алсо, советую залить свой код на гитхаб и вбросить в тред, я советую так сделать потому что обычно начинающие много ошибок там делают, и я им даю оветы и замечания. Ну и к тому что код неправильно оформлен, придираюсь, как же без этого.
>>406910
В Слим всовывать надо по-другому, там для этого несколько способов есть:
http://docs.slimframework.com/#DI-Overview
>Что если на твой файлообменник загрузить php файл? Он выполнится?
Конечно. Я еще ничего не сделал, кроме как то, что я могу аплоадить и донлоадить. И как мне сделать что-бы они не выполнялись?
Это назвыается Msys Git (если ты под виндой). Он чисто в командной строке.
Может в инсталляторе гита можно не стаивть gui? Ну или ты можешь поставить его, но использовать только командную строку, открыв Git bash.
На, в принципе, чтобы скрипты не выполнялись. И хтмл не выводился. Переименовывать, а формат сохранять в базе данных? Или есть более адекватные способы? Типо просто запретить серверу запускать файлы с папки, а только передавать.
Ну значит htaccess я могу отключить в отдельной папке и дочерних,а как на счет скриптов? Их тоже могу отключить?
http://ideone.com/FrzkbB
Стоит, желательно на сфинксе. У меня есть мануал:
https://gist.github.com/codedokode/10539366
Плюс в сети есть инструкции.
>>406981
php_flag engine off
Но это работает не везде. на хостинге например эта директива может быть отключена и файлы будут исполняемыми. Тогда надо использовать другой подход например переименовывать из в txt (и не забыть подсунуть нужное имя при скачивании).
> public function drinkCoffe($this) {
this это не обычная переменная и ее нельзя передавать как аргумент. Мануал http://php.net/manual/ru/language.oop5.basic.php
>Это назвыается Msys Git
Уже минут 20 устанавливается. Вирус мне подсунул! А я только шиндовс переставил!
есть пхп файл, в нем происходит такое:
\\какой-то пхп код
$js = "
какой-то js код
\\место куда я хочу вставить пхп код
какой-то js код
"
\\пхп код
в общем всё устроено так, что по ходу кода генерируется переменная js в которой собирается весь js код, а потом выполняется.
так вот, как мне вставить в js пхп код? Я делаю все как надо, закрываю теги, открываю, а оно всё равно не хочет.
Там ведь вообще по идее никакие теги не нужны, так как все происходит в пхп.
Не знаю. Это же ты пишешь код, ты должен знать что тебе надо передать в функцию. Можешь вообще ничего не передавать например.
>>407056
Ты делаешь большую глупость. Зачем генерировать код? Не надо. Никто потом в этой лапше разобраться не сможет, включая тебя самого.
Вставляй в JS код только значения переменных через json_encode и все. А код должен быть неизменным.
я охуенно согласен с тобой, но как раз я и есть тот, кому пришлось разбираться в этой параше.
Я перечитал вопрос и вообще тебя перестал понимать. Зачем вставлять в JS php-код если JS исполняется в браузере, а он не понимает php? PHP выполняется только на сервере и вставляить в JS его нет смысла.
Ты случайно не тот анон, который пару тредов назад отказался изучать php, но просил исправить ошибки в его коде? Если так то иди читай мануал сначала, напрмиер http://php.net/manual/ru/language.basic-syntax.phpmode.php .
Браузер не выполняет php. Потому вставлять php в JS бессмысленно.
Если ты исплоьзуешь php для генерации js кода то откажись. Алсо, перечитай мануал по ссылке выше в любом случае.
выполняется js скрипт. в ходе его выполнения я хочу записать в сессию кое-какие данные. js не работает с сессиями.
нет, я не тот анон.
я же написал, что я так не делаю. у меня есть охуенно огромный движок сайта, на тысячи строк и переделывать его уже не представляется возможным. тут винигрет из пхп, хтмл, и джс. мануал я давно перечитал
> в ходе его выполнения я хочу записать в сессию кое-какие данные. js не работает с сессиями.
Как работают сессии, знаешь? Как данные попадают в $_SESSION после session_start? Куда они сохраняются после завершения скрипта?
Я имею в виду что данные сессий хранятся на сервере и очевидно поменять их можно только программой выполняющейся на сервере, не в браузере.
Соответственно вариант либо отправлять аякс-запрос на сервер, либо отказаться от этой затеи. ТЫ по моему не до конца разобрался как работает сервер.
Браузер отправляет запрос на сервер
На сервере выполняется php-код и формируется html-страница
Она отдается в браузер
Браузер отображает ее и выполняет скрипты в ней
Соответственно, JS не имеет никакого доступа к данным на сервере. По моему это очевидно. От того, что ты в JS код впишешь кусок php, ничего не поменяется. Так как php код выполняется до того как страниц отдается в браузер, а не после.
но ведь множество форм написаны на js, неужели, если у меня форма <option> работает без перезагрузки страницы, я не могу в зависимости от выбора в форме передать данные в сессию?
нагуглил, всё решается с помощью Cookie
Нет. Сессии хранятся на сервере. передавать только аякс запросом, и я подозреваю, что ты опять что-то хочешь сделать неправльно. Например, почему не сохранять эти данные в cookie или что лучше, localStorage?
> но ведь множество форм написаны на js,
Очевидно они сессии не используют
вот это и надо было посоветовать в первую очередь. спасибо
Посмотри про eval(), но скорее всего ты делаешь что-то не то.
оказывается нет, включены. но есть одна проблемка
устанавливаю я значение куки, всё отличненько во всех браузерах, кроме эксплорера. там значение куков теряется ни с того ни с сего. например смотрю я на var_dump($_COOKIE); и нужное значение установлено. щелкаю по какой-то внутренней ссылке, там тоже пишет, что есть. Но через несколько таких переходов значение исчезает, будто его и не было.
время хранения куки у меня 7 дней. да и в остальных браузерах работает адекватно.
Скорее всего, ты что-то делаешь неправильно. Открой F12 в ИЕ и посмотри там заголвоки ответов/запросов. ну и помни что размер всех кук на 1 домен может быть ограничен до 4 кб.
я просто тупой, никчемный лох и не установил путь куков. соответственно они сохранялись только на той странице, на которой происходило действие. теперь уже всё нормально.
Да ничего страшного, с куками легко запутаться. Но ошибку стоит искать в своем коде в первую очередь, и конечно отлаживать это надо не вардампом, а хотя бы просмотром заголовков — там больше информации.
у меня ие 11. я что-то не нахожу в инструментах разработчика никаких заголовков
там должна быть вкладка типа Network, а на ней запросы, происходящие при загрузке страницы.
Тут на картиинках есть http://msdn.microsoft.com/en-us/library/ie/dn255004(v=vs.85).aspx
В конструкторе должно быть
$this->name = $workers_name;
$this->level = $workers_level;
$this->chief = $is_chief;
В дочернем классе вместо $this->chief нужно parent::chief
Я бы советовал делать файлообменник, но если это очень сложно то можно другую задачу.
Тебе понадобится знания HTML, CSS, MySQL
Ну вот какая еще есть задача для еще большего хуя, ктоторый совсем не может перескакивать с простых пхп-задач на изготовление полноценного сайта.
Смотри, а вот есть такой код?
Почему функция не использует $coffee заданую в дочернем классе?
Тебе нужно обратиться к родительскому свойству, а ты таким образом обрашаешся к локальному, задавая его неявно.
Только не $thisом. Вот смотри пикчу. У тебя $this говорит "возьми из текущего класса свойство $chief и проверь его на true". Но у дочернего класса такого свойства нет и оно автоматически будет создано. А там лежит (кажется) NULL, то есть вернется false.
Но он ему через конструктор передает тру или фолс, как там будет null?
http://ideone.com/Eyq4fQ
Блин, я чето запутался. Просто сам только начал ооп ковырять. Ты не мог бы описать что должна делать программа? Я понял так: если Питер менеджер при это босс, то кофе ему давать в 2 раза больше. Так?
> Ты не мог бы описать что должна делать программа?
Я понятия не имею, я просто мимо проходил и увидел, что ты советуешь кому-то использовать parent:: и решил спросить что это такое и зачем это юзать, когда дочерний класс имеет точно такие же свойства (и методы тоже), как и родительский и через $this все должно работать?
parent обращается к свойствам и методам родителя, $this - к своим (есть еще аналогичное self::property). И свойства там есть у обоих классов, но они разные - присмотрись.
Т.к все курсы, что я начинал сразу знакомили меня с переменными, а я даже хуй знает зачем они нужны? Ну повторяю я за учителем, делаю эти практические задание, только я всё равно не могу уловить суть.
Есть ли какой-то гайд для тех, кто захотел обмазаться php, видимо я должен ещё что-то знать до него.
Идешь на codecademy, делаешь все до чего дотянутся руки. Если к этому моменту не дропнешь, возвращайся в тред.
В чем они разные? Там просто свойств у дочернего класса больше, чем у родительского.
Там элементарный английский+мощный форум. Если даже это не понимаешь, то тебе стоит начать с инглиша.
Спасибо босс, а что-нибудь из русского, если не осилю коудакадеми. Или же codeacademy это КЛАССИКА БЛЯТЬ ЭТО ЗНАТЬ НАДО и без этого никуда?
Да нет, материала как говна на самом деле, просто ресурсов уровня кодкадеми на русском я не знаю. Можешь просто хуячить все по ОП-у и не заморачиваться. Зачем переменные? Очень просто, до того как говорить слова и выражать с их помощью свои мысли, ты выучил буквы. Так же и с переменными и другими языковыми конструкциями.
Короче там все было правильно, только $this в методах дочернего класса проебались. Вот исправленный вариант http://ideone.com/fV2VlR
Нам препод сказал, что новичок не должен тупо зубрить функции, а учиться нужно, работая с управляющими конструкциями пока не дойдет до автоматизма. Также неплохой практикой будет самому писать функции у которых будут такие же задачи как и у системных. И в конце концов, лучше написать быстренько функцию самому, не зная о существовании аналогичной системной, чем ебаться как макака пытаясь решить задачу готовыми функциями, но при этом с трудом собирать циклы и придумывать логические схемы.
В общем руководство опа хорошо для расширения кругозора, но не для старта с нуля.
Не знаю, по моему у Опа очень даже хороший учебник. И где ты там зубрежку нашел?
Сам я начинал с древнего говна "Робин Никсон -создаем динамические сайты с помощью PHP" и потом прорешивал учебник ОПа. Его мякотка в том, что ты не зубришь функции, ты их постоянно используешь, решая его задачи, потому что без них никак. В книжках же нужно просто переписывать код, ничего не решая, вот это и есть зубрежка.
Я там нашел список готовых функций в большом количестве. Когда знаешь основы это ОК. Если сразу начинать с этого материала, то выработается рефлекс - есть задача - ищи функцию, а не рисуй и реализовывай логику.
Ты в любом учебнике найдешь точно такой же список функций. Я не пойму, что ты хочешь вообще? В первых уроках ты изучаешь переменные, это и есть основы. Все остальное это уже готовые функции. А с твоим подходом тебе надо с ассемблера начинать.
Основы это "управляющие конструкции" - погугли что это такое, к которым нужно переходить после переменных и операторов. У опа же с места в карьер: поговорили о переменных и операторах и давайте делать программки используя готовые функции. А управляющими конструкциями будем пользоваться только в крайнем случае. Так оп знакомит нас с циклом for и заваливает кучей функций по работе с массивами. Все, больше к конструкциям (то есть принципам работы) мы почти не возвращаемся.
Что ты несешь? У ОПа они идут сразу после переменных. Вот первый урок:
http://archive-ipq-co.narod.ru/l1/conditions.html
Вот второй
http://archive-ipq-co.narod.ru/l1/conditions.html
Там for, if, foreach и в общем все. Ознакомься с полным списком http://php.net/manual/ru/language.control-structures.php
Хотя ты скорее начнешь рассуждать о нинужности последнего.
Там все это есть, кроме require который на айдеоне все равно не работает и goto(который нахуй не нужен)
Окей, прочитал и погуглил про тайм хинт и про фейл фаст, только я все равно не понял по какому принципу должна устроена входящая строка во второй задаче, и какой должна быть исходящая. Нужно больше правил указать.
> по какому принципу должна устроена входящая строка во второй задаче,
входная строка состоит из частей, разделенных запятыми. Частей может быть от 0 до бесконечности. В начале и конце части может также стоять любое число пробельных символов (то есть пробелов и переводов строк \n).
строка ::= (пробелы) (часть) (пробелы) , (пробелы) (часть) (пробелы) , ....
Каждая часть имеет вид
часть ::= (ключ) (пробелы) = (пробелы) (значение)
Ключ состоит из 1 или больше латинских букв, цифр, подчеркиваний и не начинается с цифры.
Значение может быть записано в разных формах:
— null, false, true без кавычек — соответствуют одноименным значениям php
— целое или дробное число
— строка без кавычек, состоящая из любых символов кроме пробельных, кавычек, запятой, бекслеша
— строка, заключенная в двойные или одинарные кавычки
Строка в кавычках может содержать последовательности вида бекслеш + символ, которые называются escape- последовательности:
\\ вставляет в строку 1 бекслеш
\" и \' вставляет кавычку
\n вставляет перевод строки \n
\ + любой другой символ вставляет в строку бексеш + указанный символ, например \1 вставляет в строку символы \ и 1
На выходе программа (точнее, функция в ней) должна давать массив, содержащий указанные в строке ключи и значения.
> по какому принципу должна устроена входящая строка во второй задаче,
входная строка состоит из частей, разделенных запятыми. Частей может быть от 0 до бесконечности. В начале и конце части может также стоять любое число пробельных символов (то есть пробелов и переводов строк \n).
строка ::= (пробелы) (часть) (пробелы) , (пробелы) (часть) (пробелы) , ....
Каждая часть имеет вид
часть ::= (ключ) (пробелы) = (пробелы) (значение)
Ключ состоит из 1 или больше латинских букв, цифр, подчеркиваний и не начинается с цифры.
Значение может быть записано в разных формах:
— null, false, true без кавычек — соответствуют одноименным значениям php
— целое или дробное число
— строка без кавычек, состоящая из любых символов кроме пробельных, кавычек, запятой, бекслеша
— строка, заключенная в двойные или одинарные кавычки
Строка в кавычках может содержать последовательности вида бекслеш + символ, которые называются escape- последовательности:
\\ вставляет в строку 1 бекслеш
\" и \' вставляет кавычку
\n вставляет перевод строки \n
\ + любой другой символ вставляет в строку бексеш + указанный символ, например \1 вставляет в строку символы \ и 1
На выходе программа (точнее, функция в ней) должна давать массив, содержащий указанные в строке ключи и значения.
Ты прав насчет конструктора, но в конце ошибочка.
> В дочернем классе вместо $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
Что скажешь? Если и это сложно, или что-то непонятно, пиши. Я либо дам подсказку либо придумаю задачу проще.
Ты прав насчет конструктора, но в конце ошибочка.
> В дочернем классе вместо $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
Что скажешь? Если и это сложно, или что-то непонятно, пиши. Я либо дам подсказку либо придумаю задачу проще.
Информация про установку Апача и 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. Программа которая генерирует предупреждения сама по себе непраивльная, потому что именно там вернеться непринципиально — ты в любом случае должен эту ошибку исправить.
Информация про установку Апача и 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. Программа которая генерирует предупреждения сама по себе непраивльная, потому что именно там вернеться непринципиально — ты в любом случае должен эту ошибку исправить.
Для изучения переменных мой учебник не подойдет? Он на русском.
А после него можешь взять Мэтта Зандстру или Шлоссгнейла (названия книг в ОП-посте) — хорошие книги, но не для совсем начинающих.
Во многих книгах также требуется знать основы HTML.
>>407212
В моем учебнике управляющих конструкций достаточно.
Переписывать системные функции я не заставляю, но ты можешь делать это сам, выбирай любую которая нравится и переписывай, а я проверю код.
> И в конце концов, лучше написать быстренько функцию самому, не зная о существовании аналогичной системной, чем ебаться как макака пытаясь решить задачу готовыми функциями, но при этом с трудом собирать циклы и придумывать логические схемы.
Ну циклы конечно надо знать идеально, но функции мне кажется не обязательно переписывать, достаточно представлять как это делается.
>>407220
Ты можешь переписать все используемые функции с нуля. если хочешь. Я проверю код.
В таком случае я не знаю как это распарсить, особенно вот с такой частью как тут http://ideone.com/QRQqU2
>willItWork="a=1,b=2,c=3"
Видимо действительно задача для умных. Нуб который рыпнуля заслуженно ткнут носом в свое место.
В учебнике мы изучаем только основые конструкции, if, for, foreach, break, return (и while + continue в конце упомянут). Зная их, остальные понять легко и самому.
Это сделано чтобы не заниматься зубрежкой теории, а сначала научиться использовать язык. А после этого, кто хочет, может просто открыть мануал PHP и прочесть справочник по языку полностью: http://php.net/manual/ru/langref.php
Этот справочник очень подробный и лучше, актуальнее и точнее любого учебника.
Нет для меня никакого смысла пересказывать этот справочник. Зачем заниматься пересказом того, что ты можешь прочитать и сам?
Я знакомлю с тем, как используются главные конструкции и функции, как пишутся программы, а если ты хочешь знать все, в том числе более редкие, конструкции, то можешь прочесть о них в мануале или в книге указанной в ОП-посте. Я бы советовал мануал.
Не расстраивайся. Если захочешь, то рано или поздно разберешься.
Во-первых, распарсить строку можно хитрыми регулярными выражениями, но их для этого надо знать хорошо. Во-вторых, можно распарсить строку, разбив ее на массив токенов и проходя по ним, с помощью метода рекурсивного спуска. Это правда тоже не очень просто для начинающего, но можно освоить. В этом методы мы создаем N функций, для каждой конструкции — своя функция которая ее парсит и что-то возвращает.
Вот примерный список возможных токенов:
null, false, true, =, число, запятая, бекслеш, одинарная/двойная кавычка, любой другой символ
Соответственно, функции для парсинга выглядят примерно так. Мы спускаемся от составных конструкций к примитивным:
распарситьСтроку {
пары = пустой массив;
пока (не конец строки) {
параКлючЗначение = распарситьПаруКлючЗначение( );
добавить пару в массив;
если (конец строки) { выйти из цикла }
прочитать токен «запятая», если его нет то ошибка;
}
}
распарситьПаруКлючЗначение {
ключ = распарситьКлюч;
прочитать токен «равно», если нет то ошибка;
значение = прочитатьЗначение;
вернуть пару (ключ, значение);
}
И так далее. Если тебе интересно, можешь попробовать начать с разбиения строки на массив токенов, а дальше я дам подсказки.
Не расстраивайся. Если захочешь, то рано или поздно разберешься.
Во-первых, распарсить строку можно хитрыми регулярными выражениями, но их для этого надо знать хорошо. Во-вторых, можно распарсить строку, разбив ее на массив токенов и проходя по ним, с помощью метода рекурсивного спуска. Это правда тоже не очень просто для начинающего, но можно освоить. В этом методы мы создаем N функций, для каждой конструкции — своя функция которая ее парсит и что-то возвращает.
Вот примерный список возможных токенов:
null, false, true, =, число, запятая, бекслеш, одинарная/двойная кавычка, любой другой символ
Соответственно, функции для парсинга выглядят примерно так. Мы спускаемся от составных конструкций к примитивным:
распарситьСтроку {
пары = пустой массив;
пока (не конец строки) {
параКлючЗначение = распарситьПаруКлючЗначение( );
добавить пару в массив;
если (конец строки) { выйти из цикла }
прочитать токен «запятая», если его нет то ошибка;
}
}
распарситьПаруКлючЗначение {
ключ = распарситьКлюч;
прочитать токен «равно», если нет то ошибка;
значение = прочитатьЗначение;
вернуть пару (ключ, значение);
}
И так далее. Если тебе интересно, можешь попробовать начать с разбиения строки на массив токенов, а дальше я дам подсказки.
>Для изучения переменных мой учебник не >подойдет? Он на русском.
Извини, я не нашёл твой учебник в оппосте, или ты имеешь ввиду сайт http://archive-ipq-co.narod.ru ?
Что можешь посоветовать абсолютно нулёвому стремящимуся ? в какой последовательности изучать, чтобы максимум комфорто и правильно проходило обучение php, может с какой компьютерной теории по работе какой-нибудь оперативной памяти?
Потому, что мне кажется что вот так налетать на изучение php при этом абсолютно не зная ничего более - плохо, или же так и надо? Извини за тупорылые вопросы, просто хочется выставить путь и приоритеты расставить и спокойно взяться за обучение.
Например: Хуй! Пизда. Говно
Результат: [0] - Хуй! [1] - Пизда. [2] - Говно
в пхп я мидл, написал пару небольших проектов, ооп все дела. Но с фреймворками у меня трудности, зенд мне кажется вообще кошмаром, yii или кохана еще более менее понимаю.
Так вот, сейчас вышла необходимость выучить си++, я его знаю на уровне написать простой класс. И при изучении тешу себя мыслью что это мне поможет как-то в кодерстве на пхп, т.к с++ мне очень не нравится.
был ли у кого-нибудь качественный скачок в пхп после изучение другого ЯП?
Я тебе советую начать например с моего учебника. Да, это сайт по ссылке. Решить в нем все задачи, выкладывая код сюда и исправляя замечания. Мой учебник рассчитан на изучение с нуля.
После этого ты можешь попросить либо дополнительные задачи, чтобы изучать веб-технологии дальше, либо читать любой другой учебник.
Ну или если эта идея тебе не нравится, то выучи основы 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
Я тебе советую начать например с моего учебника. Да, это сайт по ссылке. Решить в нем все задачи, выкладывая код сюда и исправляя замечания. Мой учебник рассчитан на изучение с нуля.
После этого ты можешь попросить либо дополнительные задачи, чтобы изучать веб-технологии дальше, либо читать любой другой учебник.
Ну или если эта идея тебе не нравится, то выучи основы 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
Ответ из-за спам-листа тут: http://ideone.com/r1L9cM
>>407432
Не уверен, что поможет. Если ты плохо понимаешь ООП, паттерны, SOLID, YAGNI и другие модные принципы, по которым строятся фреймворки, то Си++ вряд ли поможет. ООП там точно такой же.
Насчет качественного скачка, попробуй какой-нибудь экзотический язык типа Хаскелл или Лисп — от них вполне возможно у тебя появятся новые идеи.
Чтобы понимать фреймворки, учи фреймворки. На пхп можешь попробовать Laravel, я с книжкой в руках освоил его за пару дней буквально, он достаточно простой и красивый. Или рельсы попробуй, хоть и не пхп. Зато куча документации и обучающих курсов. После них перекатиться на любой пхп-фреймворк будет несложно.
Очевидно:
$color = "150, 150, 150";
imagecolorallocate =($image, $color);
Не работает, есть вариант разобрать строку на отдельные переменные, но пока не знаю как и достаточно не лаконично, как это можно вообще сделать и сделать по канонам, а не велосипедом?
$color = [150, 150, 150];
imagecolorallocate =($image, $color[0], $color[1], $color[2]);
Ну вот так попробуй.
Мимодаун который не может тут ничего решить
Нихера не понял, что тебе нужно. Ты не можешь передать переменную в функцию или что?
Он вместо трех аргументов пытался в функцию передать строку с тремя числами через запятую
Ну можно и строку, потом внутри разбивать её регуляркой, но проще как уже сказали выше массив передать.
Спасибо, все получилось.
$cof = ($level == 3): $cof = 1: $cof = ($level == 2) : $cof = 1.25 : $cof = ($level == 1) : $cof = 1.5 : echo "Введите уровень работника от 1 до 3\n";
Реализацию вот этого:
>Ну можно и строку, потом внутри разбивать её регуляркой, но проще как уже сказали выше массив передать.
Ведь переменная может быть числом?
например $9
но при попытки операции $9 = 10; - не получается, а при $a = 10; всё окей
Спасибо богослов, перед цифрами нужно подчёркивание ставить. добра тебе.
Задача интересная.
Тебе нужно передать 4 параметра, а так получается только 2.
Юзай массив, например.
$color = [150, 150, 150];
imagecolorallocate =($image, $color);
Чем не устраивает? Зачем со строкой заморачиваться?
Это не задача, а кусок из нее в виде "как мне передать в функцию три параметра в одной переменной". И где ты здесь увидел срач?
Тернарный оператор имеет форму a ? b : c и там предусмотрено одно двоеточие. По идее, правила php разрешают вкладывать операторы:
a ? b : (c ? d : e)
Но делать так не надо ибо нечитаемый быдлокод получается. Ипользуй if/elseif или switch для этого. Или что еще лучше, массив вида [level => коэффициент].
И тем более нельзя вставлять команды вроде echo внутрь тернарного оператора.
Ошибка на ошибке у тебя. Нельзя писать так
imagecolorallocate =($image,...
Надо писать
$x = fn($a1, $a2, $a3);
для вызова функции.
Дальше, в мануале http://php.net/manual/ru/function.imagecolorallocate.php написано что функция принимает 4 аргумента-числа, значит и передавать ей надо ровно 4 аргумента, а не 2.
Фреймворки лучше всего изучать на примере Симфони 2, он самый продвинутый и ООП-ориентированный.
Как вообще добавлять к строке символы, кроме, как точкой слепливать?
Я тут пытаюсь постигать искусство, сейчас делаю 6-ти значную рулетку из оппоста, проверьте код, он то работает, но может какие-то условности я не соблюдаю? или может я как-то по-другому должен был сделать.
http://ideone.com/8MHwYi
Верно ли я распоряжаюсь функцией \n и где про неё подробнее почитать можно ?
Ты вкидываешь код на сосаку, а потом его трешь сам, что я тебе могу сказать, если сначала я зашел у тебя там была рулетка, а через 20 секунд уже цикл.
\n это не функция, а так называемая escape-последовательность (последовательность, начинающаяся с бекслеша). Она вставляет в строку в двойных кавычках невидимый символ перевода строки, который при выводе через echo разрывает строку.
Почитать можно например в мануале: http://php.net/manual/ru/language.types.string.php#language.types.string.syntax.double
По коду все верно, только одно замечание — на называй переменные по-русски, тебя будут за это гнобить другие программисты. Если ты не силен в английском, не беда, в наш век можно воспользоваться сайтом slovari.yandex.ru или translate.google.com когда придумываешь название переменной.
Если остаток долга больше 5000, платим 5000
Если меньше или равен, платим сколько осталось
Учти, что код который приведен в задаче, не совсем правильный. Возможно, лучше стереть его и написать свой с нуля.
Также, есть вариант сделать так:
Цикл, внутри него:
- прибавляем проценты и комиссию к остатку долга
- если остаток маленький, выплачиваем сколько осталось и уходим
- иначе платим 5000
Если тебе трудно написать сразу, давай писать по частям:
- напиши код, который каждый месяц только увеличивает долг (и выводит его на экран)
- допиши к нему код, который каждый месяц пишет, большой сейчас долг (школьник не может его выплатить разом) или маленький (меньше 5000 и его можно выплатить за один раз)
- допиши код, который каждый месяц пишет, сколько надо заплатить в этом месяце (с учетом того что больше 5000 школьник заплатить не может)
- наконец, допиши код, который платит эту сумму, уменьшая долг и считает сколько всего выплачено
Также, в уроке есть задача попроще, про вклад в банк и миллион, можешь ее решить сначала, если хочешь.
>- напиши код, который каждый месяц только увеличивает долг (и выводит его на экран)
http://ideone.com/F41I6W
Я не понимаю в чём ошибка т.е при том, что есть echo - не выводит почему-то
Ладно, а как добавлять нужное количество пробелов, то есть 2, три и т.п.? Или допустим создать строку из n пробелов? Можно нормальный ответ?
Берешь строку, вычисляешь её длинну, добавляешь циклом столько пробелов, сколько не хватает до нужной длинны. Ты ведь задачу на ооп про сотрудников делаешь?
>допиши к нему код, который каждый месяц пишет, большой сейчас долг (школьник не может его выплатить разом) или маленький (меньше 5000 и его можно выплатить за один раз
Теперь проблема с этим, выводит не на каждый месяц, а в конце. Что - то не ладное.
http://ideone.com/F41I6W
потом пытался засунуть условия в цикл - и вообще край.
http://ideone.com/8oerod
Я не могу понять, что я упустил.
> Теперь проблема с этим, выводит не на каждый месяц, а в конце. Что - то не ладное.
Потому что ты поместил if не внутри цикла, а после него потому он и выполняется в конце. Логично же. повторяются только те команды, которые внутри цикла.
for (...) {
тело цикла;
то есть команды которые выполнятся на каждом шаге;
}
> потом пытался засунуть условия в цикл - и вообще край.
Ты их не засунул внутрь цикла, а добавил второй цикл. То есть выполняется первый цикл 20 раз, а потом второй.
Ты не внимательно прочел, что надо сделать:
> напиши код, который каждый месяц только увеличивает долг
У тебя долг не увеличивается, а уменьшается, посмотри на цифры.Это потому, что ты не пишешь код сам, а скопировал неправильный код из задачи (он там специально написан с ошибкой).
Попробуй сам написать код, который каждый месяц увеличивает долг, прибавляя к нему проценты и комиссию.
То есть, должно быть примерно так:
for (....) {
долг = долг × проценты + комиссия;
echo долг;
}
Спасибо, теперь понял про тело цикла и засунул всё в него, сразу полегчало. Спасибо большое!
>>407692
Я уже так делал и переделывал, ведь долг изначально 40.000 и если он будет увеличиваться, то как я смогу проверить работоспособность
>- допиши к нему код, который каждый месяц пишет, большой сейчас долг (школьник не может его выплатить разом) или маленький (меньше 5000 и его можно выплатить за один раз)
Ведь школьник не может оплатить 40к, только если меньше.
А почему код не выравниваешь нормально? Невозможно же прочесть. Можно через 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.
Если используешь русские буквы в регулярке, надо ставить флаг u в конце. У меня в уроке, опять же, это вроде написано (правда, может, мелким шрифтом)
В чем именно проблема, сказать сложно, так как код у тебя довольно запутанный. Но ты можешь поставить в программу var_dump и echo чтобы увидеть чему равна какая переменная и соответственно понять что идет не так.
Спасибо, но например через str_replace или preg_replace можно заменить (,в) на (, в) если я уже буду знать на что менять, то есть напишу (, в) , а вместо в может быть любая буква. Если просто заменить (,) на (, ) то я таким образом заменю все запятые в тексте, иначе мне надо знать позицию каждого проблемного символа, что я и пытаюсь сделать использовав strpos. Я кажется чего то не понял скорее всего.
Наверное мне стоит пояснить что я делаю в коде, он не понятен. Вначале идёт проверка строки и нахождение всех вхождений этого шаблона
$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- это позиции вхождений которые ищем.
}
Наверное мне стоит пояснить что я делаю в коде, он не понятен. Вначале идёт проверка строки и нахождение всех вхождений этого шаблона
$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- это позиции вхождений которые ищем.
}
Sublime text editor
Здесь мне кажется может ещё помочь функция которая будет записывать все позиции вхождения подстроки в строку. Но я такой функции не знаю, и не смог найти.
Найди молчаливую девушку и молчите вместе. Если вам не о чем разговаривать, может вы не очень и подходите друг другу.
>>407706
> Если просто заменить (,) на (, ) то я таким образом заменю все запятые в тексте, иначе мне надо знать позицию каждого проблемного символа, что я и пытаюсь сделать использовав strpos
Действительно. Ну раз так, то лучше сразу использовать preg_replace и не мучаться.
>- напиши код, который каждый месяц только увеличивает долг (и выводит его на экран)
- допиши к нему код, который каждый месяц пишет, большой сейчас долг (школьник не может его выплатить разом) или маленький (меньше 5000 и его можно выплатить за один раз)
- допиши код, который каждый месяц пишет, сколько надо заплатить в этом месяце (с учетом того что больше 5000 школьник заплатить не может
http://ideone.com/B0ssmX
Будьте добры проверить, всё ли верно сделано по 3-ём из 4 пунктов.
Здесь нужно использовать preg-replace а не изобретать велосипеды.
Вместо первого for там надо исплоьзовать гораздо более удобный foreach.
Вместо второго for надо использовать str_replace.
В регулярке надо использовать флаг u.
После if () надо писать фигурные скобки {}
Но приавльное решение использовать preg_replace.
Почти все верно. Только когда долг больше 5000, он должен писать что школьник заплатит в этом меясце 5000, а у тебя не пишет. В остальном все верно.
Извини если надоел но в случае с preg_replace это будет выглядеть:
$str="Здравствуйте мне кажется,вы совсем:поехавший";
$pattern="/[,.;:][А-Яа-я]/";
$n=preg_replace($pattern, ", в",$str);
В итоге снова один вариант а не универсальный для всех вхождений. Я так пробовал, пробовал вставлять массив во второй параметр, то всеми шаблонами для замены, но порядок где и какой заменять функция естественно не знает.
Ну и теперь тебе осталось сделать выплату, то есть долг уменьшается на сумму выплаты, и в какой-то переменной учиытвается эта выплата (чтобы посчитать общую сумму выплат за все время).
А что если сделать функцию, которая через mb_substr выделяет букву и сохраняет её в переменной и потом уже в прег реплейс ты вставляешь эту переменную?
Не надоел. Можешь задавать вопросы еще если что-то непонятно.
> но порядок где и какой заменять функция естественно не знает.
Почитай мануал по preg_replace.
Там есть специальные подстановки для этого, чтобы подставить в замену букву или символ из исходной строки.
Не забудь добавить флаг u к регулярке.
Я не оп если что, просто предположил.
Спасибо, не знал про такое свойство, сейчас посмотрю.
Может одна из этих?
https://gist.github.com/codedokode/10774100
https://gist.github.com/codedokode/7054af4a03865c4cc863
Алсо инструкция по командной строке если надо будет в ней вводить команды:
https://gist.github.com/codedokode/10539568
О, спасибо. Кстати, поясни за Федору, годный дистрибутив?
Стоит ли ставить 2 ос - генту и федора?
Никогда с ней не работал, так что не знаю. Вроде как известный дистрибутив.
Насчет генту, можешь поставить, но придется красноглазить с ней по хардкору.
Школьник с айфоном опять на связи
http://ideone.com/1H2ohl
Почему у меня не прибавляется бобло от сервисного обслуживания?
Походу пора ложиться спать.
> ($credit × $percent)
Ты не прибавляешь проценты, а просто берешь 3% от остатка долга. Надо умножать на 1.03 чтобы прибавить 3%
лол, главное я сам узнав, что к этой задаче какая та ошибка думал, что ошибка - именно плохо/неправильно написанный процент и забыл про него.
Теперь уже самое главное. Так решается, или же мне нужно что-то сделать с остатком?
http://ideone.com/1H2ohl
Тогда давай проверим, все ли верно. Объясни, почему в этом примере http://ideone.com/0IAaSS появляется пробел, хотя у тебя указано что пробел надо добавлять только перед русскими буквами.
Ссылки-подсказки:
http://php.net/manual/ru/reference.pcre.pattern.modifiers.php
https://gist.github.com/codedokode/ff99e357e9860ea169b8
Правльный ответ: потому что в коде много грубых ошибок, например u надо писать маленькой, а обращаться к строке как к массиву $str[0] нельзя, я уже это писал выше
И все же через preg_replace решение будет гораздо короче, в 1 строчку. Лучше использовать его.
Также, я советую тебе не браться за более сложные задания сразу, а вернуться к уроку про строки и прорешать задачи там.
Спасибои, теперь буду знать. А как поступить в этом моменте?
for($j=0; $j<count($k); $j++) {
$r[$j]=$k[$j]['0']." ".$k[$j]['1'];
}
Нужно использовать символы {} ?
даже если вы не мастер ОП, кто - нибудь может взглянуть на это дерьмо, дабы я мог пойти спать и наконец-то убрать это ублюдка школьника с айфоном.
Ну вообще-то по условию задачи он должен выплатить всё, до копеечки, никаких остатков. Ты же банку не скажешь "сори ребят, нет купюр ниже 5к"
блять, я хуй знает что делать с этим, прошерстил функции там в учебнике и ненашёл в общем начну завтра самого начала. Видимо где-то что-то упустил
Нет.
Нужно использовать mb_substr чтобы получить 1 букву из строки.
Ну и вместо цикла тут надо использовать foreach так как от обилия скобок и запятых аж в глазах рябит.
>>407766
Пока что неприавльно. Посмотри сам
> $credit = ($credit $percent) + $service - $oplata;
Ты выплаиваешь ровно 5000 даже если остаток например всего 1000. Надо в последний месяц выплатить эту оставшуюся 1000.
То есть не надо сразу вычитать $oplata. Надо посмотреть большой ли долг и поступать по-разному в разных случаях. Вернись к тому коду который пишет большой или маленький остаток долга и в него допиши выплату. Если долг большой то платим 5000, если маленький то сколько осталось.
Тебе хватит команды if.
увеличиваем долг;
if (долг большой) {
платим 5000;
} else {
платим сколько осталось;
долг выплачен, ура, выходим из цикла;
}
>>407803
По ссылке открывается главная. Запости еще раз.
>>407804
Норм решение.
>>407815
А что с оформлением? Почему строчки разбросаны по всей странице? Оформи нормально, например пропусти через сайт phpformatter.com (больше способов отформатировать код в посте: >>405045 )
Когда отформатируешь, тогда проверю.
Тебе хватит команды if.
увеличиваем долг;
if (долг большой) {
платим 5000;
} else {
платим сколько осталось;
долг выплачен, ура, выходим из цикла;
}
>>407803
По ссылке открывается главная. Запости еще раз.
>>407804
Норм решение.
>>407815
А что с оформлением? Почему строчки разбросаны по всей странице? Оформи нормально, например пропусти через сайт phpformatter.com (больше способов отформатировать код в посте: >>405045 )
Когда отформатируешь, тогда проверю.
Не забудь также убрать все лишние пустые строчки (можно использовать максимум 1-2 пустых строчки подряд), замени <? на <?php и убери ?> в конце.
Наоборот же. У тебя кредит становится меньше регулярной оплаты, значит оплату нужно приравнивать к кредиту (а не кредит к оплате)
Верно, перепутал.
Самооценка после того, как сам с такой задачей не справился за 12 часов - просто в жопе, аж руки трясутся.
Попытался по твоему коду сам написать новый, в чём может быть ошибка?
http://ideone.com/1H2ohl
Ты перепутал переменные оплачено и оплата. В проверке условия у тебя не оплата приравнивается к кредиту а оплаченная сумма. Поэтому на 13ом месяце оплачено из 60 тысяч превращается в 6.
Чтобы такого не путаться в переменных называй их, как оп советовал, по английски.
бамп вопросу
>По ссылке открывается главная. Запости еще раз.
Вот - http://ideone.com/Qj5kKL (преобразование строки в массив)
И за одно ещё одна - http://ideone.com/AJhXke (проверка ключей)
Сколько еще придется выучить/прочитать/освоить после этого курса чтобы добиться своих 1к зеленых в месяц на одеске?
лiл
Если умеешь пользоваться echo то можешь уже идти.
На сайте только основы PHP. После них надо будет делать более сложные задания, изучать HTML, CSS, SQL, JS, фреймворки. даже если ты будешь очень быстро все изучать, меньше чем за месяцев 4-5 ты не успеешь.
Но даже изучив все эти технлогии, тебе еще придется пободаться за право получать заказы на одеске, порешать их тесты, и т.д, возможно выяснится что у тебя где-то пробелы в знаниях, и надо что-то доучить.
Ну и с анлийским надеюсь у тебя все в порядке, если на одеск метишь?
А ещё пыхпых и шапкоскрипт. А потом после того как ты сдашь заказ индус-заказчик пололирует с твоего кода и тебя в придачу.
Как страшно жить.
А зачем так много пустых строк в программе?
Запятые в массив добавлять не надо. Зачем ты это делаешь?
Переменные надо называть не по-русски и нормально, чтобы название отражало содержание. Например $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, да еще и с лишней запятой.
Думаю, тут есть над чем поработать.
проверка ключей
В задании написано:
> В функцию приходит массив
Где у тебя функция?
Переменные надо назвать нормально, например a1 -> keys.
> for ($i = 0; $i < count($name1);
тут надо foreach
Также, эта задача решается без цикла, если знать нужные функции для работы с массивами. Поищи тут: http://php.net/manual/ru/ref.array.php
Специалист за 2014 год. Там 4 уровня от базовых принципов до шаблонов погромирования. Причем все новшества версии 5.4 тоже изложены. Обычно его дропают из-за сложности, а прикрываются отговорками "данускучна я за час бы все расказал".
>А должно быть просто test"value
Я смотрел по заданию, там в ответе должно быть "test\"value", с запятыми такая же история. Запятые не нужны? Они есть в том что должно получиться
Ага, теперь кажется понятнее, спасибо. Что бы скрипт работал нормально, достаточно будет вставить preg_replace в момент где записываем в массив который удалит все символы, вроде /": и других которые там могут возникнуть? Пробелы перед цифрами это обязательно?
даж строку на массив разбить не могу представить как. Ну вот всякие идеи типа разбиваем через запятую или через huitaname=любая рандомная хуита, huitaname2= повторить... не работает, так как willItWork="a=1,b=2,c=3" просто возьмет и сломает все свомими запятыми или a= Стало быть нужно что-то более изощренное, в духе: Парсим строку через huitaname= но когда открываются кавычки, мы всё в них игнорируем? В общем была еще идея перед тем как начать парсить, пройтись по строке в поисках выражений внутри кавычек, и сделать автозамену например на большие числа, одновременно с этим складывая штуки в духе: "a=1,b=2,c=3" в массив с ключами из этих больших чисел. Что бы опять же распарсить строку простой регуляркой, и сделать потом обратную автозамену уже в массиве. В общем вот как-то так. Пока отложу эту задачку.
>В общем была еще идея перед тем как начать парсить, пройтись по строке в поисках выражений внутри кавычек, и сделать автозамену например на большие числа, одновременно с этим складывая штуки в духе: "a=1,b=2,c=3" в массив с ключами из этих больших чисел. Что бы опять же распарсить строку простой регуляркой, и сделать потом обратную автозамену уже в массиве. Но тогда в игру вступает quotedString="test\"value" которая тоже поспешит поломать все нахуй.
> , достаточно будет вставить preg_replace в момент где записываем в массив который удалит все символы, вроде /": и других которые там могут возникнуть?
Нет
> Пробелы перед цифрами это обязательно?
Нет. У меня под знаком (пробелы) подразумевается, что может быть от 0 до бесконечности пробельных символов, то есть может и не быть.
>>408069
А как по твоему интерпретатор php парсит код программы? Там все в 100 раз сложнее, но он же справляется. Я уже писал выше, тут нужны либо хардкорные регулярки, либо идти по строке слева направо и разбирать на части.
Интерпретатор знает чего ждать от кода, там каждый случай прописан заранее, а все что выходит за рамки просто идет нахер? Предлагаешь разобрать все возможные случаи со всякими , " " ' ' \ ?
Гугл ничего конкретного не говорит, можно более точную формулировку или ссылку?
Так и есть, раздача куда-то проебалась. Вот кеш, сидов еще море http://btdigg.org/search?info_hash=4a8de0ca4cea94824185a35c15932da2da4f0813
Благодарю, поставлю на закачку, вечером посмотрю.
Так он же по MySql просил, а это курс по всему пхп
Те кому тут вешают лапшу на уши про то, что задача на айфон сложная, вы не ведитесь, там все настолько просто, что можно просто охуеть. Вот где настоящая хрень начинается, так это начиная с регулярок и далее все задачи через одну.
Как думаете, можно подобное приложить как кусок портфолио к анкете на джуна? Это пожалуй пока что лучшее из всего, что я написал на пхп.
Не очень-то и сложная. С банкоматом или поиском пути сложнее, а тут просто строчек кода дохуя.
Прикладывать лучше пример приложения, например, файлообменник, который мы делаем после учебника. А это все же как-то слишком просто мне кажется, это же основы языка php всего лишь. Очевидно что ты их должен знать по-любому.
http://ideone.com/xAvU9A
Нисколько не сомневаюсь, в итоге если поднапрячься то решается за 3 часа, просто очень долго не брался за исправления. Банкомат и поиск пути мне только предстоит. Я же сказал, что это пока лучшее из того что я писал.
>>408295
Тоже верно, но пока нет никаких приложений, кроме счетчика слов в тексте на локальном хосте. Во первых не знаю как им показать его грамотно, не скрины же. А во вторых там позор скорее, а не начинка.
> А это все же как-то слишком просто мне кажется, это же основы языка php всего лишь.
Ну основы пхп + алгоритмы какие-никакие. Основы как по мне закончились на первой задаче с функцией и кредитом.
Стоп, кому ты показывать что-то собрался? Ты на работу уже что-ли хочешь устроится?
Это куда берут с такими навыками, не поделишься ссылочкой? Я даже на фрилансе не могу какой-нибудь самой простой фигни найти, которая мне бы по силам была, везде абсолютно нужны знания фреймворков.
http://ideone.com/6fUSXJ
Держи, $bablo = round($deposit, 2);
значит округляем переменную $deposit до двух знаков после запятой и кладем её в переменную баблло. При этом твой $depodit по факту остается нетронутым и его округление не искажает дальнейшие расчеты.
Во первых пока никуда не берут, хотя я пытаюсь на самые донные вакансии откликаться, хотя бы для опыта собеседований, прощупывания почвы по требованиям и посмотреть в глаза на тестовые задания, даже если и не возьмут.
Во вторых у тебя подход мне кажется неверный. Естественно на фрилансе не нужны никому джуно-макаки, а нужен человек который знает как решать конкретные задачи, пусть диапазон этих задач и будет очень небольшим. Думаю в отличие от офиса тебя на фрилансе не будет ниодин работодатель натаскивать на работу. А в офис могут взять совсем нубом, но с прицелом на рост, надеюсь.
Если ты не знаешь ООП и фреймворки, то как ты собрался работать над сайтами на них? У нас в треде, к слову есть задания на изучение фреймоврков (и ООП если ты в нем не очень разбираешься). Например та же задача на файлообменник (она вообще полезна, в ходе ее решения можно много пробелов в знаниях выявить).
Ну я еще изучаю ооп, а потом уже буду браться за фреймворки.
http://ideone.com/oKVKzF
Верно ли сделал? вроде всё работает.
И вопрос, могу ли не писать нумерацию в массиве с 1-6, а в строке с echo указать "Net", он ведь всё равно будет рандомным? ведь за тем же "Net" закрепляется свой индекс и благодаря шафлу он рандомент. Или же я слишком много на себя беру и не надо выёбываться.
Пока смотрел пришла мысль, кажется после уже того как всё записано в массив, стоит пройтись по каждому элементу циклом, и если первый символ и последний символ в элементе массива равен пробелу, просто его удалить.
Так как после перевода чисел в строчки идет не менее легкая на первый взгляд хрень, за которую сложно браться такому мудиле, то пробежался по предстоящим задачам, и для разминочки накидал оче быстро лайтовую альфа версию вывода текста по окружно синусоиде
http://ideone.com/PgxzCT
Я так и не смог понять как это делать массивом, а не конкретно по каждой переменной.
что я упустил?
значение функции array_flip нигде не сохраняется и поэтому её вызов в целом никак не влияет на программу. Если что, array_flip($code) саму переменную $code не изменяет.
видимо ты пропустил
$code = array_flip($code);
просто так array_flip($code); ничего не делает, точнее делает, но никуда не сохраняет измененя, это как написать
$a + 1;
Типа что это твоему значит? Ну прибавил ты к $a единицу и все, но ведь $a осталась прежней при этом, и новую переменную не завел и ничего, другое дело скажем $b = $a+1; Теперь у тебя есть переменная в которую ты сохранил результат своих действий. Так же и с $a = $a + 1; Ты перезаписал переменную новым значением, а старое стер.
Извините сэр, тут задание с генератором стихотворения,
как сделать так, чтобы выдавалось слово, а не цифра(индекс в массиве). Можно конечно в массиве прорисовать типо 1 => ~текст~, но в задание нужно херануть в лучшем виде.
http://ideone.com/l01zaN
Ну если в лучшем виде, то есть уже готовая функция http://php.net/manual/ru/function.array-rand.php
> Предлагаешь разобрать все возможные случаи со всякими , " " ' ' \ ?
Там не так и много случаев. Но да, через 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];
Тут вместо .= уместнее просто =
В остальном, хорошо.
http://ideone.com/a8biLX
Есть проблемы, не понимаю каким образом хранить данные о рангах сотрудников. Создавать новый класс и в качестве объектов использовать департаменты? Добавить ещё одну переменную массив в существующий класс, но как тогда правильно записать кто какого ранга, через пару ключ=>значение? Или можно просто хранить в массиве (вне класса и объекта) данные по каждому департаменту? Или вообще всё не верно что я думал?
Наверное нужно для каждого типа работника (менеджер, маркетолог) сделать свой класс. Ну и ранг должен быть свойством класса.
Привет, я кстати недавно доделал. Посмотри код. Правда я такой же нуб, как и ты. Можешь спрашивать, что не ясно. Я не очень коментировал код.
http://ideone.com/3QjIOe
Считает правильно. Небольшие замечания.
> $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 — это значение, а не ключ элемента. Перечитай как устроен массив. Ты можешь получить значение по ключу с помощью скобок, но не наоборот.
Считает правильно. Небольшие замечания.
> $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 — это значение, а не ключ элемента. Перечитай как устроен массив. Ты можешь получить значение по ключу с помощью скобок, но не наоборот.
Дык. Я то так и сделал, но прежде этого была попытка создавать классы без наследования.
Ну так в этой задаче от тебя ожидается именно применение наследования.
Ууу ну теперь то я утонул
>>408417
ОП, посмотри с этим дерьмом http://ideone.com/UMMJkN
задание про генерируемое стихотворение, как мне быть? точнее даже я хотел бы уж сам закончить его, но в какую сторону копать, где искать ответ?
Зачем ты в коде ставишь столько пустых строк? Неудобно читать. У себя ты можешь писать как угодно, но когда постишь, пожалуйста, удаляй лишние строки.
> $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, если она делает так же то так и должно быть.
Не не, слова должны быть рандомные, а у меня они, как бы так сказать, в одной фазе и поэтому первые две строки всегда одинаковые. И, как мне кажеться не так она решается, ибо год с этим псевдо-рандомов выглядит крайне глупо.
Спасибо, пытаюсь вникнуть но кажется мне ещё рано такие задачи решать. Я конечно не разбираюсь, но кажется у тебя очень неплохо получается, давно ПХП учишь? Много сидел над задачей?
Ну естественно они одинаковые, потому что ты используешь одинаковые переменные, не? Или ты думаешь, что они внутри echo будут еще раз вызывать функцию mt_rand и каждый раз меняться? Если ты присвоил переменной какое-то значение, то она такой и останется, пока ты не изменишь её езе раз.
Выглядит неплохо. можно еще сделать затухающую синусоиду, то есть чтобы к концу она почти до нуля уменьшалась.
> $y = sin($ipi()/10);
>\t$y=14;
>\t$y+=15;
Не надо размазывать простую формулу на 3 строки, пиши в одну
Числа типа 14, 15 надо вынести в переменные и вынести в начало программы чтобы легко было подстраивать вид синусоиды.
> for ($i=0; $i<count($field); $i++) {
Тут нужен foreach. А внутренний цикл лучше заменить на echo implode ...
> извини если тупой вопрос, но так можно заполнять объекты в классе?
Нормальный вопрос. Только вот делаешь ты не совсем правильно. Вместо того чтобы раскидывать данные о пользователе по 3 массивам, надо сделать массив из 3 пользователей:
array(
array("Иван", "Петров", 23),
....
);
Соответстенно дальше мы пишем
foreach ($users as $user) {
list($name, $surname, $age) = $user;
....
Мануал по list: http://php.net/manual/ru/function.list.php
Также, ты можешь передавать значения в объект через конструктор.
Имена классов надо писать с большой буквы. Это же Классы, а не обычные функции или переменные.
Ну да, но в задании так и надо так т.е стих выглядит след образом.
1 2 3
1 2 3
4 5
Хотя, вот - пофиксил, вроде работает, но не уверен, что должно выглядит именно так.
>Это работает только для строк из 1 латинской буквы или цифры.
Да, точно этого я и не подметил.
>Почему unset? переменные не должны удаляться.
Если этого не сделать то записывает не правильно, я мыслил так после того как одна строка записывается в массив надо её удалить и потом вновь записывать туда символы.
Ну а вообще да, многое не правильно, спасибо, буду стараться переделать.
У тебя там ошибка. Элемента с индексом 4 не существует в массиве $word3, так как нумерация начинается с нуля.
Спасибо, теперь кажется стало понятнее.
$random1 = array_rand($word1, 4);
Зачем указывешь 4? Он тогда тебе вернет массив из 4 случайно выбранных ключей. надо не указывать второй аргумент и тогда он вернет ровно один ключ.
>>408414
Задача про Вектор как раз на ООП.
Лучше, как советует анон, сделать 4 класса, один для каждой профессии. Причем, чтобы не копипастить, унаследовать их от абстрактного класса Работник.
И прежде чем решать задачу на Ооп, ты должен ответить на вопросы:
1) какие в задаче есть сущности, которые мы представим в виде объектов? Тут очевидно, есть Работники и есть Департаменты
2) какие у них есть свойства?
3) что мы хотим от них получить, то есть какие у них должны быть методы? Например, мы хотим от депарамента получать общую зарплату всех его сотрудников, потому в нем должен быть такой метод.
4) как объекты связаны между собой? Очевидно, один Департамент может содержать несколько Сотрудников и одного Босса.
> не понимаю каким образом хранить данные о рангах сотрудников
Свойство в классе.
> Добавить ещё одну переменную массив в существующий класс, но как тогда правильно записать кто какого ранга, через пару ключ=>значение?
Для каждого работника ты создаешь свой объект. То есть 15 сотрудников = 15 объектов. Соовтетственно, у каждого свой ранг, своя зарплата, и тд.
$random1 = array_rand($word1, 4);
Зачем указывешь 4? Он тогда тебе вернет массив из 4 случайно выбранных ключей. надо не указывать второй аргумент и тогда он вернет ровно один ключ.
>>408414
Задача про Вектор как раз на ООП.
Лучше, как советует анон, сделать 4 класса, один для каждой профессии. Причем, чтобы не копипастить, унаследовать их от абстрактного класса Работник.
И прежде чем решать задачу на Ооп, ты должен ответить на вопросы:
1) какие в задаче есть сущности, которые мы представим в виде объектов? Тут очевидно, есть Работники и есть Департаменты
2) какие у них есть свойства?
3) что мы хотим от них получить, то есть какие у них должны быть методы? Например, мы хотим от депарамента получать общую зарплату всех его сотрудников, потому в нем должен быть такой метод.
4) как объекты связаны между собой? Очевидно, один Департамент может содержать несколько Сотрудников и одного Босса.
> не понимаю каким образом хранить данные о рангах сотрудников
Свойство в классе.
> Добавить ещё одну переменную массив в существующий класс, но как тогда правильно записать кто какого ранга, через пару ключ=>значение?
Для каждого работника ты создаешь свой объект. То есть 15 сотрудников = 15 объектов. Соовтетственно, у каждого свой ранг, своя зарплата, и тд.
>$random1 = array_rand($word1, 4);
>Зачем указывешь 4?
Да я слепо пытался юзать пример из маунала
http://php.net/manual/ru/function.array-rand.php
Спасибо, что прояснил!
> 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
Не хватает в таблице колонки «Итого».
В общем, тут еще много чего можно доделать. Я советую исправить замечания и снова показать код для проверки.
> 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
Не хватает в таблице колонки «Итого».
В общем, тут еще много чего можно доделать. Я советую исправить замечания и снова показать код для проверки.
Невозможно. Ты же не хочешь быть быдлокодером который не понимает что пишет.
Ты читал мануалы тут: 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 тебе помогут.
А ты думал все получатся будет с первого раза и через недельку 1к зелных на одеске будут платить?
Если ты меняешь слова на свои, это хорошо, но надо их так подбирать, чтобы они хорошо сочетались.
>>408428
Ему там много чего стоит исправить. Ты должен писать не как он, а лучше.
>>408429
Почему? Нормально работает, если слова правильно подобрать.
>>408437
> я мыслил так после того как одна строка записывается в массив надо её удалить и потом вновь записывать туда символы.
Можно просто сделать $string = ''; а удалять не надо. Это плохая программа если в ней переменная то существует то нет.
>>408438
> PHP Notice: Undefined offset: 4 in /h
Если у массива count() == 3 то в нем есть элементы 0, 1, 2, а элемента с ключом 3 нету. Отсюда и ошибка.
>Не называй переменные русскими словами. slovari.yandex.ru тебе помогут
Это этика (также как и camelCase?) или же просто для будущей привычки и читаемости
> Это этика (также как и camelCase?) или же просто для будущей привычки и читаемости
Сам php конечно позволяет называть переменные как угодно.
Но в среде программистов приняты определенные подходы, и принято называть переменные по английски. Если ты будешь называть по-русски, то кто-то будет обижаться, а кто-то злиться. Неприятно читать слова типа $oplata. Если ты пишешь по-русски, логично писать русскими буквами, а на латиннице уместно писать по-английски.
Ну и если ты это сделаешь например в тестовом задании, то плохое оформление кода может быть минусом. Зачем брать человека, который будет вызывать конфликты в команде? Если ты такой код запостишь на форуме программистов, то они вместо ответа на вопрос могут предложить сначала исправить названия переменных.
То есть лучше сразу привыкнуть называть переменные нормально.
Многие считают тех, кто называет переменные по-русски, быдлокодерами. Ты же не хочешь, чтобы тебя так наызвали?
Ну а насчет camelCase, это вполне официально написано в стандарте оформления кода PSR-1: http://svyatoslav.biz/misc/psr_translation/#_PSR-2
Насчет требования называть переменные по-английски, его нет в стандартах, так как их пишут американцы, и у них такой проблемы нет.
Разобрался. Меня по сути интересовало как вообще заниматься на ней администрированием.
Сейчас подключил к ней модуль extplorer , открываю php и css вручную, и прямо там правлю, сделав бекапы, может можно удобнее , меня пока устраивает.
Что не могу понять.
Клиент сейчас хочет страницу на своем сайте оформить как пикрелейтед 1. То есть элементарно кликабельная картинка перенаправляющая на их свадьбу. Но скопировав верстку и стили (пикрелейтед 2) и вставив их в свой файл , я получаю нихуя.
Это копия, сохраненная 17 декабря 2014 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.