Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
1) Для начала хотел бы уточнить, что есть объявление, а что есть определение переменной.
2) В обучалке пишется, что обращение к несуществующей переменной вызывает ошибку. Но почему-то, когда я обращаюсь к несуществующей переменной вот так:
то к ошибке это не приводит, код работает как надо. В чём причина? Или же ошибка на самом деле есть, но она не выводится php? И, если ошибка все же есть, то почему программа работает дальше?
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
1) Объявление переменной - это момент, когда мы указываем ее тип или просто каким-нибудь образом делаем, чтоб она начала существовать. Как в php выглядит объявление переменной, я честно говоря, затрудняюсь представить,но вот в С:
int var;
char *string;
Тут просто объявили, но значение в этой переменной не несет никакого смысла и может вообще содержать всякие неожиданности.
А когда мы присвоим что-то - то мы определим переменную:
string = "sssssss";
Можно сразу обявить и определить:
int i = 94;
2) Будет не ошибка, будет замечание. Оно и происходит, просто их показ или фиксирование выключены.
Yandex -> error_reporting, ini_set, display_errors
OrmaJever
Отправлено: 12 Октября, 2011 - 21:11:54
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
По первому вопросу только хотел написать пример из С но видимо Champion подумал имено так.
Champion пишет:
Как в php выглядит объявление переменной, я честно говоря, затрудняюсь представить
из-за нечёткой типизации обьявление переменой выглидит так
Вобще обьявление и определение в php не имеет большой разницы.
Pavelbeginner пишет:
Или же ошибка на самом деле есть, но она не выводится php?
Вы сами всё поняли При обращении к несуществующей переменой нотис будет всегда, а вот увидите вы его или нет зависит от настроек. Champion написал где и что искать
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Pavelbeginner
Отправлено: 12 Октября, 2011 - 21:30:11
Частый посетитель
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
Спасибо. А еще вопросы небольшие. При обращение к несуществующей переменной, как я понял, интерпретатор присваивает переменной тип Null. В моем примере if($test), переменной $test присваивается значение и тип null, а дальше происходит автоматическое преобразование типа null в тип boolean? И исходя из того, что обращение к несуществующей переменной это ошибка(хотя на ход программы это не повлияет), то значит ли, что правилом хорошего тона будет везде перед обращением к переменным проверять их существование следующим образом:
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
OrmaJever пишет:
$text = '';
это скорее инициализация
а объявления в php вообще нет
потому что память заранее не выделяется
поправьте если что
Pavelbeginner пишет:
При обращение к несуществующей переменной, как я понял, интерпретатор присваивает переменной тип Null.
пустое значение насколько я знаю присваивается '' , а оно в сравнении FALSE
DeepVarvar
Отправлено: 12 Октября, 2011 - 21:38:03
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
int, var, struct... В сишках идет сперва явное описание всех ресурсов и переменных, задание их типов.. Если дальше в коде пытаться впихнуть невпихуемое, например строку как значение в ранее определенный для хранения целых чисел ресурс - это вызовет ошибку. В принципе очень верный подход - думай что пишешь.
Те же моменты можно найти и в JS - а ну ка алертни объект или массив, что будет?
Ша - to.String
PHP - веяния ООП дают некоторые "наставления" к структуризации и типизации.
Сперва описание - затем манипуляции. (Добавление)
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Pavelbeginner пишет:
то значит ли, что правилом хорошего тона будет везде перед обращением к переменным проверять их существование следующим образом:
практичнее инициализировать значением по умолчанию (Добавление) DeepVarvar ага ...null
Pavelbeginner
Отправлено: 12 Октября, 2011 - 22:02:50
Частый посетитель
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
Ну и последний мини-вопрос касательно этой темы. Значит, если я объявлю переменную, как $test = null, а затем обращусь к ней, то это не считается ошибкой, а если переменная не существует и я к ней обращаюсь, то это считается ошибкой и этой переменной php автоматически присваивает значение и тип null и значение null, при повторном же обращение к этой переменной ошибки уже не будет, верно?
LIME
Отправлено: 12 Октября, 2011 - 22:09:19
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Pavelbeginner пишет:
Значит, если я объявлю переменную, как $test = null
проициализируете
Pavelbeginner пишет:
то это считается ошибкой и этой переменной
нет это не ошибка
выводится предупреждение
тоесть вполне возможно что это ошибка (потенциальная)
поэтому надо инициализировать и если есть предупреждение значит чтото не так и надо пересмотреть код (Добавление)
Pavelbeginner пишет:
при повторном же обращение к этой переменной ошибки уже не будет
предупреждение не будет конечно
DeepVarvar
Отправлено: 12 Октября, 2011 - 22:13:52
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
$a = null;
if (isset($a)) echo "x";
unset($a);
if (isset($a)) echo "y";
если както в ходе работы затер инициализацию будет предупреждение
код выполнится но если появилась переменная с потолка значит есть повод проверить код
DeepVarvar
Отправлено: 12 Октября, 2011 - 22:17:15
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.