Когда и как использовать константы в PHP?

#php #constants #php4

#php #константы #php4

Вопрос:

В настоящее время я программирую веб-сайт (на PHP4). Я планирую сохранять значения, которые не меняются во время выполнения, в константах. Это, например, номер версии данных для входа в базу данных.

Вопрос 1: существуют ли какие-либо проблемы (связанные с безопасностью), которые могут возникнуть при сохранении данных в константах?

На данный момент я делаю следующее, чтобы определить и вызвать константу:

 define("VERSION",   "1.0");
echo "Current version: ".VERSION."."; // Result: "Current version: 1.0."
  

Есть одна вещь, которая меня раздражает: в случае, если константа не определена, вместо, например, NULL , возвращается «неправильное» имя переменной.

 define("VERSION",   "1.0");
echo "Current version: ".VERSIONXXX."."; // Result: "Current version: VERSIONXXX."
  

Одно из решений, которое я нашел, чтобы получать сообщение об ошибке и возвращаемое значение «NULL», когда я случайно ввел неправильное имя константы, — это использование функции constant() :

 define("VERSION",   "1.0");
echo "Current version: ".constant("VERSIONXXX")."."; // Result: "Current version: ."
  

Вопрос 2: Могу ли я предотвратить другим способом, что PHP возвращает имя несуществующей переменной?

Вопрос 3: Всегда ли значение константы в PHP должно возвращаться с помощью функции constant() ?

Комментарии:

1. Есть ли какая-либо причина, по которой вы остаетесь на PHP4, который больше не активен?

Ответ №1:

  1. Если вы пытаетесь использовать константу, которая не существует, PHP автоматически предполагает, что это строка, поэтому вы видите VERSIONXXX .

  2. IIRC выдает предупреждение, если сообщение об ошибке находится на соответствующем уровне. Лучшее решение здесь — убедиться, что ваш код использует правильные имена констант.

  3. Если вы знаете имя константы, проще всего использовать ее напрямую. echo MY_CONSTANT

    Если вы не знаете имя константы (например, ее имя находится в переменной), используйте constant() :

 $name = 'MY_CONSTANT'; 
 константа echo ($name);

Ответ №2:

В обратном порядке:

Вопрос 3: Нет Вопрос 2: Не совсем, но вы можете внести коррективы.

из-за (вопрос 1:) сообщения об ошибке. Ваш веб-сервер PHP настроен скрывать некоторые ошибки. Если вы добавите

 error_reporting(E_ALL);
  

в заголовке скриптов вы получите

Использование неопределенной константы MY_CONST — предполагается ‘MY_CONST’

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

Если вы не уверены, что константа была установлена в первую очередь, вы можете использовать defined

 if(defined('MY_CONSTANT') {
     //do something
}
  

Но, по моему личному мнению, не должно быть много случаев, когда это необходимо, поскольку само слово constant подразумевает гарантированное присутствие. Единственное исключение, которое я могу придумать, — это типичный тест заголовка.

 if(!defined('MY_APP_IS_PRESENT')) {
    die('You can not call this file on its own, please use index.php.');
}
  

И последний совет: пойдите и создайте себе функцию обработки ошибок, может быть, даже с помощью firephp?

Ответ №3:

Ну, вы всегда можете использовать defined функцию, чтобы убедиться, что константа существует. В сочетании с троичным оператором вы могли бы просто повторить пустую строку, что-то вроде:

 echo defined( VERSION ) ? VERSION : "";
  

Не лучший ответ, но работоспособный?

Руководство по PHP для defined() находится по адресу http://php.net/manual/en/function.defined.php