Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
prism
Зарегистрирован: 15.05.2005 Сообщения: 5
|
Добавлено: Вс Май 15 2005 17:41 Заголовок сообщения: Эквивалентность двух конструкций в PHP |
|
|
Всегда ли можно заменить первую конструкцию на вторую?
Код: |
# 1
if (isset($x) && $x) {
/* ... */
} else {
/* ... */
}
# 2
if (@$x) {
/* ... */
} else {
/* ... */
}
|
Если да, то насколько это безопасно, переносимо и так далее, т.е. полностью ли они эквивалентны?
Проверял в php 4.3.10.10 (денвер, дефолтные настройки), вроде разницы нет. |
|
Вернуться к началу |
|
|
trustno1
Зарегистрирован: 09.02.2005 Сообщения: 17
|
Добавлено: Пн Май 16 2005 07:20 Заголовок сообщения: Re: Эквивалентность двух конструкций в PHP |
|
|
prism писал(а): | Всегда ли можно заменить первую конструкцию на вторую?
Код: |
# 1
if (isset($x) && $x) {
/* ... */
} else {
/* ... */
}
# 2
if (@$x) {
/* ... */
} else {
/* ... */
}
|
Если да, то насколько это безопасно, переносимо и так далее, т.е. полностью ли они эквивалентны?
Проверял в php 4.3.10.10 (денвер, дефолтные настройки), вроде разницы нет. |
с точки зрения кода абсолютно не эквивалентны.
В первой ты проверяшь, существует ли переменная $x, а во второй нет. И если б не собака, то в лог полез бы соответствующий notice при обращении к не заданной $x.
В общем, первый вариант мне кажется правильней |
|
Вернуться к началу |
|
|
prism
Зарегистрирован: 15.05.2005 Сообщения: 5
|
Добавлено: Пн Май 16 2005 18:53 Заголовок сообщения: |
|
|
Цитата: | В первой ты проверяшь, существует ли переменная $x, а во второй нет. И если б не собака, то в лог полез бы соответствующий notice при обращении к не заданной $x. |
Так в первом случае эта проверка и нужна только для того, чтобы избежать notice`а, а во втором мы замечание просто игнорируем.
Цитата: | В общем, первый вариант мне кажется правильней |
А можно пример, когда надо делать именно так, а не иначе?
Имхо второй вариант компактее и (имхо опять же) код от этого нагляднее и проще. В общем какие "за" и "против"? |
|
Вернуться к началу |
|
|
trustno1
Зарегистрирован: 09.02.2005 Сообщения: 17
|
Добавлено: Пн Май 16 2005 20:03 Заголовок сообщения: |
|
|
prism писал(а): | Цитата: | В первой ты проверяшь, существует ли переменная $x, а во второй нет. И если б не собака, то в лог полез бы соответствующий notice при обращении к не заданной $x. |
Так в первом случае эта проверка и нужна только для того, чтобы избежать notice`а, а во втором мы замечание просто игнорируем.
Цитата: | В общем, первый вариант мне кажется правильней |
А можно пример, когда надо делать именно так, а не иначе?
Имхо второй вариант компактее и (имхо опять же) код от этого нагляднее и проще. В общем какие "за" и "против"? |
неправильно самостоятельно вырубать нотисы, они не для того пишутся. А если в последующих версиях PHP обращение к незаданной переменной будет вызывать не нотис, а fatal error, будешь код перелопачивать? |
|
Вернуться к началу |
|
|
prism
Зарегистрирован: 15.05.2005 Сообщения: 5
|
Добавлено: Вт Май 17 2005 00:36 Заголовок сообщения: |
|
|
Цитата: | неправильно самостоятельно вырубать нотисы, они не для того пишутся |
Да, любой код, где используется оператор @, потенциально опаснее кода без него. Предположим, что в таких случаях я знаю что делаю.
Цитата: | если в последующих версиях PHP обращение к незаданной переменной будет вызывать не нотис, а fatal error |
Ой, сильно как загнул.
Цитата: | будешь код перелопачивать? |
Код: |
perl -pe "s#@(\$\w+)#isset ($1) && $1#g;" *.php
|
Немного помогает :)
В целом ты меня убедил, что первый вариант все таки лучше второго, но не настолько, чтобы вторым совсем пренебрегать. Если же есть более весомые аргументы, только буду рад услышать. |
|
Вернуться к началу |
|
|
prism
Зарегистрирован: 15.05.2005 Сообщения: 5
|
Добавлено: Ср Май 18 2005 13:47 Заголовок сообщения: |
|
|
Я - валенок:
Код: |
if (empty($x)) {
echo '$x is either 0, empty, or not set at all'; # :-)
}
|
|
|
Вернуться к началу |
|
|
|