수색…
통사론
- 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);