Php объявить несколько переменных

Правильный способ объявить несколько переменных в PHP

Я много лет писал личные скрипты на PHP и привык отключать отображение ошибок. Я собираюсь выпустить некоторые из этих скриптов и хотел бы сделать это правильно.

Единственная причина, по которой я отключил отображение ошибок, заключается в том, чтобы не проверять каждую переменную до ее использования благодаря isset().

Есть ли лучший способ объявить несколько переменных, чем этот?

Что-то вроде этого, например:

Ожидая var $foo быть пустой строкой кажется странным. Какие операции вы делаете позже, что вызывает проблемы? — Mike B

Я не совсем понимаю, о чем речь. Вы тестируете переменную, прежде чем установить, чтобы проверить, можете ли вы ее установить? Вы пришли с другого языка, где вам нужно установить такие переменные, как dim d as Integer ? Я думаю, что вам действительно нужна некоторая инкапсуляция, такая как функции, классы и т. д., поэтому вы выходите за пределы глобального пространства имен, а затем привыкаете объявлять переменные в начале каждого метода функции/класса. — Jared Farrish

@MikeB: простой тест. Если переменная не объявлена ​​в первую очередь, простой if ($foo == ‘blabla’) выдаст ошибку. — Tom Biakryek

Откуда тогда берутся переменные? Вы используете что-то вроде extract($_GET) для создания переменных, и вы на самом деле не знаете, что было создано? — Mike B

Что говорит эта ошибка? Это предупреждение? — Jared Farrish

7 ответы

Если это ваш скрипт и вы знаете, какие переменные вы используете, зачем вам тратить ресурсы на проверку того, была ли переменная объявлена ​​раньше?

Кроме того, если вы просто хотите «объявить» их по какой-либо причине, вы можете поместить их все в одну строку с помощью ; , Как в $foo; $bar; $far; $boo; , все в одну строку. Примечание для непосвященных, $foo, $bar, $far, $boo; выдает синтаксическую ошибку (разбора), убивая скрипт. — Джаред Фарриш

@ДжаредФарриш $foo; $bar; $far; $boo; все равно кинет Notice: Undefined variable: . — Джефф Пакетт

Не приведет ли это к изменению всех значений, если вы измените значение только одной переменной? — molerat

molerat, НЕТ, после объявления переменных их можно менять отдельно и каждая сохранит свое значение. — DaneSoul

@molerat ты тоже программируешь на питоне, не так ли?? я только начал программировать на питоне и на собственном горьком опыте обнаружил, что изменение одного в цепочке меняет все остальные. на самом деле, подождите, это был не питон. это был другой язык — старик

Я разместил это в комментарии ранее, но кто-то предложил мне отправить его в качестве ответа.

Самый короткий и простой способ, о котором я могу думать, это сделать:

Я часто предпочитаю устанавливать значение false вместо пустой строки, чтобы вы всегда могли выполнять проверки в будущем с === false, но это всего лишь предпочтение и зависит от того, как вы используете эти переменные и для чего.

ВАШЕ if() isset() попытка — правильный способ сделать это!

Но вы можете написать его немного короче/более читабельно, используя Тернарный оператор:

Первый $foo будет установлено значение после ? когда состояние после = истинно, иначе будет установлено значение после : . Состояние (между = и ? ) всегда будет приводиться как логическое значение.

Начиная с PHP 5.3 можно еще короче написать:

Это установит $foo в TRUE or FALSE (в зависимости от того, что isset() возвращается), как указал @Decent Dabbler в комментариях. Удаление isset() установит это на » но он также выдаст уведомление о неопределенной переменной (хотя и не в производстве).

Начиная с PHP 7 вы можете использовать нулевой оператор объединения:

Это не вызовет никакой ошибки, но будет оцениваться как TRUE if $foo существует и пуст, в отличие от сокращенного тернарного оператора, который будет оцениваться как FALSE если переменная пуста.

Источник

Правильный способ объявить несколько переменных в PHP

