Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Раздел " Уроки PHP (по материалам форума PHP.SU)"

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (12): [1] 2 3 4 5 6 7 8 9 ... » В конец    

> Описание: Конкретные вопросы по урокам, в которых возникли сложности или недопонимание.
Mefistofel
Отправлено: 29 Апреля, 2012 - 20:48:57
Post Id



Частый гость


Покинул форум
Сообщений всего: 172
Дата рег-ции: Апр. 2012  
Откуда: Россия


Помог: 0 раз(а)




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

Пример из урока:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. // Выведет: Это не вставит: \n новую строку
  4. echo 'Это не вставит: \n новую строку';
  5. // В операционных системах используются особые специальные символы в тексте
  6. // которые помогают системе понять, где находится конец строки и начинается новая,
  7. // где находится табуляция и где вообще заканчивается весь текст.
  8. // [color=yellow]Символ \n обозначает конец строки и переход на новую[/color].
  9. // Слэш является частью символа, а не экранированием.
  10. // Если бы php всё таки вставил этот символ, то мы бы получили вывод в две строки:
  11. // Это не вставит:
  12. // новую строку
  13.  
  14. ?>


Вот сам вопрос: если символ (во, блин!!! Я обнаружил, что у меня на клаве нет символа обратного слэша!!!) \n означает конец строки, то почему он не исполняется? Потому что в первую очередь строка ограничена символами '.....' ? То есть, если бы символ \n стоял так:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. echo 'Это вставит:  новую строку' \n;
  4.  
  5. ?>


то конец строки будет прочтен??? Как этот символ используется? Можно пример?


-----
Чем короче и понятней код, тем ты нужнее народу
 
 Top
Okula
Отправлено: 29 Апреля, 2012 - 20:57:37
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Mefistofel пишет:
Я обнаружил, что у меня на клаве нет символа обратного слэша!!!)

Это ты пошутил Радость обратный слеш - соседняя кнопка с левым Shift или соседняя сверху рядом с правым Shift.
Символ \n это символ перевода строки. Вместо написания этого символа можно использовать предопределённую константу PHP_EOL.
Работа этого символа исходит из его названия - переводиткурсор на новую строку.
Mefistofel пишет:
echo 'Это вставит: новую строку' \n;

Возникнет ошибка синтаксиса, так как для соединения строк используется символ точка "."
Для того чтобы самостоятельно прописать данный спецсимвол достаточно обрамить его в двойные ковычки.
PHP:
скопировать код в буфер обмена
  1. echo 'Это вставит:  новую строку'."\n";

Либо как я уже говорил использовать константу PHP_EOL
PHP:
скопировать код в буфер обмена
  1. echo 'Это вставит:  новую строку'.PHP_EOL;
 
 Top
Bio man
Отправлено: 29 Апреля, 2012 - 20:59:27
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Mefistofel пишет:
во, блин!!! Я обнаружил, что у меня на клаве нет символа обратного слэша!!!
Не может быть такого. Ищи в правой части клавы. На 1 клаве у меня он справа от правого шыфта на другой клаве над шифтом.

Одинарные кавычки в РНР отличаются от двойных тем, что в них все воспринимается как текст. И \n будет расценен как просто 2 символа.
Mefistofel пишет:
PHP:
скопировать код в буфер обмена
  1. echo 'Это вставит:  новую строку' \n;
Не верно. Вызовет критическую ошибку. Что бы вставит перенос строки нужно писать его в двойных кавычках
PHP:
скопировать код в буфер обмена
  1. echo "Это вставит: \n новую строку";
Но вообще рекоммендуется использовать константу PHP_EOL
PHP:
скопировать код в буфер обмена
  1. echo 'Это вставит:'. PHP_EOL .'новую строку';
 
 Top
Mefistofel
Отправлено: 29 Апреля, 2012 - 21:22:55
Post Id



Частый гость


Покинул форум
Сообщений всего: 172
Дата рег-ции: Апр. 2012  
Откуда: Россия


Помог: 0 раз(а)




