Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обращение к элементам массивов
 
 автор: bronenos   (26.01.2007 в 18:47)   письмо автору
 
 

Я вот все время обращался через $user['name'], некоторое время назад забыл поставить апострофы, получилось $user[name], я обрадовался, что можно поступать еще короче (разумеется, если до этого не было define ('name', 'smth');.
Однако вчера примерно, когда я дал тут пример кода кому-то, я увидел ошибку в ответ, что типа нет константы name.
Выходит, такая запись, раз заработала, то будет ТОЧНО работать только у меня?

   
 
 автор: Sergey89   (26.01.2007 в 18:49)   письмо автору
 
   для: bronenos   (26.01.2007 в 18:47)
 

Это ошибка - опускать апострофы. PHP втречая запись name думает, что это константа. Если он её находит, то подставляет значение иначе преобразует это имя в строку.
http://www.php.net/manual/ru/language.types.array.php

   
 
 автор: bronenos   (26.01.2007 в 18:56)   письмо автору
 
   для: Sergey89   (26.01.2007 в 18:49)
 

Все понятно....
Короче, ничего страшного, если нет такой константы и если я не планирую создавать такую...

   
 
 автор: Sergey89   (26.01.2007 в 19:05)   письмо автору
 
   для: bronenos   (26.01.2007 в 18:56)
 

Опять таки лишний Notice.
<?php
error_reporting
(E_ALL);

$my = array();
$my[index] = 1;
?>


Notice: Use of undefined constant index - assumed 'index' in C:\Program Files\Apache Group\Apache2\htdocs\test.php on line 5

   
 
 автор: bronenos   (26.01.2007 в 19:16)   письмо автору
 
   для: Sergey89   (26.01.2007 в 19:05)
 

...и если не планирую вводить error reporting, хотя целый год без него находился =)

   
 
 автор: cheops   (26.01.2007 в 19:46)   письмо автору
 
   для: bronenos   (26.01.2007 в 18:47)
 

notice является своеобразным советом и выводится, когда выставлена максимальная чувствительность PHP к ошибкам - её как правило понижают, это сделано на всех хостингах. Для этого, следует выставляют соответствующее значение для директивы error_reporting http://www.softtime.ru/info/articlephp.php?id_article=23, в конфигурационном файле php.ini
error_reporting = E_ALL & ~E_NOTICE 

Так же можно изменить уровень обработки ошибок локально, для этого в начало скрипта следует поместить функцию
<?php 
Error_Reporting
(E_ALL & ~E_NOTICE); 
?>

Если будете ставить такую функцию - ваш код будет рабоать везде без выдачи Notice, который является рекомендацией и не обязателен к исправлению.

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=4985

   
 
 автор: Sergey89   (26.01.2007 в 19:52)   письмо автору
 
   для: cheops   (26.01.2007 в 19:46)
 

Только разработчики PHP сами не советуют опускать апострофы (кавычки). Вот яркий тому пример:
$var[goto] - сейчас работает, а что если в будующей версии PHP добавят оператор goto? Правильно сгенерируется PARSE_ERROR.

   
 
 автор: cheops   (26.01.2007 в 22:14)   письмо автору
 
   для: Sergey89   (26.01.2007 в 19:52)
 

PARSE_ERROR возникает сплошь и рядом в этом случае и без гипотетического goto - кавычки опускать действительно не стоит, только если $var[goto] не используется в строке, например
<?php
  
echo "Значение - $var[goto]<br>";
?>

   
 
 автор: bronenos   (26.01.2007 в 22:21)   письмо автору
 
   для: cheops   (26.01.2007 в 22:14)
 

<?php 
  
print "Значение - {$var['goto']}<br>"
?>

   
 
 автор: Sergey89   (26.01.2007 в 22:27)   письмо автору
 
   для: bronenos   (26.01.2007 в 22:21)
 

Это ты к чему? "Значение - {$var['goto']}" - эквивалентно "Значение - $var[goto]".

   
 
 автор: bronenos   (26.01.2007 в 23:37)   письмо автору
 
   для: Sergey89   (26.01.2007 в 22:27)
 

Типа при выводе константой не заменяется чтоли?

   
 
 автор: Sergey89   (26.01.2007 в 23:54)   письмо автору
 
   для: bronenos   (26.01.2007 в 23:37)
 

В фигурных заменяется, без скобок нет.

   
 
 автор: kasmanaft   (27.01.2007 в 09:05)   письмо автору
 
   для: Sergey89   (26.01.2007 в 23:54)
 


<?php
$var
['E_ALL'] = 'var';
$var[E_ALL] = 20473;
print 
"Значение - {$var['E_ALL']}";
// как ни странно, выведет var
?>

   
 
 автор: Sergey89   (27.01.2007 в 10:27)   письмо автору
 
   для: kasmanaft   (27.01.2007 в 09:05)
 

Ну да. Логично. А если опустить апострофы?

   
 
 автор: kasmanaft   (27.01.2007 в 11:14)   письмо автору
 
   для: Sergey89   (27.01.2007 в 10:27)
 

>>>>>> {$var['goto']} - эквивалентно $var[goto]
>>>>при выводе константой не заменяется чтоли?
>>В фигурных заменяется

Сорри, я вас неправильно понял.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования