Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
Есть у меня такой код: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Этот код выдает: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Здесь написано, что === это тождественное равенство, сравниваемые выражения должны иметь одинаковые значения и тип. И в этом случае я не понимаю, почему я получаю результат "Не совпадают". sum является float, но и с таким кодом я получал аналогичный результат: Код: php 1. Или в данном случае лучше использовать == ? ________________________ Мы смотрим с оптимизмом... ...в оптический прицел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 12:00 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
1. print_r много чего не показывает. Используйте var_dump для более подробного вывода. 2. Сложные выражения можно разбить на две части с целью локализации места возникновения ошибки или непоняток. Типа такого: Код: php 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 12:18 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
vkle, у меня true. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Но читаемость кода у вас .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 12:20 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
Alibek B.И в этом случае я не понимаю, почему я получаю результат "Не совпадают". ну очевидно несовпадают типы данных. вывести дамп данных и будет всё видно сразу. неужели сам не можешь найти причину? у нас то нет твоих данных, хз что там твой код с ними делает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 14:18 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
r uну очевидно несовпадают типы данных. Приведенный код — полный. То есть элементы $var['total'] и $var['registry'] более нигде не изменяются, только в приведенном фрагменте. И я пока не вижу причину для того, чтобы типы данных не совпали. Правда теперь, после этого замечания, я подумал что возможно в $var['registry']['sum'] находится float, а в $var['total']['sum'] хранится int (или наоборот). Спасибо за подсказку, скорее всего дело в этом. Посмотрю что var_dump напишет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 15:00 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
Alibek B., $my['total']['cnt'] === $my['registry']['cnt'] здесь с таким же успехом может быть несовпадение типов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 15:03 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
-k2-здесь с таким же успехом может быть несовпадение типов Хм... А можно пояснить, каким образом? registry инициализируется нулем и изменяется исключительно с помощью ++. А total вычисляется как 0+$tmp[0], причем в $tmp[0] всегда бывает только строка из цифр (цифр немного, они гарантированно умещаются в int). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 15:16 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
Alibek B., $cnt = 0; $cnt1 = 1.0; var_dump($cnt+$cnt1); //float(1) по приведенному коду неясен тип $tmp[0], поэтому var['total'] = array('cnt'=>0+$tmp[0] .. не гарантирует приведения типов к целому, как для $var['registry']['cnt'] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 15:23 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
-k2-Alibek B., $cnt = 0; $cnt1 = 1.0; var_dump($cnt+$cnt1); //float(1) по приведенному коду неясен тип $tmp[0], поэтому var['total'] = array('cnt'=>0+$tmp[0] .. не гарантирует приведения типов к целому, как для $var['registry']['cnt'] 0+$tmp[0] гарантирует получение числа.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 15:30 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
kunaksergey, но не гарантирует тип: var_dump(0+"01");//int(1) var_dump(0+"1.0");//float(1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 15:35 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
-k2-, если он не знает даже тип, тогда Код: php 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 15:49 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
kunaksergey, об чем и речь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 15:53 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
-k2-var_dump(0+"1.0");//float(1) Да, с sum у меня так и было; $tmp[1]="10.00", приводился к float, результат (0+$tmp[1]) получался float. Но про cnt я писал, что это строка, состоящая только из цифр, десятичной точки там нет. Как лучше проверять, явно приводить типы и сравнивать ===, или использовать ==? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 15:57 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
Alibek B., что такое ==?.. я что-то не вкурсе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 15:59 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
Это вопросительный знак в конце предложения. Я хотел спросить, как лучше сравнивать: явно приводить типы и использовать тождественное равенство или использовать сравнение == с неявным приведением типов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 16:01 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
Alibek B.Это вопросительный знак в конце предложения. Я хотел спросить, как лучше сравнивать: явно приводить типы и использовать тождественное равенство или использовать сравнение == с неявным приведением типов? в зависимости от контекста.. Хотя в некоторой документации рекомендуют "==="; "==?" -я даже заново спецификацию перечитал :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 16:04 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
Alibek B., если в if (($my['total']['cnt'] === $my['registry']['cnt']) && (intval(100*$my['total']['sum']) === intval(100*$my['registry']['sum']))){ по приведенным данным второе условие выполняется гарантированно(и значения и типы), то логично предположить, что не выполняется первое, чудес то не бывает и через var_dump вы уже наверняка поняли почему именно, только нам не говорите :) авторКак лучше проверять, явно приводить типы и сравнивать ===, или использовать ==? в данном случае смысла проверять соответствие типов не вижу, по приведенному коду достаточно соответствия значений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 16:06 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
вообще непойму о чем разговор. ТС, тебе же сказали выше, выведи через var_dump() то что ты сравниваешь, и сразу увидишь какие там типы в реальности, а не те что ты придумал у себя в уме. а дальше уже ищи где именно в коде у тебя тип меняется. если нужно гарантировать тип, приводи его вручную. (int), intval(), floatval()... всё. блин. проблема на пустом месте. решается за 10 минут. а тут второй день уже происходит катание ваты. это же основы отладки. если чтото работает не так - выведи дамп и посмотри что там в реальности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 07:18 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
r uблин. проблема на пустом месте. решается за 10 минут. а тут второй день уже происходит катание ваты. Проблема за 10 минут и решилась, после проверки типов через var_dump. Остальное время мне было интересно узнать, как вообще могло получится, что типы данных не совпали. Ну и как лучше сравнивать, чтобы даже при несовпадении типов сравнение было успешным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 11:09 |
|
||
|
PHP, вопрос по === со скалярами
|
|||
|---|---|---|---|
|
#18+
Alibek B.Остальное время мне было интересно узнать, как вообще могло получится, что типы данных не совпали. точно также. var_dump в цикле. Alibek B.Ну и как лучше сравнивать, чтобы даже при несовпадении типов сравнение было успешным. если только по значению то == если еще с учетом типа === ты сам об этом написал еще в первом сообщении. все же очевидно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 11:13 |
|
||
|
|

start [/forum/topic.php?fid=23&tid=1461880]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 407ms |

| 0 / 0 |