Okula пишет:
Это ты пошутил обратный слеш - соседняя кнопка с левым Shift или соседняя сверху рядом с правым Shift.

Bio man пишет:
Не может быть такого. Ищи в правой части клавы. На 1 клаве у меня он справа от правого шыфта на другой клаве над шифтом.


Разрози меня горм!!! нету! А?! netbook made in NovosibirskPodval... Закатив глазки

Okula пишет:
Символ \n это символ перевода строки.

Перевода откуда куда? Например, чтобы разделить текст на 2 строки под одной командой echo?

Тогда, получается, если мне нужно вывести текст "блабла бла блалалалала" в виде

_____________

блабла бла
блалалалала
_____________

я должен прописать так:


PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. echo 'блабла бла."\n".блалалалала';
  3.  
  4. ?>

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

Okula пишет:
Для того чтобы самостоятельно прописать данный спецсимвол достаточно обрамить его в двойные ковычки.
PHP:
скопировать код в буфер обмена

echo 'Это вставит: новую строку'."\n";



Как я увижу эту строку? Разницу я вижу только в том, что \n либо отображается в браузере, либо нет... Какой смысл в нем - не пойму...
PHP:
скопировать код в буфер обмена
  1. echo 'Это вставит:  новую строку'."\n";
  2.  


что при

PHP:
скопировать код в буфер обмена
  1. echo 'Это вставит: \n новую строку';


Простите за непонятливость.


-----
Чем короче и понятней код, тем ты нужнее народу
 
 Top
re_nat
Отправлено: 29 Апреля, 2012 - 21:29:11
Post Id



Частый гость


Покинул форум
Сообщений всего: 198
Дата рег-ции: Март 2012  


Помог: 5 раз(а)




а ты случаем не под виндой кодишь? Улыбка
Если да, то там нужно использовать еще и символ перевода каретки '\r'.
В твоем случае $string1."\r\n".$string2
 
 Top
LIME
Отправлено: 29 Апреля, 2012 - 21:31:33
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




дааа)) видимо тут придется потрудиться))
фиг с ним с слешем (хотя у меня на ноте(тошиба) в англ раскладке выше ентера)
в двойных кавычках строка интерпретируется, то есть переменные и управляющие символы заменяются
в одинарных все выводится буквально
например
PHP:
скопировать код в буфер обмена
  1. $var='переменная';
  2. echo "выводим слово $var и потом переводим строку \n перевели";
  3. echo 'выводим слово $var и потом переводим строку \n перевели';
обратите внимание как по разному выделяются переменные в строках
ну и само собой есть разница в выводе
 
 Top
Bio man
Отправлено: 29 Апреля, 2012 - 22:19:51
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




LIME пишет:
дааа)) видимо тут придется потрудиться))
Приступим к краткой текстовой лекции.

Перенос строки - как видно из названия этот символ для перевода строки на новую строку, то есть перемещает курсор (указатель) на строку ниже.
Мне известны 3 вида переноса строк:
0. Для окон - \r\n
1. Для пингвина - \n
3. Для ... мака - \r

Но, что бы сделать перевод строки универсальным в РНР существует предопределенная константа - PHP_EOL.

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

Для визуального переноса строки существует тег <br />

Но для чего же нужен этот перенос строки?
Если вы знаете, что такое форматирование текста то следующее предложение с примерами можете не читать.
Форматирование текста - оформление текста для удобной читаемости.
Пример отформатированного текста
PHP:
скопировать код в буфер обмена
  1. if($bVar){
  2.     $sWords = 'bla bla bla';
  3.     $rgWords = explode(' ', $sWords);
  4.     foreach($rgWords as $sWord)
  5.         echo $sWord."<br />\n";
  6. }else
  7.     echo '$bVar is false';

Пример не отформатированного текста
PHP:
скопировать код в буфер обмена
  1. if($bVar){$sWords = 'bla bla bla';$rgWords = explode(' ', $sWords);foreach($rgWords as $sWord)echo $sWord."<br />";}else echo '$bVar is false';