Я много лет программировал личные скрипты на PHP и привык отключать отображение ошибок. Я собираюсь выпустить некоторые из этих скриптов и хотел бы сделать это правильно. Единственная причина, по которой я отключу отображение ошибок, — это не проверять каждый отдельный var, прежде чем использовать его, благодаря isset(). Итак, вот мой вопрос: Есть ли лучший способ объявить несколько vars, чем это?

Ожидать, что var $foo будет пустой строкой, кажется странным. Какие операции вы делаете позже, что вызывает проблемы?

Я не совсем понимаю, о чем это. Вы тестируете переменную перед тем, как проверять, можете ли вы ее установить? Вы пришли с другого языка, где вы должны установить переменные, такие как dim d as Integer ? Я думаю, что вам действительно нужны некоторые инкапсуляции, такие как функции, классы и т. Д., Так что вы выходите из глобального пространства имен, а затем привыкаете объявлять переменные в начале каждого метода функции / класса.

@MikeB: простой тест. Если var не объявлен в первую очередь, простое if ($foo == ‘blabla’) вызовет ошибку.

Откуда берутся переменные? Вы используете что-то вроде extract($_GET) для создания переменных, и вы на самом деле не знаете, что было создано?

@JaredFarrish: дело в том, что мне там не нужны функции. Единственная причина, по которой я хотел бы протестировать эти переменные, — это избегать отображения ошибок на серверах, где отчеты об ошибках не отключены. Сценарий работает как есть (и не отображает ошибок, связанных с php, и не является слабым с точки зрения безопасности).

Затем оставьте это людям, выполняющим сценарий, или (если они не разбираются), error_reporting(0) . Уведомление — это не что-то, что перебивает ваш код легкомысленными проверками, и вы все равно должны использовать функции, по крайней мере, так, чтобы вы не входили в глобальное пространство имен (что, я думаю, вас может заинтересовать). Это просто хорошая практика, чтобы каким-то образом инкапсулировать ваш код. Если вы действительно обеспокоены, просто объявите свои переменные, которые вы использовали в начале скрипта. Никаких проверок не требуется, и многие считают это хорошей практикой самодокументирования.

«Уведомление не является чем-то, что могло бы вас опровергнуть легкомысленными проверками.« Спасибо за ваш ответ, это то, о чем я беспокоился », это считается плохой практикой, чтобы заставить error_reporting иметь значение 0?». Теперь у меня есть ответ. Есть ли у вас какие-либо ссылки относительно инкапсуляции кода? Как указывалось ранее, на сегодняшний день я использую функции или класс только тогда, когда это абсолютно необходимо. А поскольку я самоучка, мне действительно интересна любая лекция, которая могла бы улучшить мои навыки.

@TomBiakryek TomBiakryek Нет, нет, неправильный вынос: p — Проверка ошибок, безусловно, хорошая вещь. Многие сторонники сообщений об ошибках устанавливают на строжайший уровень во время разработки (и, конечно, на производство). Ваши намерения в этом вопросе — очень хорошая практика. Мне просто было любопытно ваше конкретное обстоятельство.

О error_reporting(0) , который отключает все ошибки PHP, является обычной практикой обеспечения безопасности, чтобы принудительно отключать ошибки в целях безопасности. Так что используйте его, да, за исключением разработки (и желательно в частной среде или части вашего сайта). Теперь, в сценарии, который вы передаете, это зависит от уровня навыков человека, которому вы его даете, поэтому вы должны учитывать, что они могут не знать, как, но должны отключить его в производстве.

Прочтите этот вопрос для получения дополнительной информации о сообщениях об ошибках stackoverflow.com/questions/74847/…

Что касается инкапсуляции, см. Какова цель инкапсуляции? Что такое инкапсуляция с простым примером в php? На самом деле нет никакого «действительно необходимого» времени для методов инкапсуляции, оно просто соответствует требованиям вашего кода. Например, некоторые языки почти полностью функциональны или объектно-ориентированы. PHP дает вам оба мира, поэтому постарайтесь использовать их как можно больше . 😉

Источник

Правильный способ объявить несколько переменных в PHP

Я много лет писал личные скрипты на PHP и привык отключать отображение ошибок. Я собираюсь выпустить некоторые из этих скриптов и хотел бы сделать это правильно.

Единственная причина, по которой я отключил отображение ошибок, заключается в том, чтобы не проверять каждую переменную до ее использования благодаря isset().

Есть ли лучший способ объявить несколько переменных, чем этот?

Что-то вроде этого, например:

Ожидая var $foo быть пустой строкой кажется странным. Какие операции вы делаете позже, что вызывает проблемы? — Mike B

Я не совсем понимаю, о чем речь. Вы тестируете переменную, прежде чем установить, чтобы проверить, можете ли вы ее установить? Вы пришли с другого языка, где вам нужно установить такие переменные, как dim d as Integer ? Я думаю, что вам действительно нужна некоторая инкапсуляция, такая как функции, классы и т. д., поэтому вы выходите за пределы глобального пространства имен, а затем привыкаете объявлять переменные в начале каждого метода функции/класса. — Jared Farrish

@MikeB: простой тест. Если переменная не объявлена ​​в первую очередь, простой if ($foo == ‘blabla’) выдаст ошибку. — Tom Biakryek

Откуда тогда берутся переменные? Вы используете что-то вроде extract($_GET) для создания переменных, и вы на самом деле не знаете, что было создано? — Mike B

Что говорит эта ошибка? Это предупреждение? — Jared Farrish

7 ответы

Если это ваш скрипт и вы знаете, какие переменные вы используете, зачем вам тратить ресурсы на проверку того, была ли переменная объявлена ​​раньше?

Кроме того, если вы просто хотите «объявить» их по какой-либо причине, вы можете поместить их все в одну строку с помощью ; , Как в $foo; $bar; $far; $boo; , все в одну строку. Примечание для непосвященных, $foo, $bar, $far, $boo; выдает синтаксическую ошибку (разбора), убивая скрипт. — Джаред Фарриш

@ДжаредФарриш $foo; $bar; $far; $boo; все равно кинет Notice: Undefined variable: . — Джефф Пакетт

Не приведет ли это к изменению всех значений, если вы измените значение только одной переменной? — molerat

molerat, НЕТ, после объявления переменных их можно менять отдельно и каждая сохранит свое значение. — DaneSoul

@molerat ты тоже программируешь на питоне, не так ли?? я только начал программировать на питоне и на собственном горьком опыте обнаружил, что изменение одного в цепочке меняет все остальные. на самом деле, подождите, это был не питон. это был другой язык — старик

Я разместил это в комментарии ранее, но кто-то предложил мне отправить его в качестве ответа.

Самый короткий и простой способ, о котором я могу думать, это сделать:

Я часто предпочитаю устанавливать значение false вместо пустой строки, чтобы вы всегда могли выполнять проверки в будущем с === false, но это всего лишь предпочтение и зависит от того, как вы используете эти переменные и для чего.

ВАШЕ if() isset() попытка — правильный способ сделать это!

Но вы можете написать его немного короче/более читабельно, используя Тернарный оператор:

Первый $foo будет установлено значение после ? когда состояние после = истинно, иначе будет установлено значение после : . Состояние (между = и ? ) всегда будет приводиться как логическое значение.

Начиная с PHP 5.3 можно еще короче написать:

Это установит $foo в TRUE or FALSE (в зависимости от того, что isset() возвращается), как указал @Decent Dabbler в комментариях. Удаление isset() установит это на » но он также выдаст уведомление о неопределенной переменной (хотя и не в производстве).

Начиная с PHP 7 вы можете использовать нулевой оператор объединения:

Это не вызовет никакой ошибки, но будет оцениваться как TRUE if $foo существует и пуст, в отличие от сокращенного тернарного оператора, который будет оцениваться как FALSE если переменная пуста.

Источник

Читайте также:  Python месяц одной цифрой
Оцените статью