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
Форумы портала PHP.SU :: Версия для печати :: объясните
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » объясните

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

1. Давит - 09 Июня, 2011 - 17:38:09 - перейти к сообщению
Объясните пожалуйста не понимаю как это работает

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
2. maragon - 09 Июня, 2011 - 18:16:20 - перейти к сообщению
а чего ты хочешь добиться? и зачем оно тебе?
3. IllusionMH - 09 Июня, 2011 - 18:33:00 - перейти к сообщению
Давит, с первым все понятно - кури мануал по преобразованию типов.
если к строке начинающейся с числа(целого) прибавить число(целое) - результат - целое число.

Вот немного непонятно как преобразуются типы во втором и третьем случае, а логика понятна
второй echo выводит $date и только потом наращивает второе число на единицу(получаем "2007-06").
потом еще раз увеличиваем на единицу (получаем "2007-07")
и уже потом его выводит("2007-07")
4. Давит - 09 Июня, 2011 - 20:17:10 - перейти к сообщению
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, и почему результат первого примера не совпадает с результатом втарово?
5. OrmaJever - 09 Июня, 2011 - 20:30:04 - перейти к сообщению
Давит пишет:
PHP:
скопировать код в буфер обмена
  1. $date= "2007-05";      
  2. $d = 1;
  3. echo $date + $d; // вводит 2008

php сам устанавливает и меняет типы даных из-за этого многие не знают что это вобще такое.
Вот напишите
PHP:
скопировать код в буфер обмена
  1. $x = '123abc';
  2. var_dump((int)$x);
  3.  

и оно выведет 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
6. Давит - 09 Июня, 2011 - 20:36:06 - перейти к сообщению
OrmaJever пишет:
Давит пишет:
$date= "2007-05";
$d = 1;
echo $date + $d; // вводит 2008

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


А в этом случае php почему не устанавливает?
$date= "2007-09";
$date++;
echo $date; // вводит 2007-10
(Добавление)
кажется понял когда мы пишем
$date++;
php понимает что тип int.?
7. OrmaJever - 09 Июня, 2011 - 21:35:12 - перейти к сообщению
OrmaJever пишет:
php сам устанавливает и меняет типы даных из-за этого многие не знают что это вобще такое.

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

то видно что тип string, по какой причине инкремент не переводит тип я объяснить не могу. Может разработчики решили что так нужно
8. Давит - 09 Июня, 2011 - 22:34:01 - перейти к сообщению
OrmaJever
Большое спасибо,
9. EuGen - 10 Июня, 2011 - 07:48:23 - перейти к сообщению
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.
10. Stierus - 10 Июня, 2011 - 11:55:19 - перейти к сообщению
"по какой причине инкремент не переводит тип я объяснить не могу" инкремент и для строк работает, это не арифметическая операция, а сдвиг битовый
11. EuGen - 10 Июня, 2011 - 12:32:16 - перейти к сообщению
Stierus пишет:
инкремент и для строк работает, это не арифметическая операция, а сдвиг битовый

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

 

Powered by ExBB FM 1.0 RC1