Как видно в примере №1 используются переносы строк и табуляция.
Но перенос строки существует не для вывода в браузер. Для этого случая есть тег <br />
Так для чего же это надо?
0. Для записи текста в файл. Представим простенькую ситуацию - есть динамически генерируемый файл, который нужно занести в массив построчно ф-цией file(). Если текст не отформатирован переносами строк то в массиве будет всего 1 значение и это будет весь текст. То же самое в текстовых процессорах (в простолюдии редакторах) каждая строка содержит невидимый символ в конце - это и есть перенос.
1. Для оформления вывода в браузере. Если вы посмотрите исходный код страницы в браузере то будут видны все переносы.
2. Для заголовков, но это тема отдельная.

Ну вот, в общих чертах Улыбка
 
 Top
Okula
Отправлено: 29 Апреля, 2012 - 22:53:03
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Mefistofel пишет:
Как я увижу эту строку? Разницу я вижу только в том, что \n либо отображается в браузере, либо нет... Какой смысл в нем - не пойму...

Перенос строки будет видно если нажать в браузере "Исходный код страницы".
Он переносит текст на новую строку в исходных данных, а не что ты видешь на экране монитора. Для переноса текста на новую строку в html файле существует html тег <br />
Применяя его можно наблюдать пернос строки не в исходных данных, а на обрабатываемой браузером странице.

P.S. PHP - это язык програмирования, а не язык разметки. Все задача решаемые с помощью него - это работа с исходным кодом файлов и с самимы файлами, а никак не с их представлением в браузере.
Что-то мне подсказывает что рано тебе ещё учить языки программирования, нужно с разметкой для начала разобраться.
 
 Top
Саныч Модератор
Отправлено: 30 Апреля, 2012 - 01:48:31
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)





На форуме завелся еще один данила Улыбка Чувствую скоро мы увидим еще один "портал Буденовска", ну в нашем случае Новосибирска Улыбка


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Mefistofel
Отправлено: 30 Апреля, 2012 - 16:42:25
Post Id



Частый гость


Покинул форум
Сообщений всего: 172
Дата рег-ции: Апр. 2012  
Откуда: Россия


Помог: 0 раз(а)




re_nat пишет:
а ты случаем не под виндой кодишь?

Под ней, родимой. Однако

LIME пишет:
фиг с ним с слешем

Поискал сегодня свежим взглядом - нету!!)))

LIME пишет:
например
PHP:
скопировать код в буфер обмена

$var='переменная';

echo "выводим слово $var и потом переводим строку \n перевели";

echo 'выводим слово $var и потом переводим строку \n перевели';


Аллилуйя!!! Ура! Мой мозг теперь понял!)) Детская нежная и ранимая психика осталась нетронута жестоким разочарованием... Спасибо)

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

Bio man пишет:
0. Для окон - \r\n
1. Для пингвина - \n


У меня винда, значит \r\n . Но у меня одинаково сработали как \n , так и \r\n. Что такое пингвин?)))

Bio man пишет:
Для визуального переноса строки существует тег <br />


Вот, собственно то, с чем я путал \n
Bio man пишет:
Ну вот, в общих чертах


Премного благодарен!=))) Все очень понятно.
Okula пишет:
Перенос строки будет видно если нажать в браузере "Исходный код страницы".

Усвоил, проверил - понял Улыбка

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


Возможно... Буду пытаться делать это параллельно, но не торопясь.

Саныч пишет:
На форуме завелся еще один данила Чувствую скоро мы увидим еще один "портал Буденовска", ну в нашем случае Новосибирска


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


-----
Чем короче и понятней код, тем ты нужнее народу
 
 Top
Okula
Отправлено: 30 Апреля, 2012 - 16:54:48
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Mefistofel, Данила - местный клоун. Задавал тупые вопросы и просил чтоб за него всё написали, а ещё грозился всех задосить Радость
 
 Top
avtor.fox
Отправлено: 30 Апреля, 2012 - 16:55:18
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




Mefistofel пишет:
Возможно... Буду пытаться делать это параллельно, но не торопясь.

Моск взорвёте.
Mefistofel пишет:
Что такое пингвин?

