수색…


통사론

  • define (문자열 $ name, 혼합 된 $ 값 [, bool $ case_insensitive = false])
  • const CONSTANT_NAME = VALUE;

비고

상수 는 나중에 변경되지 않아야하는 값을 저장하는 데 사용됩니다. 또한 종종 환경을 정의하는 구성 매개 변수 (dev / production)를 저장하는 데 자주 사용됩니다.

상수에는 변수와 같은 유형이 있지만 모든 유형을 사용하여 상수를 초기화 할 수있는 것은 아닙니다. 객체와 자원은 상수 값으로 사용될 수 없습니다. 배열은 PHP 5.6부터 상수로 사용할 수 있습니다.

일부 상수 이름은 PHP에서 예약합니다. 여기에는 true , false , null 및 많은 모듈 관련 상수가 포함됩니다.

상수는 일반적으로 대문자를 사용하여 명명됩니다.

상수가 정의되어 있는지 확인하기

간단한 확인

상수가 정의되어 있는지 확인하려면 defined 함수를 사용하십시오. 이 함수는 상수의 값을 신경 쓰지 않으며, 상수가 존재하는지 여부 만 고려합니다. 상수 값이 null 이거나 false 경우에도 함수는 여전히 true 반환 true .

<?php

define("GOOD", false);

if (defined("GOOD")) {
    print "GOOD is defined" ; // prints "GOOD is defined"

    if (GOOD) {
        print "GOOD is true" ; // does not print anything, since GOOD is false
    }
}

if (!defined("AWESOME")) {
   define("AWESOME", true); // awesome was not defined. Now we have defined it 
}

상수는 코드에서 정의한 행 다음 에 "가시적"이됩니다.

<?php

if (defined("GOOD")) {
   print "GOOD is defined"; // doesn't print anyhting, GOOD is not defined yet.
}

define("GOOD", false);

if (defined("GOOD")) {
   print "GOOD is defined"; // prints "GOOD is defined"
}

정의 된 모든 상수 가져 오기

PHP에 의해 생성 된 것을 포함하여 정의 된 상수를 모두 얻으려면 get_defined_constants 함수를 사용하십시오 :

<?php

$constants = get_defined_constants();
var_dump($constants); // pretty large list

앱에서 정의한 상수 만 얻으려면 스크립트의 처음과 끝에서 (일반적으로 부트 스트랩 프로세스 이후에) 함수를 호출하십시오.

<?php

$constants = get_defined_constants();

define("HELLO", "hello"); 
define("WORLD", "world"); 

$new_constants = get_defined_constants();

$myconstants = array_diff_assoc($new_constants, $constants);
var_export($myconstants); 
   
/* 
Output:

array (
  'HELLO' => 'hello',
  'WORLD' => 'world',
) 
*/

때로는 디버깅에 유용합니다.

상수 정의하기

상수는 const 문 또는 define 함수를 사용하여 작성됩니다. 규칙은 상수 이름에 대문자를 사용하는 것입니다.

명시 적 값을 사용하여 상수 정의

const PI = 3.14; // float
define("EARTH_IS_FLAT", false); // boolean
const "UNKNOWN" = null; // null
define("APP_ENV", "dev"); // string
const MAX_SESSION_TIME = 60 * 60; // integer, using (scalar) expressions is ok

const APP_LANGUAGES = ["de", "en"]; // arrays


define("BETTER_APP_LANGUAGES", ["lu", "de"]); // arrays

다른 상수를 사용하여 상수 정의

하나의 상수가 있다면 그것을 기반으로 또 다른 상수를 정의 할 수 있습니다 :

const TAU = PI * 2;
define("EARTH_IS_ROUND", !EARTH_IS_FLAT);
define("MORE_UNKNOWN", UNKNOWN);
define("APP_ENV_UPPERCASE", strtoupper(APP_ENV)); // string manipulation is ok too
// the above example (a function call) does not work with const:
// const TIME = time(); # fails with a fatal error! Not a constant scalar expression
define("MAX_SESSION_TIME_IN_MINUTES", MAX_SESSION_TIME / 60);

const APP_FUTURE_LANGUAGES = [-1 => "es"] + APP_LANGUAGES; // array manipulations


define("APP_BETTER_FUTURE_LANGUAGES", array_merge(["fr"], APP_BETTER_LANGUAGES));

예약 된 상수

일부 상수 이름은 PHP에 의해 예약되어 있으며 재정의 될 수 없습니다. 이 모든 예제는 실패합니다.

define("true", false); // internal constant
define("false", true); // internal constant
define("CURLOPT_AUTOREFERER", "something"); // will fail if curl extension is loaded

통지서가 발행됩니다.

Constant ... already defined in ...

조건부 정의

동일한 변수를 정의 할 수있는 파일이 여러 개있는 경우 (예 : 기본 구성, 로컬 구성) 구문을 따르면 충돌을 피할 수 있습니다.

defined("PI") || define("PI", 3.1415); // "define PI if it's not yet defined"

const vs define

define 은 런타임 표현식이며 const 는 컴파일 시간을 나타냅니다.

따라서 define 는 동적 값 (즉, 함수 호출, 변수 등)을 허용하고 심지어 동적 이름과 조건 정의를 허용합니다. 그러나 항상 루트 네임 스페이스에 상대적으로 정의됩니다.

const 는 고정되어 있습니다 (다른 상수, 스칼라 또는 배열 및 제한된 집합, 즉 소위 상수 스칼라 표현식 , 즉 산술, 논리 및 비교 연산자 및 배열 역 참조와의 연산 만 가능)하지만 자동으로 네임 스페이스 현재 활성 네임 스페이스가 접두사입니다.

const 는 값으로 다른 상수와 스칼라 만 지원하며 아무런 연산도 지원하지 않습니다.

클래스 상수

상수는 const 키워드를 사용하여 클래스 내에서 정의 할 수 있습니다.

class Foo {
    const BAR_TYPE = "bar";

    // reference from inside the class using self::
    public function myMethod() {
        return self::BAR_TYPE;
    }
}

// reference from outside the class using <ClassName>::
echo Foo::BAR_TYPE;

이것은 항목 유형을 저장하는 데 유용합니다.

<?php

class Logger {
    const LEVEL_INFO = 1;
    const LEVEL_WARNING = 2;
    const LEVEL_ERROR = 3;

    // we can even assign the constant as a default value
    public function log($message, $level = self::LEVEL_INFO) {
        echo "Message level " . $level . ": " . $message;
    }
}

$logger = new Logger();
$logger->log("Info"); // Using default value
$logger->log("Warning", $logger::LEVEL_WARNING); // Using var
$logger->log("Error", Logger::LEVEL_ERROR); // using class

상수 배열

배열은 PHP 5.6 이후 버전의 일반 상수 및 클래스 상수로 사용할 수 있습니다.

클래스 상수 예제

class Answer {
    const C = [2,4];
}

print Answer::C[1] . Answer::C[0]; // 42

일반 상수 예제

const ANSWER = [2,4];
print ANSWER[1] . ANSWER[0]; // 42

또한 버전 PHP 7.0에서이 기능은 일반 상수에 대한 define 함수로 이식되었습니다.

define('VALUES', [2, 3]);
define('MY_ARRAY', [
    1,
    VALUES,
]);

print MY_ARRAY[1][1]; // 3

상수 사용하기

상수를 사용하려면 이름을 사용하십시오.

if (EARTH_IS_FLAT) {
    print "Earth is flat";
}

print APP_ENV_UPPERCASE;

또는 상수의 이름을 미리 모르는 경우 constant 함수를 사용하십시오.

// this code is equivalent to the above code
$const1 = "EARTH_IS_FLAT";
$const2 = "APP_ENV_UPPERCASE";

if (constant($const1)) {
    print "Earth is flat";
}

print constant($const2);


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow