Когда и как использовать константы в PHP? - PullRequest
8 голосов
/ 12 ноября 2011

Я сейчас программирую веб-сайт (на 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()?

Ответы [ 3 ]

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

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

  3. Если вы знаете имя константы, проще всего / лучше всего использовать ее напрямую.echo MY_CONSTANT
    Если вы не знаете имя константы (например, ее имя в переменной), используйте constant():

    $name = 'MY_CONSTANT';
    echo constant($name);
3 голосов
/ 12 ноября 2011

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

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

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

error_reporting(E_ALL);

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

Использование неопределенной константы MY_CONST - предполагается, что 'MY_CONST'

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

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

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

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

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

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

1 голос
/ 12 ноября 2011

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

echo defined( VERSION ) ? VERSION : "";

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

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

...