Php переопределяет константы при каждом запросе? - PullRequest
2 голосов
/ 18 октября 2019

Я видел, как некоторые люди используют этот синтаксис в своем коде в index.php или в файле конфигурации

defined('SOME_CONSTANT') || define('SOME_CONSTANT','SOME_VALUE');

, хотя я понимаю, что это значит (если он определен, оставьте его как есть, иначе определите его), но зачем искать, определено ли оно или нет, если оно будет неопределенным в начале скрипта?

AFAIK PHP повторно выполняет скрипт при каждом отдельном запросе, так какой смысл использовать «определенные»».

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Рассмотрим константы, определенные в файлах, которые могут быть или не быть включены, или файлы, к которым можно получить прямой доступ или получить доступ через include/require:

Если вы обращались к https://example.com/index.php?page=test, тогда константа определяетсяи test.php включено:

// index.php
define('INDEX', true);
include($_GET['page'] . '.php');  // example only, don't do this!

В отличие от прямого доступа к https://example.com/test.php там, где константа не была определена:

// test.php
defined('INDEX') || define('INDEX', false);

Это подобно другим переменным, которые могут или могутне устанавливается, как в примере выше при доступе к https://example.com/index.php:

isset($_GET['page']) || $_GET['page'] = 'default';
// or more likely
$page = $_GET['page'] ?: 'default';
0 голосов
/ 18 октября 2019

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

Если вы не проверили существование данной константы, то в приложении будет ошибка для неопределенной константы.

Примечание. Если вы хотите узнать, существует ли переменная, используйте isset (), как определено (), только для констант. Если вы хотите узнать, существует ли функция, используйте function_exists ().

Ссылка: https://www.php.net/manual/en/function.defined.php, https://www.php.net/manual/en/function.define.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...