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.SU

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


 Страниц (1): [1]   

> Без описания
Давит
Отправлено: 09 Июня, 2011 - 17:38:09
Post Id



Частый гость


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


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




Объясните пожалуйста не понимаю как это работает

PHP:
скопировать код в буфер обмена
  1. $date= "2007-05";      
  2. $d = 1;
  3. echo $date + $d; // вводит 2008
  4.  
  5. echo $date++; // вводит 2007-05
  6.  
  7. $date++;
  8. echo $date;  // вводит 2007-07
 
 Top
maragon
Отправлено: 09 Июня, 2011 - 18:16:20
Post Id



Посетитель


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


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




а чего ты хочешь добиться? и зачем оно тебе?


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
IllusionMH
Отправлено: 09 Июня, 2011 - 18:33:00
Post Id



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


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


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




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

Вот немного непонятно как преобразуются типы во втором и третьем случае, а логика понятна
второй echo выводит $date и только потом наращивает второе число на единицу(получаем "2007-06").
потом еще раз увеличиваем на единицу (получаем "2007-07")
и уже потом его выводит("2007-07")
 
 Top
Давит
Отправлено: 09 Июня, 2011 - 20:17:10
Post Id



Частый гость


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


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




maragon пишет:
а чего ты хочешь добиться? и зачем оно тебе?

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

Я просто не понимаю
PHP:
скопировать код в буфер обмена
  1.  
  2. $date= "2007-09";
  3. $date++;
  4. echo $date; // вводит 2007-10

здесь есть много не понятно
вопрос
1.выше написано код не значит? покажи на екаран "$date" в котором уже добавлено на единицу?

2.почему вводит 2007-10 а не 2007-010,

PHP:
скопировать код в буфер обмена
  1. $date= "2007-05";      
  2. $d = 1;
  3. echo $date + $d; // вводит 2008

1. Разве здесь тоже не то?, здесь не написано добавила на единицу и вводи на екран
2, и почему результат первого примера не совпадает с результатом втарово?

(Отредактировано автором: 09 Июня, 2011 - 20:20:31)

 
 Top
OrmaJever Модератор
Отправлено: 09 Июня, 2011 - 20:30:04
Post Id



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


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


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




Давит пишет:
PHP:
скопировать код в буфер обмена
  1. $date= "2007-05";      
  2. $d = 1;
  3. echo $date + $d; // вводит 2008

php сам устанавливает и меняет типы даных из-за этого многие не знают что это вобще такое.
Вот напишите

и оно выведет 123 потому что приобразовало в числовой тип, а там есть только символы от 0 до 9. Причём $x будет равно 'abc123' то покажет 0 (php в этой переменой не найдёт число)
Вот так же и тут, математические операции можно проводить только с числовым типом. Перед добавление 1 к строке php эту строку преобразовывает с число и выходит 2007.
Давит пишет:
PHP:
скопировать код в буфер обмена
  1. echo $date++; // вводит 2007-05
  2.  
  3. $date++;
  4. echo $date;  // вводит 2007-07

а здесь прочитайте внимательно http://php.su/learnphp/operators/?id и должны понять что ++$var и $var++ это разные вещи, и лутше использовать ++$var

(Отредактировано автором: 09 Июня, 2011 - 20:31:12)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Давит
Отправлено: 09 Июня, 2011 - 20:36:06
Post Id



Частый гость


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


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




OrmaJever пишет:
Давит пишет:
$date= "2007-05";
$d = 1;
echo $date + $d; // вводит 2008

php сам устанавливает и меняет типи даных из-за этого многие не знают что это вобще такое.


А в этом случае php почему не устанавливает?
$date= "2007-09";
$date++;
echo $date; // вводит 2007-10
(Добавление)
кажется понял когда мы пишем
$date++;
php понимает что тип int.?

(Отредактировано автором: 09 Июня, 2011 - 20:40:06)

 
 Top
OrmaJever Модератор
Отправлено: 09 Июня, 2011 - 21:35:12
Post Id



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


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


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




OrmaJever пишет:
php сам устанавливает и меняет типы даных из-за этого многие не знают что это вобще такое.

Ну и поскольку не знают что такое типы даных то думают что echo выводит всё что нужно Улыбка
Вот если написать ваш пример вот так
PHP:
скопировать код в буфер обмена
  1. $date= "2007-09";
  2. $date++;
  3. var_dump($date); // вводит 2007-10

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

(Отредактировано автором: 09 Июня, 2011 - 21:51:52)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Давит
Отправлено: 09 Июня, 2011 - 22:34:01
Post Id



Частый гость


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


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




OrmaJever
Большое спасибо,
 
 Top
EuGen Администратор
Отправлено: 10 Июня, 2011 - 07:48:23
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




http://php.net/manual/en/languag...rs.increment.php
Цитата:
PHP follows Perl's convention when dealing with arithmetic operations on character variables and not C's. For example, in PHP and Perl $a = 'Z'; $a++; turns $a into 'AA', while in C a = 'Z'; a++; turns a into '[' (ASCII value of 'Z' is 90, ASCII value of '[' is 91). Note that character variables can be incremented but not decremented and even so only plain ASCII characters (a-z and A-Z) are supported. Incrementing/decrementing other character variables has no effect, the original string is unchanged.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Stierus Супермодератор
Отправлено: 10 Июня, 2011 - 11:55:19
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




"по какой причине инкремент не переводит тип я объяснить не могу" инкремент и для строк работает, это не арифметическая операция, а сдвиг битовый
 
My status
 Top
EuGen Администратор
Отправлено: 10 Июня, 2011 - 12:32:16
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Stierus пишет:
инкремент и для строк работает, это не арифметическая операция, а сдвиг битовый

Нет, это не верно. Точнее, не совсем верно.
Поддерживается только инкремент для ASCII (и то A-Z, a-z), в остальных случаях эффекта не возымеет.
Так же к строкам не применим декремент.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB