Как PHP использует константы (определяет) - PullRequest
0 голосов
/ 29 июля 2010

Представьте, что у меня есть эта константа в PHP:

define('APP_PATH', str_replace('//', '/', str_replace('\\', '/', dirname(__FILE__) . '/')));

Когда я использую APP_PATH в своем приложении, выполняет ли PHP код (dirname и два str_replace на __FILE__) каждый раз, или PHP выполняет код один раз и сохраняет результат в APP_PATH ? Я надеюсь, что я достаточно ясно:)

Этот вопрос относится к PHP 5.1.0 +.

Ответы [ 4 ]

7 голосов
/ 29 июля 2010

Это должно быть сделано один раз, во время, когда оно было определено.

ОБНОВЛЕНО Для документации: define () - константы

Из документации:

Константа - это идентификатор (имя) для простого значения. Как следует из названия, это значение не может измениться во время выполнения скрипта (за исключением магических констант, которые на самом деле не являются константами). Константа чувствительна к регистру по умолчанию. По соглашению постоянные идентификаторы всегда в верхнем регистре.

Если вы хотите получить больше информации о константах и ​​прочитать документацию, это объясняется довольно хорошо и, вероятно, содержит примеры использования.

2 голосов
/ 29 июля 2010

если вам нужна переменная, а не функция, вы можете сделать эту функцию анонимной

$APP_PATH=function(){ return str_replace('//', '/', str_replace('\\', '/', dirname(__FILE__) . '/') }

или

$APP_PATH=function($file){ return str_replace('//', '/', str_replace('\\', '/', dirname($file) . '/') }

, который можно вызвать с помощью $ APP_PATH [без переменных] или $ APP_PATH ( FILE ) зависит от того, что ты хочешь сделать

1 голос
/ 29 июля 2010

Tt сохраняется как результат в одном запросе , в момент define. Следовательно, «постоянный». При следующем вызове запроса / скрипта код снова запускается, поэтому между запросами он может быть несовместимым.

1 голос
/ 29 июля 2010

Он выполняет его один раз и сохраняет результат в APP_PATH.С этого момента APP_PATH является скалярным значением.Это не похоже на дескриптор вычисления / функции или чего-либо еще.

...