2016-03-23 2 views
2

Так что я недавно узнал о константах в PHP. к счастью, на самом деле им нечего что-то изучать, они кажутся просто сущностью, которая сохраняет ценность чего-то, как переменную.Правильное использование констант в PHP

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

Но, конечно, это приносит другие преимущества/использование, чем просто использовать переменную в любом случае? В каких ситуациях я должен выбирать константы?

+4

Возможный дубликат [DEFINE vs Variable in PHP] (http://stackoverflow.com/questions/1225082/define-vs-variable-in-php) –

+1

@KirkBeard не является точным дубликатом, этот вопрос объясняет определение и что такое константа. В этом случае я прошу о хороших ситтах, что вы должны использовать константы. – Eclipse

+0

С константами вам также не нужно беспокоиться о сфере видимости. –

ответ

1

Если вы обнаруживаете, что настроите переменную для удобства и никогда не меняете ее во время сценария, скорее всего, вы должны использовать константу. Константы похожи на переменные, за исключением того, что после их определения они не могут быть неопределенными или изменены - они являются постоянными, как следует из названия. На многих языках константы быстрее, чем переменные, поэтому рекомендуется, но это не так много в PHP - хотя они, возможно, немного быстрее, основным преимуществом использования констант является тот факт, что у них нет доллара знак спереди, и поэтому заметно отличаются от переменных. Кроме того, константы автоматически глобальны по всему сценарию, в отличие от переменных.

Чтобы установить константу, используйте функцию define() - она ​​принимает два параметра, причем первым является имя константы для установки, а второе - значение, которое вы хотите установить. Например, это следующая строка кода устанавливает переменную CURRENT_TIME быть возвращаемое значение функции времени(), а затем выводит его:

define("CURRENT_TIME", time()); 
print CURRENT_TIME; 

Обратите внимание, что это не $ CURRENT_TIME или CURRENT_TIME - константы, как переменные , чувствительны к регистру, но в отличие от переменных они не начинаются со знака доллара. Вы можете изменить это поведение, передав верно в качестве третьего параметра для определения(), что делает постоянные независимо от регистра:

define("CURRENT_TIME", time(), true); 
print Current_TiMe; 

Есть две полезных функций для работы с константами, и они определяются() и константа(). Определенная() функция в основном является константным эквивалентом isset(), поскольку она возвращает true, если определена постоянная строка, которую вы передаете ей. Например:

define("CURRENT_TIME", time(), true); 
if (defined("CURRENT_time")) { 
    /// etc } 

Обратите внимание, что вы должны передать постоянное имя в определенные() внутренние кавычки.

+1

Очень хорошо, спасибо! – Eclipse

-1

Константы предназначены для тех случаев, когда кто-то еще может прочитать и попытаться установить ваш код, но не знает, какие биты они должны изменить, чтобы добавить свои собственные данные. Это особенно полезно, если у вас нет сценария установки, поскольку новый администратор должен будет установить свои собственные детали.

Пример: Вам необходимо установить новый скрипт на своем веб-сайте, который использует какую-либо базу данных. Вы откроете основной файл и отредактируете константы, которые необходимо добавить в подробности подключения к базе данных. Поскольку они являются константами, вы знаете, что они не должны меняться. И они не должны, иначе ваша база данных не сработает! Если вы используете переменные, значения могут быть случайно изменены в скрипте. Также понятно, какие части вам нужно изменить - и, как правило, они находятся в начале документа или в отдельном файле, который легко идентифицировать.

+0

Добавьте дополнительную информацию о области с константами и переменными, и я закрою вам +1 –

1

Ключевой характеристикой констант является то, что они ведут себя как функции и классы, в том смысле, что их нужно определить при попытке их использования, иначе PHP приведет к ошибке; и что они глобальны и безразличны по объему. Это делает их идеальными для флагов в функциональных параметрах, где значение относительно неважно, но требует уникальной идентификации. Просто посмотрите, как сам PHP использует константы:

json_encode($foo, JSON_UNESCAPED_UNICODE) 
pathinfo($bar, PATHINFO_FILENAME) 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) 

В чем были альтернативы?

$pdo->setAttribute('errmode', 'exception') 

Строки не могут быть проверены на наличие такой же путь константы могут, опечаток легче и требуют более ручной обработки ошибок внутри функции, и строки не могут быть интроспектирован так же, как вы можете вникать PDO для своих постоянных, и, следовательно, доступность доступных возможностей снижается.

$pdo->setAttribute(1, 2) 

Магические цифры, очевидно, еще хуже, с еще меньшим значением и тем же недостатком правоприменения и открытости.

В этих случаях константы идеальны. Они обеспечивают принудительный, читаемый идентификатор для , что означает; фактическое значение, которое сохраняет константа, относительно неважно.

Смежные вопросы