|
|
|
|
<?php
$a = false;
var_dump($a['key']); // NULL
$a = 'false';
var_dump($a['key']); // string(1) "f"
$a = 12;
var_dump($a['key']); // NULL
$a = null;
var_dump($a['key']); // NULL
$a = new stdClass();
var_dump($a['key']); // PHP Fatal error: Cannot use object of type stdClass as array
|
для меня стало откровением поведение php в первом, третьем и четвертом случаях. Почему php не выбрасывает даже несчастного нотиса в таком случае? Это ожидаемое поведение? | |
|
|
|
|
|
|
|
для: Igorek
(27.11.2013 в 15:39)
| | А нужно на действие 0 * 5 сообщать, что результатом будет 0? | |
|
|
|
|
|
|
|
для: confirm
(27.11.2013 в 16:32)
| | т.е. вы считаете нормальным, что на код вида:
<?php
$a = false;
echo $a['key'];
|
php не генерит ошибку/предупреждение, а молча вернув null работает себе дальше? | |
|
|
|
|
|
|
|
для: Igorek
(27.11.2013 в 19:11)
| | Я считаю, это естественно, что у булева значения не может быть ключа, как и не стоит предупреждать на false * 12 - "Вы че, ноль же получится". | |
|
|
|
|
|
|
|
для: Igorek
(27.11.2013 в 15:39)
| | Notice он обязательно выдаст. Нужно только включить вывод нотисов. В начале скрипта допишите:
<?
ini_set('display_errors', 1);
error_reporting(E_ALL);
|
| |
|
|
|
|
|
|
|
для: Sfinks
(28.11.2013 в 09:20)
| | Пробовали?
<?php
$a = false;
$b = array();
$a['key'];
$b['key'];
|
угадайте где нотис выпадет? ) | |
|
|
|
|
|
|
|
для: Igorek
(28.11.2013 в 13:18)
| | А угадайте, выдаст ли вам РНР сообщение об этом:
<?
$b = array('key'=>1);
echo $b[key];
|
| |
|
|
|
|
|
|
|
для: confirm
(28.11.2013 в 13:23)
| | ну, скажем, что выдаст. А к чему этот пример? | |
|
|
|
|
|
|
|
для: Igorek
(28.11.2013 в 13:47)
| | Ничего он не выдаст, даже не смотря на то, что key слово зарезервированное в РНР.
Это к тому, что указывать имя ключа без кавычек (строковое значение), это плохая привычка, однако РНР смолчит, поковыряется в области констант, и не найдя таковой изменит вашу ошибку сам - поймет, что это строка, действительное имя ключа, и найдет таковой. Но разработчики предупреждают, что так делать нельзя, ибо ошибки "писателя" РНР будет исправлять ровно до тех пор, пока имя ключа, который пользователь необдуманно ввел как константу, не будет зарезервировано в РНР. И тогда последствия могут быть не те, которые ожидаются, и РНР извещать об этом не будет. | |
|
|
|
|
|
|
|
для: confirm
(28.11.2013 в 13:56)
| | Всегда в таких случаях php предупреждает:
igorek@md:~/temp$ cat ttt.php
<?php
error_reporting(E_ALL);
$b = array('key'=>1);
echo $b[key];
igorek@md:~/temp$ php ttt.php
PHP Notice: Use of undefined constant key - assumed 'key' in /home/igorek/temp/ttt.php on line 5
Notice: Use of undefined constant key - assumed 'key' in /home/igorek/temp/ttt.php on line 5
1igorek@md:~/temp$
|
| |
|
|
|
|
|
|
|
для: Igorek
(28.11.2013 в 14:47)
| | Не обольщайтесь, зарезервирует за собою и молча подставит свое значение. | |
|
|
|
|
|
|
|
для: Igorek
(28.11.2013 в 13:18)
| | Да, забавно =)
Хам он, что я еще могу сказать =) | |
|
|
|
|
|
|
|
для: Igorek
(27.11.2013 в 15:39)
| | В документации, даже на русском, написано:
Попытка доступа к неопределенному ключу в массиве - это то же самое, что и попытка доступа к любой другой неопределенной переменной: будет сгенерирована ошибка уровня E_NOTICE, и результат будет NULL. | |
|
|
|
|
|
|
|
для: MHz
(28.11.2013 в 18:36)
| | Речь о другом | |
|
|
|