Linux
Mefistofel пишет:
Только вот где и для чего использовать эту функцию - не догадываюсь даже.

Элементарная работа с файлами или вывод алерта в js.
Mefistofel пишет:
Поискал сегодня свежим взглядом - нету!!)))

Враки. Фото клавы в студию Ха-ха
Mefistofel пишет:
кто такой Данила

Есть тут один кодер хай лвла Улыбка
 
 Top
armancho7777777 Супермодератор
Отправлено: 30 Апреля, 2012 - 16:57:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Саныч пишет:

На форуме завелся еще один данила Улыбка Чувствую скоро мы увидим еще один "портал Буденовска", ну в нашем случае Новосибирска Улыбка

Радость
Что-то не видать его давно ))

(Отредактировано автором: 30 Апреля, 2012 - 16:59:34)

 
 Top
Mefistofel
Отправлено: 30 Апреля, 2012 - 16:58:38
Post Id



Частый гость


Покинул форум
Сообщений всего: 172
Дата рег-ции: Апр. 2012  
Откуда: Россия


Помог: 0 раз(а)




Okula пишет:
Данила - местный клоун

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

avtor.fox пишет:
Враки. Фото клавы в студию


Ок, завтра до обеда скину)

avtor.fox пишет:
Есть тут один кодер хай лвла


Уже понял) У нас мало чего общего.))
(Добавление)
----------Массив ( Array )-----------

Уже созрел следующий вопрос по этому примеру из урока:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $array = Array('Сыр','Колбаса'); // Определяем массив с двумя строками
  4. echo $array[0]; // Обращение к нулевому элементу. Выведет Сыр.
  5. $array[1] = 'Мороженое'; // Присвоение первому элементу. заменяем колбасу на молоко
  6. echo $array[1]; // Выведет Мороженое.
  7.  
  8. ?>


Здест прописаны строки массива "сыр" и "колбаса". По умолчанию сыр - [0], а колбаса - [1]. Так? Если принудительно присваиваем строке [1] имя "мороженое", то как мне вывести "Колбаса", например, следующей строчкой, если ее место ([1]) занято мороженым? Мне нужно дополнительно прописать и присвоить строке [2] (или любой другой, которая больше, чем [1]) имя "колбаса", то есть сделав так:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $array = Array('Сыр','Колбаса'); // Определяем массив с двумя строками
  4. echo $array[0]; // Обращение к нулевому элементу. Выведет Сыр.
  5. $array[1] = 'Мороженое'; // Присвоение первому элементу. заменяем колбасу на молоко
  6. echo $array[1]; // Выведет Мороженое.
  7.  
  8. $array[2] = 'колбаса'
  9.  
  10. ?>


Этот вариант работает - я проверил. Но только не пойму, как можно присваивать номер строки массива, если изначально их всего 2 ($array = Array('Сыр','Колбаса'); )


-----
Чем короче и понятней код, тем ты нужнее народу
 
 Top
Саныч Модератор
Отправлено: 30 Апреля, 2012 - 17:43:00
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




Mefistofel, представьте, что массив это полка, а элементы массива - подписанные папки на ней. Чтобы поставить новую папку на полку, вам нужно ее как-то "обозвать". То же самое и с массивом, чтобы добавить новый элемент вы указываете его название (правильно - ключ) и значение этого элемента. В вашем случае ключи это и есть вот те цифры 0, 1, 2 и т.д. Вместо цифр могут быть еще строки, но видимо до ассоциативных массивов вы пока не дошли. Устанавливать ключ, кстати, не обязательно. Т.е. для добавления нового значения вы можете просто указать $array[] = 'колбаса' В этом случае интерпретатор все сделает за вас и сам присвоит этому элементу порядковый номер в массиве.
Ну вот как-то так. Улыбка
А вобще вам нужно сюда - http://ua.php.net/manual/ru/langref.php

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

Mefistofel пишет:
Что-то не видать его давно ))
Наверное на другой форум иммигрировал Улыбка


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Страниц (12): [1] 2 3 4 5 6 7 8 9 ... » В конец
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB